[SR-Users] dispatcher and call transfer

Carsten Bock carsten at ng-voice.com
Thu Apr 26 14:25:11 CEST 2012


Hi,

if you look at the docs of the dispatcher module, you'll find this:

alg - the algorithm used to select the destination address. The
parameter can be an integer or a variable holding an interger.
- “0” - hash over callid
(http://kamailio.org/docs/modules/devel/modules_k/dispatcher.html#id2498492)

But probably you should look into record/loose_route for your setup.
Since REFER is normally an in-dialog request (belongs to another
voice-session), it should take the same route as the initial INVITE.
This is normally achieved by the record/loose-route mechanisms
described in RFC3261.
In the example config of Kamailio you find an configuration example (below).

It is not a bug in the dispatcher module, it's how you use it.

So long,
Carsten

 455         # handle requests within SIP dialogs
 456         route(WITHINDLG);

[...]

 473         # record routing for dialog forming requests (in case
they are routed)
 474         # - remove preloaded route headers
 475         remove_hf("Route");
 476         if (is_method("INVITE|SUBSCRIBE"))
 477                 record_route();

and the relevent parts in the "WITHINDLG" route:

 566 # Handle requests within SIP dialogs
 567 route[WITHINDLG] {
 568         if (has_totag()) {
 569                 # sequential request withing a dialog should
 570                 # take the path determined by record-routing
 571                 if (loose_route()) {
[...]
 580                         route(RELAY);
 581                 } else {
[...]
 587                         if ( is_method("ACK") ) {
 588                                 if ( t_check_trans() ) {
 589                                         # no loose-route, but stateful ACK;
 590                                         # must be an ACK after a 487
 591                                         # or e.g. 404 from upstream server
 592                                         t_relay();
 593                                         exit;
 594                                 } else {
 595                                         # ACK without matching
transaction ... ignore and discard
 596                                         exit;
 597                                 }
 598                         }
 599                         sl_send_reply("404","Not here");
 600                 }
 601                 exit;
 602         }
 603 }

2012/4/26 Asgaroth <00asgaroth00 at gmail.com>:
> Hi All,
>
> Currently we are running kamailio in a loadbalanced fashion whereby calls
> come in via the loadbalancers and distribute calls accross 2 media servers.
> We have come accross and issue whereby call transfers may be distributed
> accross two media servers and when the REFER message comes along to transfer
> the call, in some cases (if we're lucky) the message arrives at the wrong
> media server (transaction leg doesnt exist).
>
> Some googling later and it appears that dispatcher doesnt play nice when it
> comes to this scenario. Some suggestions popped up in my previous searches
> saying that a potential work around is to use the dialog module to check if
> a call is eastablished and then to send all calls to the same media server
> based on the dialog already being established.
>
> I'd appreciate some input from the guru's out there that have come accross
> this same issue and, if possible, some suggestions on how to work around the
> problem, does the dispatcher module have a hashing algorithm that can be
> suited for this particular scenario?
>
> Thanks in advance for any tips or sugestions.
>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
> sr-users at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>



-- 
Carsten Bock
CEO (Geschäftsführer)

ng-voice GmbH
Schomburgstr. 80
D-22767 Hamburg / Germany

http://www.ng-voice.com
mailto:carsten at ng-voice.com

Mobile +49 179 2021244
Office +49 40 34927219
Fax +49 40 34927220

Sitz der Gesellschaft: Hamburg
Registergericht: Amtsgericht Hamburg, HRB 120189
Geschäftsführer: Carsten Bock
Ust-ID: DE279344284

Hier finden Sie unsere handelsrechtlichen Pflichtangaben:
http://www.ng-voice.com/imprint/

-- 
Meet ng-voice at LinuxTag 2012 in Berlin - May 23rd - 26th, 2012. Save the 
date!



More information about the sr-users mailing list