Hi,
I have a server listening on a single tls-socket:
-------------------------------------------------------------------------- Bug in Record-Route??? --------------------------------------------------------------------------
listen=tls:47.11.23.42:443
I use this socket for both Websocket and SIP-TLS. Kamailio basically does a WebSockets to SIP-TLS translation. For simplicity reasons, I use only one TLS socket for both TLS and WebSockets.
If I simply do the following in my routing-script:
record_route(); $du = "sip:server;transport=tls";
it will simply add a single Record-Route header, e.g.:
Record-Route: sip:47.11.23.42:443;transport=ws
It will only add this single Record-Route header, despite the fact, that it's actually translating between WebSocket and SIP-TLS. The expected behaviour would be:
Record-Route: sip:47.11.23.42:443;transport=ws Record-Route: sip:47.11.23.42:443;transport=tls
The problem is, that the upstream Proxy (a loadbalancer) only speaks SIP-TLS and UDP (for Interconnecting) and not WebSockets. As a result, in-Dialog-Requests fail, as the Loadbalancer cannot reach the next hop using "transport=ws".
In the code, I did see, that COND_IF_DIFF_REALMS actually should also check the protocol, so I'm not sure, why this is not happening.
-------------------------------------------------------------------------- Undocumented Feature / Workaround -------------------------------------------------------------------------- Looking at the code of RR, I've found that I can actually set "enable_double_rr" to 2, which will ALWAYS add a second Record-Route header. Apart from the fact, that I don't need the second record-route header always, it solves my problem.
At least the latter I will add to the docs, but however I haven't found any time to look any deeper into the Bug.
Thanks, Carsten