Merged revisions 302314 via svnmerge from
authorMatthew Nicholson <mnicholson@digium.com>
Tue, 18 Jan 2011 21:44:49 +0000 (21:44 +0000)
committerMatthew Nicholson <mnicholson@digium.com>
Tue, 18 Jan 2011 21:44:49 +0000 (21:44 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.8

................
  r302314 | mnicholson | 2011-01-18 15:43:21 -0600 (Tue, 18 Jan 2011) | 18 lines

  Merged revisions 302313 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.6.2

  ................
    r302313 | mnicholson | 2011-01-18 15:40:03 -0600 (Tue, 18 Jan 2011) | 11 lines

    Merged revisions 302311 via svnmerge from
    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/trunk@302315 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 749f7a2..67c02af 100644 (file)
@@ -11218,12 +11218,15 @@ 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);
+
        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_sockaddr_stringify(&p->ourip));
+               ast_string_field_build(p, our_contact, "<sip:%s%s%s>", user,
+                       ast_strlen_zero(user) ? "" : "@", ast_sockaddr_stringify(&p->ourip));
        } else {
-               ast_string_field_build(p, our_contact, "<sip:%s%s%s;transport=%s>", p->exten,
-                       ast_strlen_zero(p->exten) ? "" : "@", ast_sockaddr_stringify(&p->ourip),
+               ast_string_field_build(p, our_contact, "<sip:%s%s%s;transport=%s>", user,
+                       ast_strlen_zero(user) ? "" : "@", ast_sockaddr_stringify(&p->ourip),
                        get_transport(p->socket.type));
        }
 }