Module: kamailio
Branch: master
Commit: 48317d3180e8ec67d24862ebcbbb80ab887ff5bd
URL:
https://github.com/kamailio/kamailio/commit/48317d3180e8ec67d24862ebcbbb80a…
Author: Richard Fuchs <rfuchs(a)sipwise.com>
Committer: Richard Fuchs <rfuchs(a)sipwise.com>
Date: 2024-06-03T15:49:12-04:00
rtpengine: use extract_body with read_sdp_pv
If the module uses an SDP taken from a pvar, and the current message
uses a multipart content, don't replace the entire message body with the
rewritten SDP, but only the part of the body that is SDP.
closes #3854
---
Modified: src/modules/rtpengine/rtpengine.c
---
Diff:
https://github.com/kamailio/kamailio/commit/48317d3180e8ec67d24862ebcbbb80a…
Patch:
https://github.com/kamailio/kamailio/commit/48317d3180e8ec67d24862ebcbbb80a…
---
diff --git a/src/modules/rtpengine/rtpengine.c b/src/modules/rtpengine/rtpengine.c
index c26f61e2483..775542c5994 100644
--- a/src/modules/rtpengine/rtpengine.c
+++ b/src/modules/rtpengine/rtpengine.c
@@ -4718,28 +4718,13 @@ static int rtpengine_offer_answer(
}
}
if(write_sdp_pvar == NULL || write_sdp_pvar_mode != 0) {
- if(cl_field.len) {
- anchor = del_lump(msg, cl_field.s - msg->buf, cl_field.len, 0);
- cl_repl.s = pkg_malloc(10);
- if(!cl_repl.s) {
- LM_ERR("pkg_malloc for Content-Length failed\n");
- goto error_free;
- }
- cl_repl.len = snprintf(cl_repl.s, 10, "%i", (int)newbody.len);
- if(!insert_new_lump_after(anchor, cl_repl.s, cl_repl.len, 0)) {
- LM_ERR("insert_new_lump_after failed\n");
- goto error_free;
- }
- cl_repl.s = NULL;
- }
-
if(read_sdp_pvar_str.len > 0) {
/* get the body from the message as body ptr may have changed
* when using read_sdp_pv */
- cur_body.len = 0;
- cur_body.s = get_body(msg);
- cur_body.len = msg->buf + msg->len - cur_body.s;
-
+ if(extract_body(msg, &cur_body, &cl_field) == -1) {
+ LM_ERR("failed to extract body from message");
+ goto error_free;
+ }
anchor = del_lump(msg, cur_body.s - msg->buf, cur_body.len, 0);
} else {
anchor = del_lump(msg, body.s - msg->buf, body.len, 0);
@@ -4752,6 +4737,21 @@ static int rtpengine_offer_answer(
LM_ERR("insert_new_lump_after failed\n");
goto error_free;
}
+
+ if(cl_field.len) {
+ anchor = del_lump(msg, cl_field.s - msg->buf, cl_field.len, 0);
+ cl_repl.s = pkg_malloc(10);
+ if(!cl_repl.s) {
+ LM_ERR("pkg_malloc for Content-Length failed\n");
+ goto error_free;
+ }
+ cl_repl.len = snprintf(cl_repl.s, 10, "%i", (int)newbody.len);
+ if(!insert_new_lump_after(anchor, cl_repl.s, cl_repl.len, 0)) {
+ LM_ERR("insert_new_lump_after failed\n");
+ goto error_free;
+ }
+ cl_repl.s = NULL;
+ }
}
}