Hi,
OpenSER has a new type of route: local route. This route is to be executed when a brand new request is internally generated (openser being the UAC) ; such requests are result of : - t_uac_dlg MI command - msilo, sms, presence, cpl-c, dialog (and others) modules
Purpose ========
This need route was added to meet the need to do dynamic manipulation (do some checking, adding headers, logging, etc) of the internally generated requests; without this new route, these requests were totally transparent for the openser script.
Some strong cases there were debated for a long time on the lists:
- adding new headers into internally generated requests - so far all kind of hacks were used to do it (like defining module parameters with predefined headers to be added in the request - see presence modules)
- logging (log or xlog) information about the outgoing requests - see the discussion about the presence internal logging
- accounting - there was no way to account these requests (as accounting can be triggered only from script) - see the discussion around the dialog module for how to account the BYEs generated by this module
How to use ===========
there is a single instance of this route allowed in the configuration: local_route { ...... }
Note that not all the functions are allowed to be called from this route (better check the docs before)
Example:
local_route { .... if (is_method("NOTIFY")) { xlog("new $rm sent out for $ru via $du\n"); } .... if (is_method("BYE")) { acc_log_request("internal bye"); append_hf("X-note: terminated by dialog module"); } .... }
Limitations ============
- you can access RURI and destination uri ($ru and $du), but any change of these value will be discarded - you cannot change the destination of the request
- there is no transaction persistence (yet) - you cannot set onreply or failure routes, flags are not pushed into transaction ; this will be probably available in the next version.
- accounting via flags do not work - as this requires transaction persistence (see above)
Regards, Bogdan