<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>It's about ISUP signalling. In my request route I'm doing quite a
      bit of manual bit mappings for some ISUP parameters (for example
      "Generic number"). This really bloated my script, so I moved those
      parts to a ADD_ISUP route. The onreply reply is not so bad, I do
      not need to do bit mappings, but still wanted to adhere to this
      style.</p>
    <p>In this case the peer needs to receive a 183 with diversion
      information in the ISUP body instead of a 181, thus
      change_reply_status must be used.</p>
    <p><br>
    </p>
    <p>Best Regards,</p>
    <p>Malte</p>
    <br>
    <div class="moz-cite-prefix">On 13/04/2026 15:38, Richard Robson
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:1b0e42ea-9986-4d2c-8107-1b64301fa08a@rikrobson.co.uk">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <p>If you just want the reply_route to read more easily for
        collegues, then just make sure its documented and you have
        comments where appropriate.<br>
        Personally I think jumping to a route block form a reply block
        is going to be more confusing then having a flowing script
        inside a single onpely_route.<br>
        <br>
        is the use case requiring the UAC to receive a 181 instead of a
        180?</p>
      <p>regards,</p>
      <p><br>
      </p>
      <p>Richard</p>
      <div class="moz-cite-prefix">On 13/04/2026 13:42, Malte wrote:<br>
      </div>
      <blockquote type="cite"
        cite="mid:b5e50783-4796-4ea8-84c4-6235e2d69feb@lard.at">
        <meta http-equiv="Content-Type"
          content="text/html; charset=UTF-8">
        <p>I get what you say. I can map my custom logic into request
          route blocks, as long as there is no function which requires
          execution from a specific (non-request) route type. Therefore
          I have to make sure that every function which requires to be
          executed in a specific (non-request) route is still being
          called in the respective section.</p>
        <p>For example if I want to shorten my MAIN onreply_route by
          moving a part of it to another block and referencing it from
          the main block, I have to make sure that reply specific
          functions do not migrate from the onreply route.</p>
        <p>This could be done by adjust the logic so it only checks the
          conditions for a operation using non route specific functions,
          move that code to a new route block, refer to that route block
          from the onreply route, wait for the new route block to finish
          and return to the onreply route block and then calling the
          route specific functions when a certain flag was set inside
          the aforementioned new route block.</p>
        <p>incoming reply</p>
        <p>-> onreply_route[MAIN] </p>
        <p>-> route[CUST_FUNCT] </p>
        <p>    - if t_check_status("180") && hdr(xyz) then
          avp(180xyz) = 1; </p>
        <p>-> back to onreply_route[MAIN] </p>
        <p>    - if avp(180xyz) then change_reply_status(181, "test");</p>
        <p><br>
        </p>
        <p>My initial idea was to shorten my onreply_route to make it
          more easily understandable by my colleagues. Although I like
          this reinterpretation of the route block - how it’s used and
          how it can be used - I think its hard to explain why some
          reply operations are done in a request route and some not.
          Therefore I for now just keep my block as long as it is, but
          keep the possibilities in mind.</p>
        <p><br>
        </p>
        <p>Thank you all for your suggestions!</p>
        <p><br>
        </p>
        <div class="moz-cite-prefix">On 10/04/2026 16:12, Ben Newlin via
          Users wrote:<br>
        </div>
        <blockquote type="cite"
cite="mid:PH7PR10MB7850087220F2174F14061C0A95592@PH7PR10MB7850.namprd10.prod.outlook.com">
          <meta http-equiv="Content-Type"
            content="text/html; charset=UTF-8">
          <div
style="direction: ltr; font-family: Aptos, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
            The solution proposed by Richard works and it is working in
            your case, in the sense that the called route is being
            executed.</div>
          <div
style="direction: ltr; font-family: Aptos, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
            <br>
          </div>
          <div
style="direction: ltr; font-family: Aptos, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
            However, this method does not remove any conditions of
            specific functions on which routes they can be called from,
            and the called route is not a reply route it is a basic
            route. So the error is valid.</div>
          <div
style="direction: ltr; font-family: Aptos, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
            <br>
          </div>
          <div
style="direction: ltr; font-family: Aptos, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
            This mechanism can be used generally to break up processing
            in large routes, but any functions which require execution
            from a specific route type cannot be moved to the nested
            route. What you need is something like this:</div>
          <div
style="direction: ltr; font-family: Aptos, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
            <br>
          </div>
          <div
style="direction: ltr; font-family: Aptos, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
            <br>
          </div>
          <div
style="direction: ltr; font-family: monospace; font-size: 12pt; color: rgb(0, 0, 0);">
            <span style="background-color: rgb(255, 255, 255);"> 
              route[reply_processing_1] {</span></div>
          <div
style="direction: ltr; font-family: monospace; font-size: 12pt; color: rgb(0, 0, 0);">
            <span style="background-color: rgb(255, 255, 255);">    # do
              general reply processing step 1</span></div>
          <div
style="direction: ltr; font-family: monospace; font-size: 12pt; color: rgb(0, 0, 0);">
            <span style="background-color: rgb(255, 255, 255);">  }</span></div>
          <div
style="direction: ltr; font-family: monospace; font-size: 12pt; color: rgb(0, 0, 0);">
            <span style="background-color: rgb(255, 255, 255);"><br>
            </span></div>
          <div style="direction: ltr; font-family: monospace;"><span
style="font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);"> 
              r</span>oute[reply_processing_2] {</div>
          <div
style="direction: ltr; font-family: monospace; color: rgb(0, 0, 0);">   
            # do general reply processing step 2</div>
          <div
style="direction: ltr; font-family: monospace; color: rgb(0, 0, 0);">  }</div>
          <div
style="direction: ltr; font-family: monospace; color: rgb(0, 0, 0);"><br>
          </div>
          <div
style="direction: ltr; font-family: monospace; font-size: 12pt; color: rgb(0, 0, 0);">
            <span style="background-color: rgb(255, 255, 255);"> 
              onreply_route[MAIN] {</span></div>
          <div style="direction: ltr; font-family: monospace;"><span
style="font-size: 16px; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);"> 
                r</span><span
              style="background-color: rgb(255, 255, 255);">oute(</span><span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">reply_processing_1</span><span
style="font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">);</span></div>
          <div style="direction: ltr; font-family: monospace;"><span
              style="background-color: rgb(255, 255, 255);">    </span></div>
          <div style="direction: ltr; font-family: monospace;"><span
              style="background-color: rgb(255, 255, 255);">    #
              Perform reply_route specific processing here</span></div>
          <div style="direction: ltr; font-family: monospace;"><span
              style="background-color: rgb(255, 255, 255);">    </span><span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">change_reply_status(181,
              "test</span><span
              style="background-color: rgb(255, 255, 255);">”</span><span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">);</span></div>
          <div style="direction: ltr; font-family: monospace;"><span
              style="background-color: rgb(255, 255, 255);"><br>
            </span><span
style="font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);"> 
                route(reply_processing_2);</span></div>
          <div
style="direction: ltr; font-family: monospace; font-size: 12pt; color: rgb(0, 0, 0);">
            <span style="background-color: rgb(255, 255, 255);">  }</span></div>
          <div
style="direction: ltr; font-family: Aptos, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
            <br>
          </div>
          <div id="ms-outlook-mobile-signature"
            style="color: inherit; background-color: inherit;">
            <p class="MsoNormal"
style="margin: 0in; font-family: Aptos, sans-serif; font-size: 11pt;"> <span
                style="color: black;">Ben Newlin</span></p>
            <p class="MsoNormal"
style="margin: 0in; font-family: Aptos, sans-serif; font-size: 11pt;"> <span
                style="color: black;"><br>
              </span></p>
          </div>
          <div id="mail-editor-reference-message-container"
            style="color: inherit; background-color: inherit;">
            <div
              class="ms-outlook-mobile-reference-message skipProofing"
              style="direction: ltr;"> </div>
            <div
              class="ms-outlook-mobile-reference-message skipProofing"
style="text-align: left; padding: 3pt 0in 0in; border-width: 1pt medium medium; border-style: solid none none; border-color: rgb(181, 196, 223) currentcolor currentcolor; font-family: Aptos; font-size: 12pt; color: black;">
              <b>From: </b>Users <a class="moz-txt-link-rfc2396E"
                href="mailto:users-bounces@lists.opensips.org"
                moz-do-not-send="true"><users-bounces@lists.opensips.org></a>
              on behalf of Malte <a class="moz-txt-link-rfc2396E"
                href="mailto:spce@lard.at" moz-do-not-send="true"><spce@lard.at></a><br>
              <b>Date: </b>Friday, April 10, 2026 at 5:33 AM<br>
              <b>To: </b><a
                class="moz-txt-link-abbreviated moz-txt-link-freetext"
                href="mailto:users@lists.opensips.org"
                moz-do-not-send="true">users@lists.opensips.org</a> <a
                class="moz-txt-link-rfc2396E"
                href="mailto:users@lists.opensips.org"
                moz-do-not-send="true"><users@lists.opensips.org></a><br>
              <b>Subject: </b>Re: [OpenSIPS-Users] Nested reply_routes</div>
            <div
style="background-color: rgb(255, 255, 255); height: auto; display: block;">
              <div class="mc-ip-hide"
style="direction: ltr; text-align: left; font-family: Aptos, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
                <br>
              </div>
              <hr style="direction: ltr; text-align: left;"> </div>
            <p class="ms-outlook-mobile-reference-message skipProofing">Hi,</p>
            <p class="ms-outlook-mobile-reference-message skipProofing">this
              approach unfortunately doesn't work. Does somebody else
              know of a solution to neaten up big reply routes?</p>
            <p class="ms-outlook-mobile-reference-message skipProofing">My
              code and the following error:</p>
            <div
              class="ms-outlook-mobile-reference-message skipProofing"
              style="margin: 0em 40px; font-family: monospace;"> <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  367 
                route[test] {</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  368         
                xlog("now in test route");</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  369         
                change_reply_status(181, "test");</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  370 
                }</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  371</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);"> 
                372  onreply_route[MAIN] {</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  373  
                       # For fr_inv_timeout handling</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  374     
                    if (t_check_status("180")) {</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  375        
                         $var(180_in_trans)=1;</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  376           
                      route(test);</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  377             
                    xlog("back to reply route");</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  378         
                }</span><br>
              <br>
            </div>
            <div
              class="ms-outlook-mobile-reference-message skipProofing"
style="margin: 0em 40px; font-family: monospace; color: rgb(255, 84, 84);">
              <span style="background-color: rgb(255, 255, 255);"><b>CRITICAL:core:yyerror:
                  parse error in /etc/opensips/opensips.cfg:369:29-30:
                  Command <change_reply_status> cannot be used in
                  the block</b></span></div>
            <p class="ms-outlook-mobile-reference-message skipProofing">Doing
              it in a reply route:</p>
            <div
              class="ms-outlook-mobile-reference-message skipProofing"
              style="margin: 0em 40px; font-family: monospace;"> <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  367 
                onreply_route[test] {</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  368         
                xlog("now in test route");</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  369         
                change_reply_status(181, "test");</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  370 
                }</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  371</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  372 
                onreply_route[MAIN] {</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  373         
                # For fr_inv_timeout handling</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  374         
                if (t_check_status("180")) {</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  375                 
                $var(180_in_trans)=1;</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  376                 
                t_on_reply("test");</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  377                 
                xlog("back to MAIN reply route");</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  378         
                }</span><br>
              <br>
            </div>
            <div
              class="ms-outlook-mobile-reference-message skipProofing"
style="margin: 0em 40px; font-family: monospace; color: rgb(255, 84, 84);">
              <span style="background-color: rgb(255, 255, 255);"><b>ERROR:sipmsgops:change_reply_status_f:
                  the class of provisional or positive final replies
                  cannot be changed</b></span></div>
            <div
              class="ms-outlook-mobile-reference-message skipProofing"
              style="direction: ltr;"> <br>
            </div>
            <p class="ms-outlook-mobile-reference-message skipProofing">Jump
              to secondary reply route via proxy route:</p>
            <div
              class="ms-outlook-mobile-reference-message skipProofing"
              style="margin: 0em 40px; font-family: monospace;"> <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  367 
                route[test] {</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  368         
                xlog("now in test route");</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  369         
                t_on_reply("test");</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  370 
                }</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  371</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  372 
                onreply_route[test] {</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  373         
                xlog("now in test reply route");</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  374         
                change_reply_status(181, "test");</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  375 
                }</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  376</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  377 
                onreply_route[MAIN] {</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  378         
                # For fr_inv_timeout handling</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  379         
                if (t_check_status("180")) {</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  380                 
                $var(180_in_trans)=1;</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  381                 
                route(test);</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  382                 
                xlog("back to MAIN reply route");</span><br>
              <span
style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">  383         
                }</span><br>
              <br>
            </div>
            <div
              class="ms-outlook-mobile-reference-message skipProofing"
style="margin: 0em 40px; font-family: monospace; color: rgb(255, 84, 84);">
              <span style="background-color: rgb(255, 255, 255);"><b>ERROR:sipmsgops:change_reply_status_f:
                  the class of provisional or positive final replies
                  cannot be changed</b></span></div>
            <p class="ms-outlook-mobile-reference-message skipProofing">I
              must note that change_reply_status works flawlessly when
              executing directly in MAIN reply route.</p>
            <p class="ms-outlook-mobile-reference-message skipProofing"><br>
            </p>
            <p class="ms-outlook-mobile-reference-message skipProofing">Thanks,</p>
            <p class="ms-outlook-mobile-reference-message skipProofing">Malte<span
                style="font-family: monospace;"> </span></p>
          </div>
          <br>
          <fieldset class="moz-mime-attachment-header"></fieldset>
          <pre wrap="" class="moz-quote-pre">_______________________________________________
Users mailing list
<a class="moz-txt-link-abbreviated moz-txt-link-freetext"
          href="mailto:Users@lists.opensips.org" moz-do-not-send="true">Users@lists.opensips.org</a>
<a class="moz-txt-link-freetext"
href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users"
          moz-do-not-send="true">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a>
</pre>
        </blockquote>
        <br>
        <fieldset class="moz-mime-attachment-header"></fieldset>
        <pre wrap="" class="moz-quote-pre">_______________________________________________
Users mailing list
<a class="moz-txt-link-abbreviated moz-txt-link-freetext"
        href="mailto:Users@lists.opensips.org" moz-do-not-send="true">Users@lists.opensips.org</a>
<a class="moz-txt-link-freetext"
        href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users"
        moz-do-not-send="true">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a>
</pre>
      </blockquote>
      <br>
      <fieldset class="moz-mime-attachment-header"></fieldset>
      <pre wrap="" class="moz-quote-pre">_______________________________________________
Users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Users@lists.opensips.org">Users@lists.opensips.org</a>
<a class="moz-txt-link-freetext" href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a>
</pre>
    </blockquote>
  </body>
</html>