[sr-dev] [kamailio/kamailio] Recrod-Route header without socket port for calls to WebRTC clients (#2850)

sergey-safarov notifications at github.com
Sat Sep 11 18:43:43 CEST 2021


### 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 at 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](https://github.com/kamailio/kamailio/files/7148185/kam.log)

### Additional Information

  * **Kamailio Version** - output of `kamailio -v`
used master branch with small customization, base commit  c503d2bd31a580138a67f1d4a265ccde5791d271

* **Operating System**:
aarch64

```
[root at 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 or view it on GitHub:
https://github.com/kamailio/kamailio/issues/2850
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-dev/attachments/20210911/fdc42066/attachment.htm>


More information about the sr-dev mailing list