[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
route).
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.
Thanks,
BobbyS
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 13.3.1.4), 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
> 13.2.2.4). 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