On 12/20/05 17:04, Joachim Fabini wrote:
Hi Daniel,
it is possible to arm only one onreply_route. In
the case you use two
times t_on_reply(), the latest is used.
Ooops, I was expecting this reply. I suggest to document this
in the Openser docs...
it is now in tm readme.
To solve your case, the solution
is to set some flags, and based on that to call different routes from
onreply_route.
Of course, it's feasible. BUT: the conditionals/flags in the
main route require duplication of code in the reply_routes -
you can define several route[x] which can be called from different
points of onreply_route. In this way the duplicated code is reduced a lot.
Cheers,
Daniel
I'd like to avoid this.
I fully understand that at the moment there are tasks of
higher importance to complete. But at the same time I believe
that in the long run multiple reply-routes can help to
significantly reduce script complexity. What do you think?
Thanks for your reply,
best regards
--Joachim
PS: A sample to illustrate practically what I'm talking
about. Imagine the following scenario: action
block A (possibly consisting of tens of loc) is required
for all replies except for replies on Cancel and Ack.
Action block B for all invites, C for all subscribes.
Currently this requires the following code:
route
{
# Nesting required, otherwise we overwrite our previous
# route setting
if (!((method=="ACK")||(method=="CANCEL")))
{
if (method=="INVITE")
{
t_on_reply("1");
}
else
{
if (method=="SUBSCRIBE")
{
t_on_reply("2");
}
else
{
t_on_reply("3");
}
}
}
# some other processing
t_relay();
}
onreply_route[1]
{
A;
B;
}
onreply_route[2]
{
A;
C;
}
onreply_route[3]
{
A;
}
If several reply-routes can be triggered, the code becomes
the following - imho much more readable and clear:
route
{
# No nesting required
if (!((method=="ACK")||(method=="CANCEL")))
{
t_on_reply("3");
}
if (method=="INVITE")
{
t_on_reply("1");
}
if (method=="SUBSCRIBE")
{
t_on_reply("2");
}
# some other processing
t_relay();
}
onreply_route[1]
{
# we get rid of code duplication A #1
B;
}
onreply_route[2]
{
# we get rid of code duplication A #2
C;
}
onreply_route[3]
{
A;
}
Cheers,
Daniel
On 12/20/05 14:08, Joachim Fabini wrote:
> Hi,
>
> Does OpenSER support sequentially processing the same
> reply by several onreply routes, i.e.
>
> route
> {
> # general case - have all replies processed by
> # onreply_route[1]
> t_on_reply("1");
>
> if (mycondition)
> {
> # special case - these replies should be processed
> # by onreply_route[1] _and_ by onreply_route[2]
> t_on_reply("2");
> }
> t_relay();
> }
>
> onreply_route[1]
> {
> #
> append_hf("P-MyExtraInfo: xyz\r\n");
> }
>
> onreply_route[2]
> {
> # do some extra processing here
> }
>
> I did not find any info on this topic in the docs. Imho
> the ability to use trigger several onreply_routes for
> sequential processing can help extremly in keeping code
> clean and readable.
> Assume a proxy that is required, e.g., to insert a
> new header field into _any_ reply. In addition, some
> other replies need some extra handling in the onreply
> route. Without the capability to trigger multiple
> onreply-routes this leads to many conditionals in either
> the main route or in the reply route(s).
>
> Thanks in advance,
> --Joachim
>
>
> _______________________________________________
> Users mailing list
> Users(a)openser.org
>
http://openser.org/cgi-bin/mailman/listinfo/users
>
>
>