Module: sip-router
Branch: master
Commit: 74bf08ef30cf18fb609c2c067584f1515ede23da
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=74bf08ef30cf18fb609c2c067584f1515ede23da

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
Date:   Mon May 27 16:54:02 2013 +0200

core: enclose uri in angle brakets for redirect contact header

- safer for uri with parameters and no q
- reported by Dan Bogos

---

 dset.c |   24 ++++++++++++++----------
 1 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/dset.c b/dset.c
index 98be023..52521ce 100644
--- a/dset.c
+++ b/dset.c
@@ -461,9 +461,11 @@ char* print_dset(struct sip_msg* msg, int* len)
 
        if (msg->new_uri.s) {
                cnt = 1;
-               *len = msg->new_uri.len;
+               *len = msg->new_uri.len + 1 /*'<'*/;
                if (ruri_q != Q_UNSPECIFIED) {
-                       *len += 1 + Q_PARAM_LEN + len_q(ruri_q);
+                       *len += Q_PARAM_LEN + len_q(ruri_q);
+               } else {
+                       *len += 1 /*'>'*/;
                }
        } else {
                cnt = 0;
@@ -476,9 +478,11 @@ char* print_dset(struct sip_msg* msg, int* len)
        init_branch_iterator();
        while ((uri.s = next_branch(&uri.len, &q, 0, 0, 0, 0, 0, 0, 0))) {
                cnt++;
-               *len += uri.len;
+               *len += uri.len + 1 /*'<'*/;
                if (q != Q_UNSPECIFIED) {
-                       *len += 1 + Q_PARAM_LEN + len_q(q);
+                       *len += Q_PARAM_LEN + len_q(q);
+               } else {
+                       *len += 1 /*'>'*/;
                }
        }
 
@@ -494,9 +498,7 @@ char* print_dset(struct sip_msg* msg, int* len)
        memcpy(dset, CONTACT, CONTACT_LEN);
        p = dset + CONTACT_LEN;
        if (msg->new_uri.s) {
-               if (ruri_q != Q_UNSPECIFIED) {
-                       *p++ = '<';
-               }
+               *p++ = '<';
 
                memcpy(p, msg->new_uri.s, msg->new_uri.len);
                p += msg->new_uri.len;
@@ -508,6 +510,8 @@ char* print_dset(struct sip_msg* msg, int* len)
                        qbuf = q2str(ruri_q, &qlen);
                        memcpy(p, qbuf, qlen);
                        p += qlen;
+               } else {
+                       *p++ = '>';
                }
                i = 1;
        } else {
@@ -521,9 +525,7 @@ char* print_dset(struct sip_msg* msg, int* len)
                        p += CONTACT_DELIM_LEN;
                }
 
-               if (q != Q_UNSPECIFIED) {
-                       *p++ = '<';
-               }
+               *p++ = '<';
 
                memcpy(p, uri.s, uri.len);
                p += uri.len;
@@ -534,6 +536,8 @@ char* print_dset(struct sip_msg* msg, int* len)
                        qbuf = q2str(q, &qlen);
                        memcpy(p, qbuf, qlen);
                        p += qlen;
+               } else {
+                       *p++ = '>';
                }
                i++;
        }


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to