Hi all,

 

 Need some newbie advice on how to write INVITE routing for my scenario. I currently have kamailio+asterisk-realtime integration working in the following way:

 

 Outbound calls:

 USER-A -> Kamailio(3.1.3) -> Asterisk(1.6.2.18) ;if dest local then

 Asterisk(1.6.2.18) -> Kamailio(3.1.3) -> USER-B ;if dest not local then

 Asterisk(1.6.2.18) -> SIP/PSTN

 

 This works, though I'd prefer to use Kamailio + LCR and gateway failover as Asterisk doesn't do this well.

 

 Here's what I want to do: (for now, small steps)

 

 Outbound Calls:

 USER-A -> Kamailio(3.1.3) -> Asterisk(1.6.2.18) ;if dest local then

 Asterisk(1.6.2.18) -> Kamailio(3.1.3) -> USER-B ;if dest not local then

 Asterisk(1.6.2.18) -> Kamailio(3.1.3)+(lcr) -> SIP/PSTN

 

 I know I have to set kamailio as a GW in asterisk instead of the PSTN GW's and add the PSTN GW's to kamailio instead, though I'm at a loss as to how to write the routing logic so that kamailio sends calls from asterisk to PSTN.

 

route[LOCATION] {

...non-INVITE check ends here...

if(route(FROMASTERISK))

{

                # coming from Asterisk --- Does this mean check kamailio local users first before continuing?

                if (!lookup("location")) {

                                switch ($rc) {

                                                case -1:

                                                case -3:

                                                                t_newtran();

                                                                t_reply("404", "Not Found");

                                                                exit;

                                                case -2:

                                                                sl_send_reply("405", "Method Not Allowed");

                                                                exit;

                                }

                }

                ## -- If match 11 digits and starts with '1' or if match 10 digits and starts with [2-9]

                if($rU=~"^(1\d{10})$") || if($rU=~"^([2-9]\d{9})$") { 

                                xlog("L_INFO", " FROMASTERISK: This will become route(NORTHAMERICA); \n");

                                exit; ## to be removed

                } else {

                                xlog("L_INFO", " FROMASTERISK: This will become route(INTERNATIONAL); \n");

                                exit; ## to be removed

                }

 

                # new call - send to Asterisk

                route(TOASTERISK);

}

 

 

 Will this logic work? I haven't determined how to write route(NORTHAMERICA) or route(INTERNATIONAL) yet so I'm just logging to debug the logic and syntax.

 

 

 Thanks in advance.