(Shooting from the hip, but let’s brainstorm just for fun :-) )
I would consider not saving the incoming REGISTER in the Kamailio location database,notfork it but replicate or forward twice to the ASterisk servers. Keep a counter - maybe in a hash table -
and when the first 200 ok come in, raise the counter and then drop it.
When the second response comes in, save to kamailio location database (yes, it works on a response) and
then forward the response to the client. Note that you may end up in trouble unless you are really sure
that all servers have exactly the same expiry time.
Whatever you do you will have a UA that retransmits unless you respond with some 1xx code and
a situation where you may timeout the UA before you time out on Asterisk - so trim the Kamailio
transmit timer to be very short, much shorter than the UA so you make sure that Kamailio times out
way ahead of your UA.
Now, you can have a timeout on htable so that you catch the situation where you don’t get any
response from Asterisk and do something about it - tell the UA to come back in a while
with a retry-after or something else.
I am pretty sure I am missing something here, but it may give you some ideas to test out.
Cheers,
/O
Hello,
Thanks for the response.
I appreciate your comments and agree, however the architecture cannot be changed currently so in the meantime its looking to apply a fix to allow for stability in the short term.
I have built/designed other platforms and registrations don't go anywhere near the Media servers, so it is a case of working with what we have for the short term due to a number of reasons I wont go into. :)
Understand where your coming from however.
Jon
From:
oej@edvina.netDate: Wed, 27 Jul 2016 14:17:14 +0200
To:
sr-users@lists.sip-router.orgSubject: Re: [SR-Users] Checking for 200ok Response to a REGISTER request kamailio-Asterisk
Hi Guys,
So currently on our network we have a kamailio server which users register against, we then replicate the register messages to 2 Asterisk boxes sat behind it so that all entities are aware of the registration state of the users.
REGISTER--->KAMAILIO---->ASTERISK A
---->ASTERISK B
With a REGISTER---200OK exchange between Kamailio and Asterisk.
We have an issue where at some points the Asterisk servers when under load dont respond with a 200 ok(something being investigated) to the register messages sent to kamailio, so I am just working on some logic for the register message to be resent using the t_replicate and t_set_fr functions.
This works well should both Asterisk servers not respond, however, as I am using replicate and it is parallel forking, if say Asterisk A answers first and is available with a 200ok then that in turn cancels the register message branch being sent to Asterisk B(which I know is fine), however there could be a scenario where Asterisk B doesnt respond, and we wont know about it to try and resend the Register message, as the branch is cancelled.
Hope that makes sense?
I am looking at checking that both the Asterisk servers have responded and sent a 200ok, which I can grab in an onreply route but Im just wondering if someone has done something similar or has any suggestions as it is tricky to achieve currently.
I have also thought about stateless working but I really need kamailio to keep retransmitting the register until it gets a response.
Many thanks
In my view you are making a very complex solution. Why do you need to store the same registration in so many places? That’s
indicating a problem in the architecture.
/O
_______________________________________________ SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users _______________________________________________SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing listsr-users@lists.sip-router.orghttp://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users