[SR-Users] How to intercept an INVITE after waking up (TSILO module) to change SDP

Oleg Podguyko podguiko at mail.ru
Thu Oct 31 16:01:20 CET 2019


Hello everybody!
 
Kamailio works as a Registrar. Additionally, rtpengine is deployed next to it. Using the module rtpgngine I change SDP. Webrtc <-> SIP calls work fine. RTPengine proxies media. It is necessary to understand that when the call comes, I determine what Protocol the call came wss/tcp/udp, and then through the command "rtpengine_manage" change SDP accordingly. Now I have a new task. Wake up mobile customers through push notification. This client may be as WebRTC and also regular SIP. Trying to use TSILO module. 
 
# User location service
route[LOCATION] {
    lookup("location"); 
    $var(rc) = $rc;
    if (is_method("INVITE")) 
    {
        if (t_newtran()) 
        {
            route(SEND_PUSH);
            xlog("L_INFO", "tsilo store\n");
            ts_store();
        }
    }
    switch ($var(rc)) 
    {
    case  1:
            xlog("L_INFO", "LOCATION, Subscriber found, RC: $var(rc)\n");
            route(RELAY);
            break; 
        case -1:
            xlog("L_INFO", "LOCATION, Subscriber doesn't found, RC: $var(rc)\n");
            exit;
            break;
    case -3:
        xlog("L_INFO", "LOCATION, Subscriber doesn't found, RC: $var(rc)\n"); 
            send_reply("404", "Not Found");
            exit;
    case -2:
            xlog("L_INFO", "LOCATION, Method Not Allowed, RC: $var(rc)\n");
            send_reply("405", "Method Not Allowed");
            exit;
    }
}
If a call occurs when the called client is registered, then we go to the route(RELAY), which creates a branch in which I change the SDP. Everything works.

route[RELAY] {
    # enable additional event routes for forwarded requests
    # - serial forking, RTP relaying handling, a.s.o.
    if (is_method("INVITE|BYE")) {
        if(!t_is_set("branch_route")) t_on_branch("MANAGE_BRANCH");
    }
    if (!t_relay()) {
        sl_reply_error();
    }
    exit;
}

And already in MANAGE BRANCH the necessary SDP is put.

If the called party is not registered. In the beginning everything goes well.
I find this caller through a separate server. Send push notification. The client successfully registers on kamailio.

# Handle SIP registrations
route[REGISTRAR] {
    if (!is_method("REGISTER")) return;
    if(isflagset(FLT_NATS)) 
    {
    setbflag(FLB_NATB);
    setbflag(FLB_NATSIPPING);
    }
        
    if(isflagset(FLT_SRC_WSS))
    {
        setbflag(FLB_DST_WS); 
    }
    if (!save("location")) 
    {
       sl_reply_error();
    }
    ts_append("location", "$tu")
    exit;
}
Next I better show a piece of the log:
 
окт 31 14:55:08  /usr/sbin/kamailio[17488]: exec: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} *** cfgtrace:request_route=[REGISTRAR] c=[/etc/kamailio/kamailio.cfg] l=429 a=26 n=ts_append
окт 31 14:55:08  /usr/sbin/kamailio[17488]: DEBUG: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} tsilo [ts_append.c:72]: ts_append(): transaction 8800:338205132 found for 1234567890, going to append branches
окт 31 14:55:08  /usr/sbin/kamailio[17488]: DEBUG: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} tm [t_lookup.c:1629]: t_lookup_ident_filter(): transaction found
окт 31 14:55:08  /usr/sbin/kamailio[17488]: DEBUG: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} registrar [lookup.c:255]: lookup_helper(): contact for [1234567890] found by address
окт 31 14:55:08  /usr/sbin/kamailio[17488]: DEBUG: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} registrar [lookup.c:456]: lookup_helper(): instance is
окт 31 14:55:08  /usr/sbin/kamailio[17488]: DEBUG: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} tm [t_append_branches.c:77]: t_append_branches(): transaction 8800:338205132 in status 0
окт 31 14:55:08  /usr/sbin/kamailio[17488]: DEBUG: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} tm [t_append_branches.c:99]: t_append_branches(): Call uefn7rvufi112jj5lt91: 0 (1) outgoing branches
окт 31 14:55:08  /usr/sbin/kamailio[17488]: DEBUG: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} tm [t_append_branches.c:126]: t_append_branches(): Current uri sip:1234567890 at 10.10.10.1:58027;transport=TCP;rinstance=727a64a3a59c508f
окт 31 14:55:08  /usr/sbin/kamailio[17488]: DEBUG: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} <core> [core/msg_translator.c:162]: check_via_address(): (50.7.93.27, uas7i396ceb5.invalid, 0)
окт 31 14:55:08  /usr/sbin/kamailio[17488]: DEBUG: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} tm [t_append_branches.c:149]: t_append_branches(): added branch [sip:1234567890 at 10.10.10.1:58027;transport=TCP;rinstance=727a64a3a59c508f] with ruid [uloc-5dbacb09-4450-7]
окт 31 14:55:08  /usr/sbin/kamailio[17488]: DEBUG: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} tm [t_append_branches.c:163]: t_append_branches(): Call uefn7rvufi112jj5lt91: 0 (0) outgoing branches after clear_branches()
окт 31 14:55:08  /usr/sbin/kamailio[17488]: DEBUG: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} <core> [core/tcp_main.c:2238]: tcpconn_send_put(): send from reader (17488 (21)), reusing fd
окт 31 14:55:08  /usr/sbin/kamailio[17488]: DEBUG: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} <core> [core/tcp_main.c:2473]: tcpconn_do_send(): sending...
окт 31 14:55:08  /usr/sbin/kamailio[17488]: DEBUG: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} <core> [core/tcp_main.c:2507]: tcpconn_do_send(): after real write: c= 0x7fb39dde4c68 n=3131 fd=12
окт 31 14:55:08  /usr/sbin/kamailio[17488]: DEBUG: {1 2 REGISTER cY6rPubTvJ3ZbyxOrrvGHw..} <core> [core/tcp_main.c:2508]: tcpconn_do_send(): buf=
 
Thus, the transaction wakes up and the initial INVITE is sent to the new registered client without any SDP change! Which eventually leads to  415 error. 
Now the question itself. Tell me! As me at this moment intercept this INVITE, to it has passed through in advance prepared path for changing SDP.

Thank you.
 
--
Oleg Podguyko
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-users/attachments/20191031/b827e126/attachment.html>


More information about the sr-users mailing list