Asterisk - The Open Source Telephony Project
18.5.0
|
Fix TCP/TLS handling in dialplan, SRV records, transfers and much more
Save TCP/TLS sessions in registry If someone registers a SIPS uri, this forces us to set up a TLS connection back.
Add TCP/TLS information to function SIPPEER and CHANNEL function
If tcpenable=yes, we must open a TCP socket on the same address as the IP for UDP. The tcpbindaddr config option should only be used to open ADDITIONAL ports So we should propably go back to bindaddr= the default address to bind to. If tcpenable=yes, then bind this to both udp and TCP if tlsenable=yes, open TLS port (provided we also have cert) tcpbindaddr = extra address for additional TCP connections tlsbindaddr = extra address for additional TCP/TLS connections udpbindaddr = extra address for additional UDP connections These three options should take multiple IP/port pairs Note: Since opening additional listen sockets is a new feature we do not have today the XXXbindaddr options needs to be disabled until we have support for it
We need to test TCP sessions with SIP proxies and in regards to the SIP outbound specs.
;transport=tls was deprecated in RFC3261 and should not be used at all. See section 26.2.2.
Since we have had multidomain support in Asterisk for quite a while, we need to support multiple domains in our TLS implementation, meaning one socket and one cert per domain
Selection of transport for a request needs to be done after we've parsed all route headers, also considering outbound proxy options. First request: Outboundproxy, routes, (reg contact or URI. If URI doesn't have port: DNS naptr, srv, AAA) Intermediate requests: Outboundproxy(only when forced), routes, contact/uri DNS naptr support is crucial. A SIP uri might lead to a TLS connection. Also note that due to outbound proxy settings, a SIPS uri might have to be sent on UDP (not to recommend though)
Default transports are set to UDP, which cause the wrong behaviour when contacting remote devices directly from the dialplan. UDP is only a fallback if no other method works, in order to be compatible with RFC2543 (SIP/1.0) devices. For transactions that exceed the MTU (like INIVTE with video, audio and RTT) TCP should be preferred.
When dialling unconfigured peers (with no port number) or devices in external domains NAPTR records MUST be consulted to find configured transport. If they are not found, SRV records for both TCP and UDP should be checked. If there's a record for TCP, use that. If there's no record for TCP, then use UDP as a last resort. If there's no SRV records,