[SR-Users] Dispatcher call id hash for server side invite

Ryan Wagoner rswagoner at gmail.com
Thu Aug 10 22:48:48 CEST 2017


On Thu, Aug 10, 2017 at 9:05 AM, Daniel Tryba <d.tryba at pocos.nl> wrote:

> On Thu, Aug 10, 2017 at 08:51:24AM -0400, Ryan Wagoner wrote:
> > Thanks for the explanation! I finally got the dispatcher working in an
> > active / passive Kamailio cluster in front of three FreePBX servers. I
> was
> > using the Asipto Kamailio and Asterisk real time guide as a starting
> point
> > so it had the WITHINDLG route. I ended up modifying the TOASTERISK route
> to
> > call ds_select_dst and the FROMASTERSK route uses an htable for matching
> > IPs off a mySQL view of the Kamailio dispatcher table.
>
> Am I interpreting this as: you wanto check if a message is coming from a
> dispatcher?
> If yes, take a look at ds_is_from_list:
> https://kamailio.org/docs/modules/stable/modules/
> dispatcher.html#dispatcher.f.ds_is_from_list
>
>
>
Exactly so the traffic from asterisk is trusted and isn't modified. I just
swapped my while loop for that function and it's good to go. I can't
believe I didn't see that earlier.

In my REGFWD route I have this chunk of code to lookup the dispatcher
IP/port from the same hash table before calling uac_req_send(). The
regserver column contains the dispatcher set id. Is there a way I can call
ds_select and then access the IP / port variables directly?

#!if WITH_DISPATCHER
        sql_query("castdb", "select regserver from sipusers where name =
'$au'","ra");

        if($dbr(ra=>rows)>0)
        {
                $var(rip) = $sht(dispatcherHosts=>set::$dbr(ra=>[0,0])[0]);
                $var(rport) = $sht(dispatcherHosts=>port::$var(rip));
        }
        else
        {
                return;
        }

        sql_result_free("ra");
#!else
        $var(rip) = $sel(cfg_get.asterisk.bindip);
        $var(rport) = $sel(cfg_get.asterisk.bindport);
#!endif

        $uac_req(method)="REGISTER";
        $uac_req(ruri)="sip:" + $var(rip) + ":" + $var(rport);
        $uac_req(furi)="sip:" + $au + "@" + $var(rip);
        $uac_req(turi)="sip:" + $au + "@" + $var(rip);
        $uac_req(hdrs)="Contact: <sip:" + $au + "@"
                                + $sel(cfg_get.kamailio.bindip)
                                + ":" + $sel(cfg_get.kamailio.bindport) +
">\r\n";
        if($sel(contact.expires) != $null)
                $uac_req(hdrs)= $uac_req(hdrs) + "Expires: " +
$sel(contact.expires) + "\r\n";
        else
                $uac_req(hdrs)= $uac_req(hdrs) + "Expires: " +
$hdr(Expires) + "\r\n";
        uac_req_send();

Thanks,
Ryan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-users/attachments/20170810/d4e237ac/attachment.html>


More information about the sr-users mailing list