[SR-Users] WebRTC ACK Protocol [solved]

SamyGo govoiper at gmail.com
Wed Jan 8 05:48:17 CET 2020


Hi,
Just a suggestion to put the contact alias function under the
"is_first_hop()" condition. That'll help you in case multiple Kamailios are
in the call path.

if(is_first_hop()){
   add_contact_alias();
}

Regards,
Sammy


On Thu, Apr 4, 2019 at 6:07 AM Ilie Soltanici <iliusha.md at gmail.com> wrote:

> Adding Contact alias in 200 OK, fixed the issue:
>
> if (nat_uac_test(64)) {
> add_contact_alias();
> }
>
> Thank You.
>
> În mie., 3 apr. 2019 la 23:58, Ilie Soltanici <iliusha.md at gmail.com> a
> scris:
>
>> Hello,
>>
>> Config is more or less like the standard one:
>>
>> route[WITHINDLG] {
>>   if (!has_totag()) return;
>> if (loose_route()) {
>>     route(RURIALIAS);
>>     if ( is_method("ACK") ) {
>>       xlogl("L_INFO", "[$cfg(route)] ACK is forwarded statelessy\n");
>>       route(NATMANAGE);
>>     } else if (is_method("NOTIFY") ) {
>> # Add Record-Route for in-dialog NOTIFY as per RFC 6665.
>> route(RECORD_ROUTE);
>> }
>>     xlogl("L_INFO", "[$cfg(route)] In Dialog loose_route, Relaying\n");
>> route(RELAY);
>>       exit;
>>     };
>>
>>     if (is_method("SUBSCRIBE") && uri == myself) {
>>       xlogl("L_INFO", "[$cfg(route)] in-dialog subscribe requests,
>> Checking Dialog.\n");
>>       route(PRESENCE);
>>       exit;
>>     }
>>
>>     if ( is_method("ACK") ) {
>>       if ( t_check_trans() ) {
>>         xlogl("L_INFO", "[$cfg(route)] ACK in transaction. Relaying\n");
>>         route(RELAY);
>>         exit;
>>         } else {
>>           xlogl("L_WARN", "[$cfg(route)] ACK without matching transaction
>> ... ignore and discard\n");
>>           sl_send_reply("606", "Not Acceptable");
>>           exit;
>>         }
>>       }
>>
>>       xlogl("L_WARN", "[$cfg(route)] Unknown Dialog\n");
>>       sl_send_reply("404","Not Found");
>>       exit;
>> }
>>
>> route[RURIALIAS] {
>>     if(isdsturiset() || ($du != "")) {
>>         xlogl("L_INFO", "[$cfg(route)]: Destination URI is set, no
>> un-aliasing is needed\n");
>>         return;
>>     }
>>
>>     xlogl("L_INFO", "[$cfg(route)] --Start Route--\n");
>>     xlogl("L_INFO", "[$cfg(route)]: Route using R-URI, any alias on R-URI
>> ('$ru')?\n");
>>
>>     handle_ruri_alias();
>>     switch ($rc) {
>>     case -1:
>>         xlogl("L_WARN", "[$cfg(route)]: Failed to handle alias of R-URI
>> $ru\n");
>>         send_reply("400","Bad Request");
>>         exit;
>>     case 1:
>>         xlogl("L_INFO", "[$cfg(route)]: Alias parsed, routing $rm from
>> $fu to $du\n");
>>         break;
>>     case 2:
>>         xlogl("L_INFO", "[$cfg(route)]: Alias not found, routing $rm from
>> $fu to $ru\n");
>>         break;
>>     };
>>
>>     return;
>> }
>>
>> route[NATMANAGE] {
>> if(has_body("application/sdp")) {
>>       route(RTPMANAGE);
>>     }
>>
>>     # Set FLB_NATB? Only in within-dialog request with nat=yes on Route
>> header initiated by AS
>>     if (is_request() && has_totag() && check_route_param("nat=yes") &&
>> isflagset(FLS_FROM_ASTERISK)) {
>>        setbflag(FLB_NATB);
>>     }
>>
>>     # Return unless FLT_NATS or FLB_NATB are set
>>     if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB))) {
>>         xlogl("L_INFO", "[$cfg(route)] No endpoint is behind NAT,
>> return\n");
>>         if(nat_uac_test("1")) {
>>           xlogl("L_INFO", "[$cfg(route)] Contact is behind NAT,
>> Fixing\n");
>>           fix_nated_contact();
>>         }
>>         return;
>>     } else {
>>         xlogl("L_INFO", "[$cfg(route)] One or both endpoints are behind
>> NAT, continue!\n");
>>     }
>>
>>     # Add nat=yes in record-route? Only in initial requests when called
>> from branch_route
>>     if (is_request() && !has_totag() && t_is_branch_route()) {
>>         xlogl("L_INFO", "[$cfg(route)] Add nat=yes to record-route
>> (reason: initial request called from branch route)\n");
>>         add_rr_param(";nat=yes");
>>     }
>>
>>   if (is_reply()) {
>>       if(isbflagset(FLB_NATB)) {
>>       fix_nated_contact();
>>       }
>>     }
>> }
>>
>> route[RELAY] {
>> route(SETUP_BY_TRANSPORT);
>>
>> if (is_method("INVITE|BYE|SUBSCRIBE|UPDATE")) {
>> if(!t_is_set("branch_route")) t_on_branch("MANAGE_BRANCH");
>> }
>> if (is_method("INVITE|SUBSCRIBE|UPDATE")) {
>> if(!t_is_set("onreply_route")) t_on_reply("MANAGE_REPLY");
>> }
>> if (is_method("INVITE")) {
>> if(!t_is_set("failure_route")) t_on_failure("MANAGE_FAILURE");
>> }
>>
>> if (!t_relay()) {
>> sl_reply_error();
>> }
>> exit;
>> }
>>
>> }
>>
>> route[SETUP_BY_TRANSPORT] {
>>
>>  if ($ru =~ "transport=ws") {
>>   xlogl("L_INFO","[$cfg(route)] Request going to WS");
>> if(sdp_with_transport("RTP/SAVPF")) {
>>           xlogl("L_INFO","[$cfg(route)] Request going from WS to WS");
>>           rtpengine_manage("force trust-address replace-origin
>> replace-session-connection ICE=force");
>>           t_on_reply("REPLY_WS_TO_WS");
>>           return;
>>         }
>>   xlogl("L_INFO","[$cfg(route)] Request going to WS from AS");
>> rtpengine_manage("rtcp-mux-offer generate-mid DTLS=passive SDES-off
>> ICE=force RTP/SAVPF");
>>   force_send_socket(tls:MY_EXTERNAL_IP_ADDR:10443);
>> t_on_reply("REPLY_FROM_WS");
>> }
>> else if ($proto =~ "ws") {
>> xlog("L_INFO", "Request coming from WS");
>> rtpengine_manage("rtcp-mux-demux DTLS=off SDES-off ICE=remove RTP/AVP");
>> t_on_reply("REPLY_TO_WS");
>> }
>> else {
>> xlog("L_INFO", "This is a classic phone call");
>> rtpengine_manage("replace-origin replace-session-connection");
>> t_on_reply("MANAGE_CLASSIC_REPLY");
>> }
>> }
>>
>> onreply_route[REPLY_TO_WS] {
>>
>> xlog("L_INFO", "Reply from softphone: $rs");
>>
>> if (t_check_status("183")) {
>> change_reply_status("180", "Ringing");
>> remove_body();
>> exit;
>> }
>>
>> if(!(status=~"[12][0-9][0-9]"))
>> return;
>>
>> # rtpengine_manage("froc+SP");
>> xlogl("L_INFO","Fixing ICE/SAVPF Parameters");
>> rtpengine_manage("rtcp-mux-offer generate-mid DTLS=passive SDES-off
>> ICE=force RTP/SAVPF");
>>
>> }
>>
>> onreply_route[REPLY_FROM_WS] {
>>
>> xlog("L_INFO", "Reply from webrtc client: $rs");
>>
>> if(status=~"[12][0-9][0-9]") {
>> rtpengine_manage("force trust-address replace-origin
>> replace-session-connection ICE=remove RTP/AVP");
>> # rtpengine_manage("froc-sp");
>> route(NATMANAGE);
>> }
>> }
>>
>> onreply_route[MANAGE_CLASSIC_REPLY] {
>> xlog("L_INFO", "Boring reply from softphone: $rs");
>>
>> if(status=~"[12][0-9][0-9]") {
>> rtpengine_manage("replace-origin replace-session-connection");
>> # rtpengine_manage("co");
>> route(NATMANAGE);
>> }
>> }
>>
>> onreply_route[REPLY_WS_TO_WS] {
>>         xlog("L_INFO", "WS to WS");
>>         if(status=~"[12][0-9][0-9]") {
>>         rtpengine_manage("force trust-address replace-origin
>> replace-session-connection ICE=force");
>>                 route(NATMANAGE);
>>         }
>> }
>>
>> Thank you.
>>
> _______________________________________________
> Kamailio (SER) - Users Mailing List
> sr-users at lists.kamailio.org
> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-users/attachments/20200107/a343b654/attachment.html>


More information about the sr-users mailing list