Add support for exposing the received contact URI and also for setting the request...
authorJoshua Colp <jcolp@digium.com>
Mon, 9 Jul 2012 19:51:37 +0000 (19:51 +0000)
committerJoshua Colp <jcolp@digium.com>
Mon, 9 Jul 2012 19:51:37 +0000 (19:51 +0000)
(closes issue AST-911)

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

channels/chan_sip.c

index 8f44194..3243289 100644 (file)
@@ -17347,6 +17347,7 @@ static void receive_message(struct sip_pvt *p, struct sip_request *req, struct a
        char *from;
        char *to;
        char from_name[50];
        char *from;
        char *to;
        char from_name[50];
+       char stripped[SIPBUFSIZE];
 
        if (strncmp(content_type, "text/plain", strlen("text/plain"))) { /* No text/plain attachment */
                transmit_response(p, "415 Unsupported Media Type", req); /* Good enough, or? */
 
        if (strncmp(content_type, "text/plain", strlen("text/plain"))) { /* No text/plain attachment */
                transmit_response(p, "415 Unsupported Media Type", req); /* Good enough, or? */
@@ -17500,6 +17501,9 @@ static void receive_message(struct sip_pvt *p, struct sip_request *req, struct a
                res |= ast_msg_set_var(msg, "SIP_PEERNAME", p->peername);
        }
 
                res |= ast_msg_set_var(msg, "SIP_PEERNAME", p->peername);
        }
 
+       ast_copy_string(stripped, sip_get_header(req, "Contact"), sizeof(stripped));
+       res |= ast_msg_set_var(msg, "SIP_FULLCONTACT", get_in_brackets(stripped));
+
        res |= ast_msg_set_exten(msg, "%s", p->exten);
        res |= set_message_vars_from_req(msg, req);
 
        res |= ast_msg_set_exten(msg, "%s", p->exten);
        res |= set_message_vars_from_req(msg, req);
 
@@ -25468,6 +25472,7 @@ static int block_msg_header(const char *header_name)
                "CSeq",
                "Allow",
                "Content-Length",
                "CSeq",
                "Allow",
                "Content-Length",
+               "Request-URI",
        };
 
        for (idx = 0; idx < ARRAY_LEN(hdr); ++idx) {
        };
 
        for (idx = 0; idx < ARRAY_LEN(hdr); ++idx) {
@@ -25495,6 +25500,17 @@ static int sip_msg_send(const struct ast_msg *msg, const char *to, const char *f
                return -1;
        }
 
                return -1;
        }
 
+        for (iter = ast_msg_var_iterator_init(msg);
+            ast_msg_var_iterator_next(msg, iter, &var, &val);
+            ast_msg_var_unref_current(iter)) {
+               if (!strcasecmp(var, "Request-URI")) {
+                       ast_string_field_set(pvt, fullcontact, val);
+                       ast_msg_var_unref_current(iter);
+                       break;
+               }
+       }
+       ast_msg_var_iterator_destroy(iter);
+
        to_uri = ast_strdupa(to);
        to_uri = get_in_brackets(to_uri);
        parse_uri(to_uri, "sip:,sips:", &to_user, NULL, &to_host, NULL);
        to_uri = ast_strdupa(to);
        to_uri = get_in_brackets(to_uri);
        parse_uri(to_uri, "sip:,sips:", &to_user, NULL, &to_host, NULL);