I corrected an error with my dispatcher configuration and now, I do hit the code where
ds_select_dst ("1", "4") is no longer null. However, while the xlog I added says uac_req_send () is called, nothing is sent. The xlog prints out the value of $uac_req(hdrs) as Contact: <sip:101@192.168.1.101:5060>#015#012Expires: 600#015 after which the uac_req_send () is called. I am not sure if this is the correct way? What am I missing? Oh, nothing shows up in the tcpdump trace (only the OPTIONS message for the asterisk<->kamailio peering shows up). On Sat, Jul 23, 2016 at 3:48 PM, Tickling Contest < tickling.cont...@gmail.com> wrote: > Thanks, guys! > > Sammy, I tried your code in REGFWD, but unfortunately, it does not forward > anything to Asterisk. I can confirm this because it keeps going into the > else clause in the REGFWD (which I added to confirm). My current REGFWD > looks like this: > > route[REGFWD] { > if(!is_method("REGISTER")) > { > return; > } > xlog ("L_DEBUG", "MYDEBUG: In REGFWD"); > if(!ds_select_dst("1", "4")) { > $var(rip) = $(du{s.select,1,:}); > $var(rport) = $(du{s.select,2,:}); > $uac_req(method)="REGISTER"; > $uac_req(ruri)="sip:" + $var(rip) + ":" + $var(rport) + > ";transport=tcp"; > $uac_req(furi)="sip:" + $au + "@" + $var(rip); > $uac_req(turi)="sip:" + $au + "@" + $var(rip); > $uac_req(hdrs)="Contact: <sip:" + $au + "@ > 192.168.1.101:5060" + ">\r\n"; > xlog ("L_DEBUG", "MYDEBUG: In REGFWD, sending registration > info to Asterisk at $uac_req(ruri)"); > 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(); > } > else > { > xlog ("L_DEBUG", "In REGFWD, not forwarding!"); > } > > } > > > > My entire kamailio.cfg file is here: > https://gist.github.com/ticklingcontest/f96aa4d08b08dc4643056d73da24f0a5 > > Any insight is appreciated. Thanks again. > > My dispatcher at the moment has only one Asterisk server. My endpoint > registers (auth with realtime DB in Mysql), but the registration > information does not reach Asterisk. > > My kamailio box is peering with the asterisk box like so: > > root@asterisk:~# more /etc/asterisk/pjsip_wizard.conf > [kamailio] > type = wizard > sends_auth = no > sends_registrations = no > remote_hosts = 192.168.1.101 > server_uri_pattern = sip:${REMOTE_HOST}\;transport=tcp > client_uri_pattern = sip:${REMOTE_HOST}\;transport=tcp > contact_pattern = sip:${REMOTE_HOST}\;transport=tcp > outbound_auth/username = dispatcher > aor/qualify_frequency = 0 > endpoint/context = from-external ;;; change later > endpoint/disallow = all ;;; change later > endpoint/allow = ulaw ;;; change later > endpoint/dtmf_mode=rfc4733 > endpoint/media_address=192.168.1.101 ;; > aor/qualify_frequency = 15 > > BTW, my intention is to store the registrations on the Asterisk servers as > well as my ARI code depends on it. As soon I get the single Asterisk > situation working, I intend adding more servers to check the load balancing > and REGISTER forwarding, and to Colin's point, the business of just using > Kamailio as an outbound proxy. > > Again, any insight wrt why no REGISTERs are forwarding to Asterisk is > appreciated. Why is ds_select_dst("1", "4") evaluating to false for me? > > My dispatcher info: > > root@kamailio:/etc/kamailio# kamctl dispatcher show > dispatcher gateways > +----+-------+-------------------+-------+----------+-------+-------------+ > | id | setid | destination | flags | priority | attrs | description | > +----+-------+-------------------+-------+----------+-------+-------------+ > | 1 | 1 | sip:192.168.1.102 | 1 | 0 | | AsteriskA | > | 2 | 1 | sip:192.168.1.102 | 1 | 0 | | AsteriskA | > +----+-------+-------------------+-------+----------+-------+-------------+ > > > Thanks! > > On Fri, Jul 22, 2016 at 11:01 AM, Colin Morelli <colin.more...@gmail.com> > wrote: > >> If you're using Kamailio as a registrar, then it would make the most >> sense to also use it as your outbound proxy for Asterisk. >> >> This would mean whenever Asterisk needs to dial an extension, it would >> instead make a SIP call to your Kamailio instance which would then perform >> the lookup, forking, and forwarding. >> >> Is there a reason this wouldn't work in your infrastructure? If for some >> reason it can't - though I can't imagine how - then I don't see the purpose >> in using Kamailio as a registrar at all. You should just forward everything >> to Asterisk since it needs to be there anyway. >> >> Best, >> Colin >> >> On Fri, Jul 22, 2016 at 9:58 AM SamyGo <govoi...@gmail.com> wrote: >> >>> Hi Tickles, >>> >>> a) Have you tried doing this on Asterisk realtime ? for any regular >>> direct registering extension w/o kamailio(even before kamailio) ? If an >>> extension registers to one asterisk the rest of the boxes would know where >>> to contact this extension via realtime-db ? I'd say give that a try and it >>> may solve your problem, else using this REGFWD block you can parallel fork >>> this register request to ALL of your boxes and everybox would think it is >>> registered locally ! (not a recommended option I must say) >>> >>> b) If you ignore my previous comment of parallel forking registers, >>> using this REGFWD block you can use dispatcher module to replace the >>> $var(rip) and $sel(cfg_get.asterisk.bindport) by changing your REGFWD >>> block like this: >>> >>> route[REGFWD] { >>> if(!is_method("REGISTER")) >>> { >>> return; >>> } >>> if(!ds_select_dst("1", "4")) { >>> $var(rip) = $(du{s.select,1,:}); >>> $var(rport) = $(du{s.select,2,:}); >>> $uac_req(method)="REGISTER"; >>> $uac_req(ruri)="sip:" + $var(rip) + ":" + $var(rport) + >>> ";transport=tcp"; >>> $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(); >>> } >>> >>> } >>> >>> >>> In summary, depending upon your business logic/use case there could be >>> other ways to make this work as well. >>> >>> Regards, >>> Sammy >>> >>> >>> On Fri, Jul 22, 2016 at 8:53 AM, Tickling Contest < >>> tickling.cont...@gmail.com> wrote: >>> >>>> Hello, >>>> >>>> When using Kamailio with the dispatcher module for Asterisk load >>>> balancing, I am offloading REGISTERs to Kamailio (works fine), but would >>>> like to forward the REGISTERs to Asterisk so that outgoing calls from >>>> Asterisk will be possible. I know this is not strictly necessary (e.g., >>>> just use Kamailio to forward everything), but I have a lot of application >>>> logic behind my Asterisk boxes (using ARI) and so I don't want that to >>>> break. Thereby, I do need this information in Asterisk as soon as possible >>>> from Kamailio. >>>> >>>> Let's say I have three boxes Asterisk_1, Asterisk_2 and Asterisk_3 in >>>> the dispatcher module like so: >>>> >>>> 1 sip:192.168.1.201:5060;transport=tcp >>>> 1 sip:192.168.1.202:5060;transport=tcp >>>> 1 sip:192.168.1.203:5060;transport=tcp >>>> >>>> My system has endpoints as numerical extensions, from 101 to 110. When >>>> a new endpoint registers with kamailio (and authenticates), I would like to >>>> send the REGISTER to Asterisk. But I have the following questions: >>>> >>>> (a) Which Asterisk? I could send it to a round-robinned Asterisk (say, >>>> Asterisk_2), but that Asterisk may not be the one responsible for handling >>>> calls outbound for the endpoint that just registered. Even if I use "hash >>>> over auth username" instead of round-robin (In >>>> http://www.kamailio.org/docs/modules/4.0.x/modules/dispatcher.html#idp16940048, >>>> choose 5 for "alg", for example) that wont solve this problem as an >>>> outbound request may come from another Asterisk box which won't have the >>>> requisite registration information. Should I forward REGISTERs to all >>>> Asterisk boxes? Maybe I won't have to deal with this issue as I use >>>> realtime and so the REGISTER information, sent to one Asterisk box, is >>>> available to all Asterisk boxes after the write to the realtime DB. Is my >>>> understanding correct? >>>> >>>> (b) How do I do this in kamailio.cfg? With some examples on the >>>> Internet for WITH_ASTERISK directive, I see that you do >>>> >>>> route[REGFWD] { >>>> if(!is_method("REGISTER")) >>>> { >>>> return; >>>> } >>>> $var(rip) = $sel(cfg_get.asterisk.bindip); >>>> $uac_req(method)="REGISTER"; >>>> $uac_req(ruri)="sip:" + $var(rip) + ":" + >>>> $sel(cfg_get.asterisk.bindport) + ";transport=tcp"; >>>> $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(); >>>> } >>>> >>>> What is the equivalent for when you are using the dispatcher module and >>>> the kamailio.bindip and asterisk.bindip etc. are not set in the >>>> configuration, but instead should be procured from elsewhere? >>>> >>>> Any help is appreciated. >>>> >>>> >>>> >>>> _______________________________________________ >>>> 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 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 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 list sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users