Module: kamailio
Branch: 5.3
Commit: 8079c537fa34be1ca075617d2b79143cd932e719
URL: 
https://github.com/kamailio/kamailio/commit/8079c537fa34be1ca075617d2b79143cd932e719

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
Date: 2020-09-07T20:35:28+02:00

uac: restore first display name then uri with dialog callback

- same as for rr callback, otherwise the new header can be malformed:
the case of initial INVITE with From URI having no angle brackets and goes
out with display name and angle brackets, the ACK for 200ok results with
>From broken when forwarded
- backport of commit efa6c6a9bf13c430d5be5146168d1ded4c39dba7 (master)
- backport of commit 1a49cc015609c8701057d5a9cf50f68db61870c1 (5.4)

---

Modified: src/modules/uac/replace.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/8079c537fa34be1ca075617d2b79143cd932e719.diff
Patch: 
https://github.com/kamailio/kamailio/commit/8079c537fa34be1ca075617d2b79143cd932e719.patch

---

diff --git a/src/modules/uac/replace.c b/src/modules/uac/replace.c
index 8da8fc7441..ebde602595 100644
--- a/src/modules/uac/replace.c
+++ b/src/modules/uac/replace.c
@@ -936,26 +936,6 @@ static void replace_callback(struct dlg_cell *dlg, int 
type,
                        old_uri.len, old_uri.s, new_display->len, 
new_display->s,
                        new_uri->len, new_uri->s);
 
-       /* duplicate the decoded value */
-       p = pkg_malloc( new_uri->len);
-       if (!p) {
-               LM_ERR("no more pkg mem\n");
-               return;
-       }
-       memcpy( p, new_uri->s, new_uri->len);
-
-       /* build del/add lumps */
-       l = del_lump( msg, old_uri.s-msg->buf, old_uri.len, 0);
-       if (l==0) {
-               LM_ERR("del lump failed\n");
-               goto free;
-       }
-
-       if (insert_new_lump_after( l, p, new_uri->len, 0)==0) {
-               LM_ERR("insert new lump failed\n");
-               goto free;
-       }
-
        /* deal with display name */
        l = 0;
        /* first remove the existing display */
@@ -966,8 +946,8 @@ static void replace_callback(struct dlg_cell *dlg, int type,
                l = del_lump(msg, body->display.s-msg->buf, body->display.len, 
0);
                if (l==0) {
                        LM_ERR("display del lump failed\n");
-                       goto free;
-                       }
+                       return;
+               }
        }
        if (new_display->s && new_display->len > 0) {
                LM_DBG("inserting display [%.*s]\n",
@@ -976,20 +956,40 @@ static void replace_callback(struct dlg_cell *dlg, int 
type,
                buf.s = pkg_malloc(new_display->len + 2);
                if (buf.s==0) {
                        LM_ERR("no more pkg mem\n");
-                       goto free;
+                       return;
                }
                memcpy( buf.s, new_display->s, new_display->len);
                buf.len = new_display->len;
                if (l==0 && (l=get_display_anchor(msg, hdr, body, &buf)) == 0) {
                        LM_ERR("failed to insert anchor\n");
-                       goto free2;
+                       goto free1;
                }
                if (insert_new_lump_after(l, buf.s, buf.len, 0) == 0) {
                        LM_ERR("insert new display lump failed\n");
-                       goto free2;
+                       goto free1;
                }
        }
 
+       /* uri - duplicate the decoded value */
+       p = pkg_malloc( new_uri->len);
+       if (!p) {
+               LM_ERR("no more pkg mem\n");
+               return;
+       }
+       memcpy( p, new_uri->s, new_uri->len);
+
+       /* build del/add lumps */
+       l = del_lump( msg, old_uri.s-msg->buf, old_uri.len, 0);
+       if (l==0) {
+               LM_ERR("del lump failed\n");
+               goto free2;
+       }
+
+       if (insert_new_lump_after( l, p, new_uri->len, 0)==0) {
+               LM_ERR("insert new lump failed\n");
+               goto free2;
+       }
+
        /* register tm callback to change replies,
         * but only if not registered earlier */
        if (!(msg->msg_flags & (FL_USE_UAC_FROM|FL_USE_UAC_TO)) &&
@@ -1003,10 +1003,10 @@ static void replace_callback(struct dlg_cell *dlg, int 
type,
        return;
 
 free2:
-       pkg_free(buf.s);
-
-free:
        pkg_free(p);
+
+free1:
+       pkg_free(buf.s);
 }
 
 


_______________________________________________
Kamailio (SER) - Development Mailing List
[email protected]
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to