[OpenSIPS-Users] Persistent variables within B2B dialog

Ovidiu Sas osas at voipembedded.com
Sat Apr 21 02:29:00 CEST 2012


This topic comes back again and again ...
It should be really documented in the wiki somewhere.

OpenSIPS can operate in two different modes:
 - proxy,
 - back to back user agent.

The two modes of operations are exclusive and modules that are bind to
one mode of operation are more or less incompatible with the other
mode.  The dialog module is tightly coupled with the proxy mode and
therefore is totally incompatible with the b2b mode.  Most of the
modules were designed based on the assumption that opensips is running
in proxy mode and as a result, most of them are more or less (leaning
towards more) incompatible with b2b mode.
To be more precise, whatever operation that can be done in proxy mode
before calling t_relay() and doesn't have a dependency on t_relay to
complete, is safe to be use in b2b mode.
For instance, routing can be done using whatever routing method one
might prefer (dispatcher, drouting, ...) before initiating the call in
b2b mode, but once the call is initiated in b2b mode, all the
subsequent routing failover mechanisms are discarded (because of
dependency on t_relay() - proxy routing mode - dealing all the time
with the initial transaction).  In b2b mode, we are dealing with two
transactions: the incoming one and the outgoing one and things are
becoming more complex.

Hope this brings a little bit of light in what can be and what cannot
be done while routing calls in b2b mode.
In the future, modules could be enhanced to be both proxy and b2b
friendly, but that requires quite a bit of work: design and
implementation.


Regards,
Ovidiu Sas

-- 
VoIP Embedded, Inc.
http://www.voipembedded.com


On Fri, Apr 20, 2012 at 6:22 PM, Duane Larson <duane.larson at gmail.com> wrote:
> Is it possible to keep a persistent variable throughout a dialog when using
> the B2B module?  I tried the Dialog modules (set_dlg_flag() and
> is_dlg_flag_set()) and $dlg_val variable but none worked.  Not sure why.
>
> route[b2b_request] {
>
>         if (search_body("a=sendonly") && method == "INVITE"){
>                 xlog("SEARCHING: rm [$rm]  BING BING FOUND IT\n");
>
>                 create_dialog();
>
>                 $dlg_val("IsHolding") = "1";
>
> #               set_dlg_flag("3");
>         };
>
> $var(IsHolding) = $dlg_val("IsHolding");
> xlog("************************************************* var is
> [$var(IsHolding)] and call is rm [$rm]\n");
>         #if (is_dlg_flag_set("3") && method == "ACK"){
>         if ($var(IsHolding) == "1" && method == "ACK"){
>                 xlog("***********SEARCHING***********: rm [$rm]  WE HAVE AN
> ACK and VarISHolding equals one\n");
>         };
>
> }



More information about the Users mailing list