<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>The loose_route() is marking local Route headers for deletion, so
      after the msg_apply_changes() you don't see them. It should work
      fine if you do not need to inspect them afterwards, but if you are
      not sure, it is recommended do it before.</p>
    <p>Cheers,<br>
      Daniel<br>
    </p>
    <div class="moz-cite-prefix">On 02.06.20 09:49, George
      Diamantopoulos wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAPcKEYOoFKpd1utrJDdeODSRAcfXzc8ZRGQgg-z6voKcDZQ-sA@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">
        <div>Daniel, that worked instantly, thank you!</div>
        <div><br>
        </div>
        <div>Care to elaborate on how msg_apply_changes() interferes
          with loose_route? I also remember msg_apply_changes()
          complaining if called after record_route(), is it related?<br>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Mon, 1 Jun 2020 at 21:24,
          Daniel-Constantin Mierla <<a
            href="mailto:miconda@gmail.com" moz-do-not-send="true">miconda@gmail.com</a>>
          wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px
          0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div>
            <p>Hello,</p>
            <p>use msg_apply_changes just after replace_body_str(),
              eventually before loose routing processing for requests
              within dialog.</p>
            <p>Cheers,<br>
              Daniel<br>
            </p>
            <div>On 01.06.20 13:34, George Diamantopoulos wrote:<br>
            </div>
            <blockquote type="cite">
              <div dir="ltr">
                <div>Hello all,</div>
                <div><br>
                </div>
                <div>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.</div>
                <div><br>
                </div>
                <div>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:</div>
                <div>
                  <ul>
                    <li>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.</li>
                    <li>rtpengine offer/answer/manage is to be called
                      only once per script iteration</li>
                    <li>msg_apply_changes can only be called in a
                      request route, or in the core reply_route (i.e. <b>not</b>
                      in tm-managed on_reply_route[XXX] blocks)</li>
                  </ul>
                  <div>In my case, additionally the following are true:</div>
                  <div>
                    <ul>
                      <li>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:<br>
                      </li>
                      <ul>
                        <li>Early in the WITHINDLG route (of the example
                          config file)</li>
                        <li>After the sanity checks in the reply_route
                          (of the example config file)</li>
                      </ul>
                      <li>msg_apply changes() is called once, for each
                        script iteration:</li>
                      <ul>
                        <li>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)</li>
                        <ul>
                          <li>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.</li>
                        </ul>
                        <li>at the end of the "core" reply_route</li>
                      </ul>
                    </ul>
                    <div>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:</div>
                    <div>
                      <ul>
                        <li>a=fmtp:101 0-16</li>
                      </ul>
                    </div>
                    <div>to something along the lines of:</div>
                    <div>
                      <ul>
                        <li>a=fmtp:101 0-15</li>
                      </ul>
                      <div>For replies, this works as expected.</div>
                      <div><br>
                      </div>
                      <div>For in-dialog requests, however, I end up
                        with both the original and the edited lines:</div>
                      <div style="margin-left:40px"><span
                          style="font-family:monospace">a=fmtp:101 0-16
                          (the original line)<br>
                        </span></div>
                      <div style="margin-left:40px"><span
                          style="font-family:monospace">... other SDP
                          stuff ...<br>
                        </span></div>
                      <div style="margin-left:40px"><span
                          style="font-family:monospace">a=fmtp:101 0-15
                          (the edited line)</span></div>
                      <br>
                    </div>
                    <div>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.</div>
                    <div><br>
                    </div>
                    <div>Thank you in advance and I apologize for the
                      long read.</div>
                    <div><br>
                    </div>
                    <div>Best regards,</div>
                    <div>George Diamantopoulos<br>
                    </div>
                  </div>
                </div>
              </div>
              <br>
              <fieldset></fieldset>
              <pre>_______________________________________________
Kamailio (SER) - Users Mailing List
<a href="mailto:sr-users@lists.kamailio.org" target="_blank" moz-do-not-send="true">sr-users@lists.kamailio.org</a>
<a href="https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users" target="_blank" moz-do-not-send="true">https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users</a>
</pre>
            </blockquote>
            <pre cols="72">-- 
Daniel-Constantin Mierla -- <a href="http://www.asipto.com" target="_blank" moz-do-not-send="true">www.asipto.com</a>
<a href="http://www.twitter.com/miconda" target="_blank" moz-do-not-send="true">www.twitter.com/miconda</a> -- <a href="http://www.linkedin.com/in/miconda" target="_blank" moz-do-not-send="true">www.linkedin.com/in/miconda</a>
Funding: <a href="https://www.paypal.me/dcmierla" target="_blank" moz-do-not-send="true">https://www.paypal.me/dcmierla</a></pre>
          </div>
        </blockquote>
      </div>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
Daniel-Constantin Mierla -- <a class="moz-txt-link-abbreviated" href="http://www.asipto.com">www.asipto.com</a>
<a class="moz-txt-link-abbreviated" href="http://www.twitter.com/miconda">www.twitter.com/miconda</a> -- <a class="moz-txt-link-abbreviated" href="http://www.linkedin.com/in/miconda">www.linkedin.com/in/miconda</a>
Funding: <a class="moz-txt-link-freetext" href="https://www.paypal.me/dcmierla">https://www.paypal.me/dcmierla</a></pre>
  </body>
</html>