]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Prevent outbound SIP NOTIFY packets from displaying a port of 0
authorKinsey Moore <kmoore@digium.com>
Thu, 1 Mar 2012 14:18:49 +0000 (14:18 +0000)
committerKinsey Moore <kmoore@digium.com>
Thu, 1 Mar 2012 14:18:49 +0000 (14:18 +0000)
In the change from 1.6.2 to 1.8, ast_sockaddr was introduced which changed the
behavior of ast_find_ourip such that port number was wiped out.  This caused
the port in internip (which is used for Contact and Call-ID on NOTIFYs) to be
0.  This change causes ast_find_ourip to be port-preserving again.

(closes issue ASTERISK-19430)
........

Merged revisions 357665 from http://svn.asterisk.org/svn/asterisk/branches/1.8

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@357667 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/acl.c

index 6361b71d8a1b730a8e0da565b3281b2bdcd61fab..a309d74024e2fe5ca82b4904831b3ed71eb8f1bd 100644 (file)
@@ -737,6 +737,7 @@ int ast_find_ourip(struct ast_sockaddr *ourip, const struct ast_sockaddr *bindad
 {
        char ourhost[MAXHOSTNAMELEN] = "";
        struct ast_sockaddr root;
+       int res, port = ast_sockaddr_port(ourip);
 
        /* just use the bind address if it is nonzero */
        if (!ast_sockaddr_is_any(bindaddr)) {
@@ -749,6 +750,8 @@ int ast_find_ourip(struct ast_sockaddr *ourip, const struct ast_sockaddr *bindad
                ast_log(LOG_WARNING, "Unable to get hostname\n");
        } else {
                if (resolve_first(ourip, ourhost, PARSE_PORT_FORBID, family) == 0) {
+                       /* reset port since resolve_first wipes this out */
+                       ast_sockaddr_set_port(ourip, port);
                        return 0;
                }
        }
@@ -756,8 +759,12 @@ int ast_find_ourip(struct ast_sockaddr *ourip, const struct ast_sockaddr *bindad
        /* A.ROOT-SERVERS.NET. */
        if (!resolve_first(&root, "A.ROOT-SERVERS.NET", PARSE_PORT_FORBID, 0) &&
            !ast_ouraddrfor(&root, ourip)) {
+               /* reset port since resolve_first wipes this out */
+               ast_sockaddr_set_port(ourip, port);
                return 0;
        }
-       return get_local_address(ourip);
+       res = get_local_address(ourip);
+       ast_sockaddr_set_port(ourip, port);
+       return res;
 }