Thank you for quick response!
But when I leave suspending enabled ($http_req(suspend) = 1, default) the call 
logic does not work, when after receiving a register (with id_index and 
id_label) from party B, the call should continue. I built this functionality 
based on your presentation 
https://www.voztovoice.org/sites/default/files/KamilioWorld2015%20-Federico.Cabiddu-TSILO.pdf.
I’ll give you my routes so that the picture is complete:
request_route {
        ...
        if (is_method("INVITE")) {
                #Push notification
                route(SUSPEND);
        }
    ...
}

# Handle SIP registrations
route[REGISTRAR] {
        if (!is_method("REGISTER")) return;
        ...
        if (!save("location")) {
                sl_reply_error();
        }
        ...
        #Push notification
        if ( (is_method("REGISTER")) && (($hdr(Expires) != "0") || 
!(($hdr(Contact) =~ "expires=0"))) && ($hdr(id_index) != "" && $hdr(id_label) 
!= "") ) {
                xlog("L_INFO", "New $rm ru=$ru tu=$tu \n");
                route(JOIN);
        }

        exit;
}

#Push notification
route[SUSPEND] {
        if(!t_is_set("failure_route")) t_on_failure("MANAGE_FAILURE");
        send_reply("100", "Suspending");
        if ( !t_suspend() ) 
        {
                xlog("L_ERROR","[SUSPEND]  failed suspending trasaction 
[$T(id_index):$T(id_label)]\n");
                send_reply("501", "Suspending error");
                exit;
        }
        xlog("L_INFO","[SUSPEND]  suspended transaction 
[$T(id_index):$T(id_label)] $fU=> $rU\n");
        $sht(vtp=>join::$rU) = "" + $T(id_index) + ":" + $T(id_label);
        route(SENDPUSH);
        exit;

}

route[SENDPUSH] {
        sl_send_reply("100", "Pushing");
        $http_req(suspend) = 0;
        $http_req(body) = '{ "caller": "' + $fU + '", "phone": "' + $rU + '", 
"id_index": "' + $T(id_index) + '", "id_label": "' + $T(id_label)+ '", 
"call_type": "'+ $var(calltype) +'" }';
        #for apple sandbox test.
        if (is_user_in("Request-URI", "test")) {
                http_async_query("http://127.0.0.1:9996/notification/";, 
"HTTP_REPLY");
        }
        http_async_query("http://127.0.0.1:9999/notification/";, "HTTP_REPLY");
}

#Resuming transaction.
route[JOIN] {
        xlog("L_INFO","[JOIN] from REGISTER key value [$hdr(id_index)   --   
$hdr(id_label)]\n");
        $var(hjoin) = 0;
        lock("$tU");
        $var(hjoin) = $sht(vtp=>join::$tU);
        $var(hstored) = $sht(vtp=>stored::$tU);
        $sht(vtp=>join::$tU) = $null;
        $var(id_index) = $(var(hjoin){s.select,0,:}{s.int});
        $var(id_label) = $(var(hjoin){s.select,1,:}{s.int});
        unlock("$tU");
        if($var(id_index)!=$null){
                if ($var(hjoin)==0)
                {
                        xlog("L_INFO","do ts_append_to() for $tu and hstored = 
$var(hstored)\n");
                        if ($var(hstored))
                        {
                                ts_append_to("$(hdr(id_index){s.int})", 
"$(hdr(id_label){s.int})", "location");
                                xlog("L_INFO","do ts_append_to() for $tu end 
\n");
                        }
                        return;
                }
                xlog("L_INFO","resuming trasaction 
[$(hdr(id_index){s.int}):$(hdr(id_label){s.int})] $tU ($var(hjoin))\n");
                if ( !t_continue("$(hdr(id_index){s.int})", 
"$(hdr(id_label){s.int})", "LOCATION") ){
                        send_reply("404", "CALL NOT FOUND");
                }
        }
}

#processing HTTP responses
route[HTTP_REPLY] {
    if ($http_ok && $http_rs == 200) {
        xlog("L_INFO", "route[HTTP_REPLY]: status $http_rs\n");
        xlog("L_INFO", "route[HTTP_REPLY]: body   $http_rb\n");
    } else if($http_rs == 415 || $http_rs == "415") {
        xlog("L_ERR", "route[HTTP_REPLY]: caller: $fU phone: $ru error: 
$http_err)\n");
                sl_send_reply("415", "The other party does not support video 
calling!");
    } else {
                xlog("L_ALERT", "route[HTTP_REPLY]: error  $http_err)\n");
        }
    #exit;
}
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
To unsubscribe send an email to [email protected]
Important: keep the mailing list in the recipients, do not reply only to the 
sender!
Edit mailing list options or unsubscribe:

Reply via email to