SIP transport type issues
authorDavid Vossel <dvossel@digium.com>
Tue, 16 Jun 2009 16:03:30 +0000 (16:03 +0000)
committerDavid Vossel <dvossel@digium.com>
Tue, 16 Jun 2009 16:03:30 +0000 (16:03 +0000)
commitee8cdd555ff058a3ed955a6bbbf0ced01d1694e3
tree70960b85a8105c1fa53f332b940a038a5e19ede9
parent4271603247eaa57b0a511e8c5ed2696d69ed83f0
SIP transport type issues

What this patch addresses:
1. ast_sip_ouraddrfor() by default binds to the UDP address/port
reguardless if the sip->pvt is of type UDP or not.  Now when no
remapping is required, ast_sip_ouraddrfor() checks the sip_pvt's
transport type, attempting to set the address and port to the
correct TCP/TLS bindings if necessary.
2.  It is not necessary to send the port number in the Contact
header unless the port is non-standard for the transport type.
This patch fixes this and removes the todo note.
3.  In sip_alloc(), the default dialog built always uses transport
type UDP.  Now sip_alloc() looks at the sip_request (if present)
and determines what transport type to use by default.
4.  When changing the transport type of a sip_socket, the file
descriptor must be set to -1 and in some cases the tcptls_session's
ref count must be decremented and set to NULL.  I've encountered
several issues associated with this process and have created a function,
set_socket_transport(), to handle the setting of the socket type.

(closes issue #13865)
Reported by: st
Patches:
      dont_add_port_if_tls.patch uploaded by Kristijan (license 753)
      13865.patch uploaded by mmichelson (license 60)
      tls_port_v5.patch uploaded by vrban (license 756)
      transport_issues.diff uploaded by dvossel (license 671)
Tested by: mmichelson, Kristijan, vrban, jmacz, dvossel

Review: https://reviewboard.asterisk.org/r/278/

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@200946 65c4cc65-6c06-0410-ace0-fbb531ad65f3
channels/chan_sip.c