<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Hi,</p>
<p>this approach unfortunately doesn't work. Does somebody else know
of a solution to neaten up big reply routes?</p>
<p>My code and the following error:</p>
<p>
<blockquote type="cite">
<span style="font-family:monospace"><span
style="color:#000000;background-color:#ffffff;"> 367</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">route[test]
{</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 368</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">xlog("now in
test route");</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 369</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">change_reply_status(181,
"test");</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 370</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">}</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 371</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 372</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">onreply_route[MAIN]
{</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 373</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;"># For
fr_inv_timeout handling</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 374</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">if
(t_check_status("180")) {</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 375</span><span
style="color:#000000;background-color:#ffffff;">
</span><span
style="color:#000000;background-color:#ffffff;">$var(180_in_trans)=1;</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 376</span><span
style="color:#000000;background-color:#ffffff;">
</span><span
style="color:#000000;background-color:#ffffff;">route(test);</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 377</span><span
style="color:#000000;background-color:#ffffff;">
</span><span
style="color:#000000;background-color:#ffffff;">xlog("back
to reply route");</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 378</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">}</span><br>
<span style="color:#000000;background-color:#ffffff;">
</span><br>
</span></blockquote>
</p>
<p>
<blockquote type="cite">
<span style="font-family:monospace"><span
style="font-weight:bold;color:#ff5454;background-color:#ffffff;">CRITICAL:core:yyerror:
parse error in /etc/opensips/opensips.cfg:369:29-30: Command
<change_reply_status> cannot be used in the block</span><br>
</span></blockquote>
</p>
<p>Doing it in a reply route:</p>
<p>
<blockquote type="cite">
<span style="font-family:monospace"><span
style="color:#000000;background-color:#ffffff;"> 367</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">onreply_route[test]
{</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 368</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">xlog("now in
test route");</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 369</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">change_reply_status(181,
"test");</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 370</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">}</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 371</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 372</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">onreply_route[MAIN]
{</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 373</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;"># For
fr_inv_timeout handling</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 374</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">if
(t_check_status("180")) {</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 375</span><span
style="color:#000000;background-color:#ffffff;">
</span><span
style="color:#000000;background-color:#ffffff;">$var(180_in_trans)=1;</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 376</span><span
style="color:#000000;background-color:#ffffff;">
</span><span
style="color:#000000;background-color:#ffffff;">t_on_reply("test");</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 377</span><span
style="color:#000000;background-color:#ffffff;">
</span><span
style="color:#000000;background-color:#ffffff;">xlog("back
to MAIN reply route");</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 378</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">}</span><br>
<span style="color:#000000;background-color:#ffffff;">
</span><br>
</span>
</blockquote>
<blockquote type="cite">
<span style="font-family:monospace"><span
style="font-weight:bold;color:#ff5454;background-color:#ffffff;">ERROR:sipmsgops:change_reply_status_f:
the class of provisional or positive final replies cannot be
changed</span><br>
</span>
</blockquote>
<br>
</p>
<p>Jump to secondary reply route via proxy route:</p>
<p>
<blockquote type="cite">
<span style="font-family:monospace"><span
style="color:#000000;background-color:#ffffff;"> 367</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">route[test]
{</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 368</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">xlog("now in
test route");</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 369</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">t_on_reply("test");</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 370</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">}</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 371</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 372</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">onreply_route[test]
{</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 373</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">xlog("now in
test reply route");</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 374</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">change_reply_status(181,
"test");</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 375</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">}</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 376</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 377</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">onreply_route[MAIN]
{</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 378</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;"># For
fr_inv_timeout handling</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 379</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">if
(t_check_status("180")) {</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 380</span><span
style="color:#000000;background-color:#ffffff;">
</span><span
style="color:#000000;background-color:#ffffff;">$var(180_in_trans)=1;</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 381</span><span
style="color:#000000;background-color:#ffffff;">
</span><span
style="color:#000000;background-color:#ffffff;">route(test);</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 382</span><span
style="color:#000000;background-color:#ffffff;">
</span><span
style="color:#000000;background-color:#ffffff;">xlog("back
to MAIN reply route");</span><span
style="color:#000000;background-color:#ffffff;">
</span><br>
<span style="color:#000000;background-color:#ffffff;"> 383</span><span
style="color:#000000;background-color:#ffffff;"> </span><span
style="color:#000000;background-color:#ffffff;">}</span><br>
<span style="color:#000000;background-color:#ffffff;">
</span><br>
</span>
</blockquote>
<blockquote type="cite">
<span style="font-family:monospace"><span
style="font-weight:bold;color:#ff5454;background-color:#ffffff;">ERROR:sipmsgops:change_reply_status_f:
the class of provisional or positive final replies cannot be
changed</span><br>
</span></blockquote>
</p>
<p>I must note that change_reply_status works flawlessly when
executing directly in MAIN reply route.</p>
<p><br>
</p>
<p>Thanks,</p>
<p>Malte</p>
<p>On 10/04/2026 01:03, Richard Robson wrote:</p>
<blockquote type="cite"
cite="mid:4b9b91d7-2286-464e-87af-64616f8e92e0@rikrobson.co.uk">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<p>No. Once in the reply_route you can call routes as a function.
I think that is what you are after.</p>
<p>onreply_route{route_a]</p>
<p>{stuff()..</p>
<p>if x route(route_z)<br>
else route(_x)</p>
<p>..}</p>
<p>route[route_z]</p>
<p>{stuff()..</p>
<p>..}</p>
<p><br>
</p>
<p>route[route_z]</p>
<p>{stuff()..</p>
<p>..}</p>
<p>Richard</p>
<p><br>
</p>
<div class="moz-cite-prefix">On 09/04/2026 10:13, <a
class="moz-txt-link-abbreviated moz-txt-link-freetext"
href="mailto:spce@lard.at" moz-do-not-send="true">spce@lard.at</a>
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:639116f3-6a2f-4c7a-b2b2-9229f1ccd3b4@lard.at">
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<p>Hi,:</p>
<p>thanks. In my case theres a quite big onreply route, which
totally works, but is a hassle to read. Therefore I would like
to segment some stuff into custom "functions", so I can have
an easy to understand main onreply route and the more
complicated logic in special blocks.</p>
<p>A possibility for that would be to call secondary onreply
routes from the parent route. Is that possible or not?</p>
<pre class="moz-signature" cols="72">Liebe Grüße / Kind regards,
Malte</pre>
<div class="moz-cite-prefix">On 08/04/2026 17.23, Richard Robson
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:b02e03fc172c8744eea47f32a681ac3d3fa58628.camel@rikrobson.co.uk">
<meta http-equiv="content-type"
content="text/html; charset=UTF-8">
<style>pre,code,address {
margin: 0px;
}h1,h2,h3,h4,h5,h6 {
margin-top: 0.2em;
margin-bottom: 0.2em;
}ol,ul {
margin-top: 0em;
margin-bottom: 0em;
}blockquote {
margin-top: 0em;
margin-bottom: 0em;
}</style>
<div>you call a reply route to handle the relpy. i.e. a
positive outcome 200OK or a 183 etc. This reply should be
relayed back to the originator and there should be no need
to call another reply route. it won't expect a reply just an
ack and that should be handled as an ACK and relayed or an
error sent back. (see the default script)</div>
<div>if you want the reply route to do something else then add
a route to do that or a branch route if needed. and call
that from the reply route (not nested)</div>
<div><br>
</div>
<div>Richard<br>
<br>
</div>
<div><br>
</div>
<div>On Wed, 2026-04-08 at 15:38 +0200, <a
class="moz-txt-link-abbreviated moz-txt-link-freetext"
href="mailto:spce@lard.at" moz-do-not-send="true">spce@lard.at</a>
wrote:</div>
<blockquote type="cite"
style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex">
<div> Hi,<br>
<br>
is it possible to use nested reply routes in opensips?<br>
<br>
I want to clean up my script and thinking of something
like this:<br>
</div>
<p><font size="2">> onreply_route[MAIN] {<br>
> [...]<br>
> is_from_gw(1) = t_on_reply("ADD_ISUP");> }<br>
> [...] }<br>
> onreply_route[ADD_ISUP] {<br>
> add_isup_part() }</font></p>
<div> </div>
<p>The nested onreply route then should return to the parent
onreply route. In my tests I specifically had issues with
the rtpengine module: when using rtpengine_answer in the
parent onreply route and then calling another onreply
route from parent route, opensips wasn't able to see the
SDP body in the reply and the rtpengine_answer thus
failed.</p>
<div> </div>
<p><br>
</p>
<div> -- <br>
Liebe Grüße / Kind regards,<br>
Malte<br>
<br>
</div>
<div>_______________________________________________<br>
</div>
<div>Users mailing list<br>
</div>
<div><a href="mailto:Users@lists.opensips.org"
moz-do-not-send="true" class="moz-txt-link-freetext">Users@lists.opensips.org</a><br>
</div>
<div><a
href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users"
moz-do-not-send="true" class="moz-txt-link-freetext">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
</div>
</blockquote>
<div><br>
</div>
<div><span></span></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>