parsing extension correctly from sip register lines
authorDavid Vossel <dvossel@digium.com>
Thu, 18 Jun 2009 15:16:05 +0000 (15:16 +0000)
committerDavid Vossel <dvossel@digium.com>
Thu, 18 Jun 2009 15:16:05 +0000 (15:16 +0000)
If a transport type was specified, but no extension, parsing of the extension would return whatever was after the transport rather than defaulting to 's'.

(closes issue #15111)
Reported by: ffs
Patches:
      chan_sip.c_register-parser.patch uploaded by ffs (license 730)
Tested by: ffs, dvossel

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

channels/chan_sip.c

index 8caaebf..ec3616a 100644 (file)
@@ -7294,19 +7294,20 @@ static int sip_register(const char *value, int lineno)
        enum sip_transport transport = SIP_TRANSPORT_UDP;
        char buf[256] = "";
        char *username = NULL;
-       char *hostname=NULL, *secret=NULL, *authuser=NULL, *expire=NULL;
+       char *hostname=NULL, *secret=NULL, *authuser=NULL, *expire=NULL, *buf2=NULL;
        char *callback=NULL;
 
        if (!value)
                return -1;
 
        ast_copy_string(buf, value, sizeof(buf));
+       buf2 = strrchr(buf, '@');
 
-       /* split [/contact][~expiry] */
-       expire = strchr(buf, '~');
+       /* split [/extension][~expiry] */
+       expire = strchr(buf2, '~');
        if (expire)
                *expire++ = '\0';
-       callback = strrchr(buf, '/');
+       callback = strrchr(buf2, '/');
        if (callback)
                *callback++ = '\0';
        if (ast_strlen_zero(callback))