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...
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 - 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@openser.org http://openser.org/cgi-bin/mailman/listinfo/users