Hi,

REGISTER retransmission is a little bit tricky.

If you have a stateless configuration, you will not be able to detect retransmissions, so each request will be fully processed as a new one. Since we added the cseq checking in register module (according to rfc), the retransmissions will be reported as errors due invalid cseq no. Solution: relax the register checking to accept equal cseq. Disadvantage: you still process each register even if it;s retransmission - partial solution: try sending an 100 trying once you received a REGISTER.

Also you my go for a statefull approach: you will catch all retransmissions, but it might have a negative impact on your memory usage. Use t_newtran() before save in order to create transactions and absorb retransmissions.

regards,
bogdan

Klaus Darilion wrote:

Juha Heinanen wrote:

Bogdan-Andrei Iancu writes:

> check the hint hdr in the 400 reply - it may give you some hints. What I > suspect it that you have a REGISTER retransmission hitting usrloc - it > sees the same CSEQ and deny the registration.

this is what is happening.  400 reply has header

P-Registrar-Error: Invalid CSeq number

but my point was, that re-transmitting register request is perfectly ok
and instead of replying with 400, openser should resend the 200 ok until
the transaction is terminated (after 32 secods).


Thus I suspect the problem is the stateless REGISTER handling. IMO this is bad. We often had problems with slow radius backends. This caused REGISTER retransmissions which were not detected as retransmission by openser and caused multiple radius requests blocking all threads.

I remember once there was patch for from Maxim for statefull REGISTER handling. But there were also some problems which I can't remember now.

regards
klaus



_______________________________________________
Devel mailing list
[email protected]
http://openser.org/cgi-bin/mailman/listinfo/devel

Reply via email to