Description

When call routed to WebRTC client and used record_route(), then Record-Router header does not contain port of socket where WebRTC client connected.
When used tcp_reuse_port = yes, then ACK cannot be delivered to WebRTC client (#2849).

Reproduction

I prepared a minimal config that allows reproduce the issue and attached a log file for the test call.

# use compact IPv6 addresses
ipv6_hex_style = "c"
enable_tls=1
tcp_accept_no_cl=yes

######## Kamailio control connector module ########
loadmodule "ctl.so"
modparam("ctl", "binrpc_buffer_size", 4096)
loadmodule "pv.so"
loadmodule "sl.so"
loadmodule "xlog.so"
loadmodule "tls.so"
loadmodule "nathelper.so"
modparam("tls", "config", "/etc/kamailio/tls.cfg")
loadmodule "xhttp.so"
loadmodule "websocket.so"
loadmodule "ipops.so"
loadmodule "siputils.so"
loadmodule "rr.so"

loadmodule "debugger.so"
modparam("debugger", "cfgtrace", 1)
modparam("debugger", "log_level_name", "exec")
log_stderror=yes


# IPv4 listeners
listen=udp:eth0:5060
listen=tcp:eth0:5060
listen=tls:eth0:5061
listen=tls:eth0:7001

# IPv6 listeners
listen=udp:[2600:1f18:578:5701::7e]:5060
listen=tcp:[2600:1f18:578:5701::7e]:5060
listen=tls:[2600:1f18:578:5701::7e]:5061
listen=tls:[2600:1f18:578:5701::7e]:7001

request_route {
    if (!has_totag()) {
        record_route();
    }

    if (is_ipv4($si)) {
        route(WEBRTC_PBX);
    } else {
        route(PBX_WEBRTC);
    }
}

route[WEBRTC_PBX] {
    set_contact_alias();
    $du = "sip:[2600:1f14:6d8:5409::100]:5080;transport=tcp";
    forward();
    exit;
}

route[PBX_WEBRTC] {
    handle_ruri_alias();
    forward();
    exit;
}

event_route[xhttp:request] {
    if (!($hdr(Upgrade)=~"websocket"
            && $hdr(Connection)=~"Upgrade"
            && $rm=~"GET")) {
        $var(status_code) = 400;
        $var(reason_phrase) = "Bad Request";
        xhttp_reply("$var(status_code)", "$var(reason_phrase)", "text/plain", "$var(reason_phrase)");
        exit;
    }

    if (!ws_handle_handshake()) {
        $var(status_code) = 400;
        $var(reason_phrase) = "Bad Request";
        xhttp_reply("$var(status_code)", "$var(reason_phrase)", "text/plain", "$var(reason_phrase)");
        exit;
    }

    exit;
}

Log Messages

For Call-ID: a8c7450a-131c-11ec-9546-a727fc4b684e

INVITE sips:safarov@df7jal23ls0d.invalid;rtcweb-breaker=no;transport=wss SIP/2.0^M
Record-Route: <sips:3.236.25.254;transport=ws;r2=on;lr;ftag=FNBFNvy0atDeK>^M
Record-Route: <sips:[2600:1f18:578:5701::7e];transport=tcp;r2=on;lr;ftag=FNBFNvy0atDeK>^

Client connected to socket tls:3.236.25.254:7001 but using record_route() generated

Record-Route: <sips:3.236.25.254;transport=ws;r2=on;lr;ftag=FNBFNvy0atDeK>

Full logs at kam.log

Additional Information

[root@tmp kamailio]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications on the go with GitHub Mobile for iOS or Android.