Hello,
use msg_apply_changes just after replace_body_str(), eventually before
loose routing processing for requests within dialog.
Cheers,
Daniel
On 01.06.20 13:34, George Diamantopoulos wrote:
Hello all,
I'm facing one of those cases where I need to edit the body of a SIP
message, which is then to be fed to rtpengine for processing. Although
I've taken every precaution I've read about on this list and
elsewhere, I can't prevent the edited line from appearing twice in the
outgoing message.
The configuration file used is huge, so I'm going to try to provide a
high-level overview here. But first, the things (I think) I know to be
requirements, and which I have striven to meet:
* If SDP is to be edited, then all such processing is to be carried
out in such a way in the script, so that msg_apply_changes() is
run as many times as needed before rtpengine offer/answer/manage
is called.
* rtpengine offer/answer/manage is to be called only once per script
iteration
* msg_apply_changes can only be called in a request route, or in the
core reply_route (i.e. *not* in tm-managed on_reply_route[XXX] blocks)
In my case, additionally the following are true:
* SDP processing (other than the one performed by rtpengine) takes
place in one common route for all cases where it needs to happen.
These are two at the moment in my scenario:
o Early in the WITHINDLG route (of the example config file)
o After the sanity checks in the reply_route (of the example
config file)
* msg_apply changes() is called once, for each script iteration:
o right before rtpengine_manage() is called, provided that
t_is_request_route() returns true (so that I don't
accidentally call it from a branch route or anything)
+ rtpengine_manage() is called in its own route, which is
very similar to the example config file's "NATMANAGE"
route. Since NATMANAGE is called in all branch and
on_reply_routes, I employ t_is_request_route() here to
make sure it won't execute in those cases.
o at the end of the "core" reply_route
Now regarding the actual config-file-controlled SDP manipulation, it
only consists of a single call to replace_body_str(). The purpose is
to edit a line in the message body from something like:
* a=fmtp:101 0-16
to something along the lines of:
* a=fmtp:101 0-15
For replies, this works as expected.
For in-dialog requests, however, I end up with both the original and
the edited lines:
a=fmtp:101 0-16 (the original line)
... other SDP stuff ...
a=fmtp:101 0-15 (the edited line)
If anyone could point out any misconceptions I have about
msg_apply_changes, SDP rewriting from the script and rtp_engine_X()
interoperability, I would be more than grateful.
Thank you in advance and I apologize for the long read.
Best regards,
George Diamantopoulos
_______________________________________________
Kamailio (SER) - Users Mailing List
sr-users(a)lists.kamailio.org
https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users