]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 302311 via svnmerge from
authorMatthew Nicholson <mnicholson@digium.com>
Tue, 18 Jan 2011 21:40:03 +0000 (21:40 +0000)
committerMatthew Nicholson <mnicholson@digium.com>
Tue, 18 Jan 2011 21:40:03 +0000 (21:40 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
  r302311 | mnicholson | 2011-01-18 15:35:03 -0600 (Tue, 18 Jan 2011) | 4 lines

  URI encode the user part of the contact header.

  ABE-2705
........

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

channels/chan_sip.c

index c1be361e842454909e3253f2cd73845018e4b1ce..27d6e1c6205ee41580d42524c23bf20e1fd44376 100644 (file)
@@ -10736,19 +10736,21 @@ static void extract_uri(struct sip_pvt *p, struct sip_request *req)
 /*! \brief Build contact header - the contact header we send out */
 static void build_contact(struct sip_pvt *p)
 {
-
+       char tmp[SIPBUFSIZE];
+       char *user = ast_uri_encode(p->exten, tmp, sizeof(tmp), 1);
        int ourport = ntohs(p->ourip.sin_port);
+
        /* only add port if it's non-standard for the transport type */
        if (!sip_standard_port(p->socket.type, ourport)) {
                if (p->socket.type == SIP_TRANSPORT_UDP)
-                       ast_string_field_build(p, our_contact, "<sip:%s%s%s:%d>", p->exten, ast_strlen_zero(p->exten) ? "" : "@", ast_inet_ntoa(p->ourip.sin_addr), ourport);
+                       ast_string_field_build(p, our_contact, "<sip:%s%s%s:%d>", user, ast_strlen_zero(user) ? "" : "@", ast_inet_ntoa(p->ourip.sin_addr), ourport);
                else
-                       ast_string_field_build(p, our_contact, "<sip:%s%s%s:%d;transport=%s>", p->exten, ast_strlen_zero(p->exten) ? "" : "@", ast_inet_ntoa(p->ourip.sin_addr), ourport, get_transport(p->socket.type));
+                       ast_string_field_build(p, our_contact, "<sip:%s%s%s:%d;transport=%s>", user, ast_strlen_zero(user) ? "" : "@", ast_inet_ntoa(p->ourip.sin_addr), ourport, get_transport(p->socket.type));
        } else {
                if (p->socket.type == SIP_TRANSPORT_UDP)
-                       ast_string_field_build(p, our_contact, "<sip:%s%s%s>", p->exten, ast_strlen_zero(p->exten) ? "" : "@", ast_inet_ntoa(p->ourip.sin_addr));
+                       ast_string_field_build(p, our_contact, "<sip:%s%s%s>", user, ast_strlen_zero(user) ? "" : "@", ast_inet_ntoa(p->ourip.sin_addr));
                else
-                       ast_string_field_build(p, our_contact, "<sip:%s%s%s;transport=%s>", p->exten, ast_strlen_zero(p->exten) ? "" : "@", ast_inet_ntoa(p->ourip.sin_addr), get_transport(p->socket.type));
+                       ast_string_field_build(p, our_contact, "<sip:%s%s%s;transport=%s>", user, ast_strlen_zero(user) ? "" : "@", ast_inet_ntoa(p->ourip.sin_addr), get_transport(p->socket.type));
        }
 }