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
