]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Handle ipv6 addresses in the sent-by Via: field.
authorMatthew Nicholson <mnicholson@digium.com>
Thu, 12 May 2011 23:35:51 +0000 (23:35 +0000)
committerMatthew Nicholson <mnicholson@digium.com>
Thu, 12 May 2011 23:35:51 +0000 (23:35 +0000)
This change fixes a regression in via header parsing and ipv6 handling.

(closes issue #18951)

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

channels/sip/reqresp_parser.c

index fad9fc52aa9c2f361b65427091fb7bd1df9c43d7..60dcfba55422fd38410c1424097247cb921a86e9 100644 (file)
@@ -2302,8 +2302,9 @@ struct sip_via *parse_via(const char *header)
        }
        v->sent_by = ast_skip_blanks(v->sent_by);
 
-       /* store the port */
-       if ((parm = strchr(v->sent_by, ':'))) {
+       /* store the port, we have to handle ipv6 addresses containing ':'
+        * characters gracefully */
+       if (((parm = strchr(v->sent_by, ']')) && *(++parm) == ':') || (parm = strchr(v->sent_by, ':'))) {
                char *endptr;
 
                v->port = strtol(++parm, &endptr, 10);
@@ -2389,6 +2390,13 @@ AST_TEST_DEFINE(parse_via_test)
                .expected_maddr = "224.0.0.1",
                .expected_ttl = 1,
        };
+       struct testdata t7 = {
+               .in = "SIP/2.0/UDP [::1]:5060",
+               .expected_protocol = "SIP/2.0/UDP",
+               .expected_sent_by = "[::1]:5060",
+               .expected_port = 5060,
+               .expected_branch = "",
+       };
        switch (cmd) {
        case TEST_INIT:
                info->name = "parse_via_test";
@@ -2408,6 +2416,7 @@ AST_TEST_DEFINE(parse_via_test)
        AST_LIST_INSERT_TAIL(&testdatalist, &t4, list);
        AST_LIST_INSERT_TAIL(&testdatalist, &t5, list);
        AST_LIST_INSERT_TAIL(&testdatalist, &t6, list);
+       AST_LIST_INSERT_TAIL(&testdatalist, &t7, list);
 
 
        AST_LIST_TRAVERSE(&testdatalist, testdataptr, list) {