Enhance NAT support as discussed on the -dev list, i.e.:
authorLuigi Rizzo <rizzo@icir.org>
Sat, 21 Jul 2007 01:01:10 +0000 (01:01 +0000)
committerLuigi Rizzo <rizzo@icir.org>
Sat, 21 Jul 2007 01:01:10 +0000 (01:01 +0000)
commit2286afa3af24df512de10cace46eaa72bcf5ac3d
tree2ec169e930ea3829e114f67fdd65ab2d05e45917
parent5c6d509591b8a5fceed4fa3a85d4ebf4d308b622
Enhance NAT support as discussed on the -dev list, i.e.:

+ extensive documentation changes both in sip.conf.sample and in the source;

+ allow "externip" and "externhost" to include a port number as well;

+ allow "bindaddr" to have a port number (making bindport unnecessary,
  even though it is still present for backward compatibility);

+ introduce the new "stunaddr" parameter to specify an STUN server to
  be used from the main SIP socket;

+ extend the "sip show settings" output to show all the above.

Internally:

+ change related data structures from struct in_addr to struct sockaddr_in
  to store the port numbers as well;

+ reorganize ast_sip_ouraddrfor() (should also be renamed to sip_ouraddrfor()
  because it is not a generic API, though it might become so if called with
  a socket as an additional argument, in which case it can be moved elsewhere).

As mentioned in the documentation, media sessions still do not use STUN so the
port numbers may still be incorrect when Asterisk is behind a NAT

On passing, some of the debugging messages printing media addresses are
probably using the wrong values, but this will be checked/fixed in a
subsequent commit if needed.

Part of the following chunk in the function that handles a "sip reload" is
probably needed on previous versions as well, to avoid leaking the memory
used for the "localaddr" list:

@@ -17244,13 +17274,17 @@

        /* Reset IP addresses  */
        memset(&bindaddr, 0, sizeof(bindaddr));
+       memset(&stunaddr, 0, sizeof(stunaddr));
+       memset(&internip, 0, sizeof(internip));
+       /* Free memory for local network address mask */
+ --->  ast_free_ha(localaddr); <-----
        memset(&localaddr, 0, sizeof(localaddr));
        memset(&externip, 0, sizeof(externip));
        memset(&default_prefs, 0 , sizeof(default_prefs));

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