Add authentication options to the SIP dialstring.
authorOlle Johansson <oej@edvina.net>
Tue, 22 Jan 2008 15:25:43 +0000 (15:25 +0000)
committerOlle Johansson <oej@edvina.net>
Tue, 22 Jan 2008 15:25:43 +0000 (15:25 +0000)
Documentation follows separately

(issue #11587)
Reported by: sobomax
Patches:
      chan_sip.c-trunk.diff uploaded by sobomax (license 359)

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

channels/chan_sip.c

index d037dd5..d2ab62c 100644 (file)
@@ -18716,6 +18716,9 @@ static struct ast_channel *sip_request_call(const char *type, int format, void *
        char tmp[256];
        char *dest = data;
        char *dnid;
+       char *secret = NULL;
+       char *md5secret = NULL;
+       char *authname = NULL;
        int oldformat = format;
 
        /* mask request with some set of allowed formats.
@@ -18764,6 +18767,17 @@ static struct ast_channel *sip_request_call(const char *type, int format, void *
        if (host) {
                *host++ = '\0';
                ext = tmp;
+               secret = strchr(ext, ':');
+               if (secret) {
+                       *secret++ = '\0';
+                       md5secret = strchr(secret, ':');
+                       if (md5secret) {
+                               *md5secret++ = '\0';
+                               authname = strchr(md5secret, ':');
+                               if (authname)
+                                       *authname++ = '\0';
+                       }
+               }
        } else {
                ext = strchr(tmp, '/');
                if (ext) 
@@ -18798,6 +18812,14 @@ static struct ast_channel *sip_request_call(const char *type, int format, void *
                ast_string_field_set(p, username, ext);
                ast_string_field_set(p, fullcontact, NULL);
        }
+       if (secret && !ast_strlen_zero(secret))
+               ast_string_field_set(p, peersecret, secret);
+
+       if (md5secret && !ast_strlen_zero(md5secret))
+               ast_string_field_set(p, peermd5secret, md5secret);
+
+       if (authname && !ast_strlen_zero(authname))
+               ast_string_field_set(p, authname, authname);
 #if 0
        printf("Setting up to call extension '%s' at '%s'\n", ext ? ext : "<none>", host);
 #endif