[OpenSIPS-Users] var/avp persistence, onreply_route, and script context

Bobby Smith bobby.smith at gmail.com
Fri Aug 5 06:03:35 CEST 2011

Sorry, there were a couple of typos in that:

 if (MY_VAR = "cisco") { >>>
<<< if (MY_VAR =~/== "cisco")

and assume onreply_route[foo] has a trigger armed (or is the default onreply

I will post the context of my routing script if necessary but I really think
this is just a fundamental understanding problem that I don't quite get how
these mechanisms work.


On Thu, Aug 4, 2011 at 8:48 PM, Bobby Smith <bobby.smith at gmail.com> wrote:

> All,
> Here's why I'm trying to accomplish:
> route [subsequent_request] {
>    if (has_totag && is_method("ACK") {
>      if (MY_VAR = "cisco") {
>         lookup("location");
>         ... relay and exit
>      }
>      else {
>           ... relay and exit lr
>      }
>    }
> }
> onreply_route [foo] {
>      ....
>      if($ua =~ "Cisco-CP79") {
>           MY_VAR = "cisco"
>      }
> }
> The reasons are not really relevant (it's to get rid of a really poor UA
> implementation on older Cisco 79XX firmwares), but my intent is:
> 1) Set a transaction-visible-only value in onreply_route [foo]
> 2) Retrieve it on the ACK that completes the initial invite transaction.
> My problems:
> 1) if MY_VAR is an $avp, it returns null on retrieving it in the
> route[subsequent_request], even with the onreply flag for tm set.
> 2) if MY_VAR is a $var, it's process global and so, the next transaction
> that comes in could share the same state (race)
> 3) if MY_VAR is a flag, I can't retrieve it in the route [subsequent
> request]
> 4) if MY_VAR is a dlg_flag or a dlg_var, I can't retrieve it in the
> subsequent request even if invoking create_dialog as the first action in the
> routing script (if it's an initial invite).
> 5) The only thing I've been able to do is create a unique key via
> localcache (with $fU_useragent = myvalue) and fetch it, but this does not
> allow multiple UA's to register with the same fU
> My question is, is there any way to set a transaction state only value in
> an onreply hook, and retrieve it on the ACK?
> I know according to the RFC:
>       The reason for this separation is rooted in the importance <http://rfc-ref.org/RFC-TEXTS/3261/kw-importance.html> of
>       delivering all 200 (OK) responses to an INVITE <http://rfc-ref.org/RFC-TEXTS/3261/kw-invite.html> to the UAC <http://rfc-ref.org/RFC-TEXTS/3261/kw-uac.html>.  To
>       deliver them all to the UAC <http://rfc-ref.org/RFC-TEXTS/3261/kw-uac.html>, the UAS <http://rfc-ref.org/RFC-TEXTS/3261/kw-uas.html> alone takes responsibility
>       for retransmitting them (see Section, and the UAC <http://rfc-ref.org/RFC-TEXTS/3261/kw-uac.html> alone
>       takes responsibility for acknowledging them with ACK <http://rfc-ref.org/RFC-TEXTS/3261/kw-ack.html> (see Section
>  Since this ACK <http://rfc-ref.org/RFC-TEXTS/3261/kw-ack.html> is retransmitted only by the UAC <http://rfc-ref.org/RFC-TEXTS/3261/kw-uac.html>, it is
>       effectively considered its own transaction <http://rfc-ref.org/RFC-TEXTS/3261/kw-transaction.html>.
> Is there a way to get this associated with the right dialog or something?
>  I've tried setting a dialog profile on initial invite, storing a value in
> the 200 OK onreply, and retrieving it as well in the ACK, but I get no
> dialog has been created (I guess because the dialog is early or something).
> Thanks for the ideas,
> BobbyS
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20110805/8ee785cf/attachment-0001.htm>

More information about the Users mailing list