On Thu, Aug 10, 2017 at 9:05 AM, Daniel Tryba <d.tryba@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