Module: kamailio
Branch: 5.3
Commit: 8079c537fa34be1ca075617d2b79143cd932e719
URL:
https://github.com/kamailio/kamailio/commit/8079c537fa34be1ca075617d2b79143…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
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/8079c537fa34be1ca075617d2b79143…
Patch:
https://github.com/kamailio/kamailio/commit/8079c537fa34be1ca075617d2b79143…
---
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);
}