Hi, Razvan!<div><br></div><div>Thank you for the $DLG_dir pseudovariable, it worked!</div><div><br></div><div>The variables are properly flushed into the DB after 200 OK, and I can also see them using "opensipsctl fifo dlg_list_ctx", under context.</div>
<div><br></div><div>Even using the $DLG_dir for the direction of a sequential request, I still need to access either the caller_contact or the callee_contact. Is there any other way to have those apart from the variables?</div>
<div><br></div><div>Thanks again!</div><div>Mariana.<br><br><div class="gmail_quote">On Wed, May 16, 2012 at 5:34 AM, Razvan Crainea <span dir="ltr"><<a href="mailto:razvan@opensips.org" target="_blank">razvan@opensips.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<tt>Hi, Mariana!<br>
<br>
Can you check if the variables are properly flushed into the DB
after 200OK?<br>
Also, if you only want to check the direction of a sequential
request, you could use directly the $DLG_dir [1] pseudovariable
from the dialog module.<br>
<br>
[1] <a href="http://www.opensips.org/html/docs/modules/1.8.x/dialog.html#id295750" target="_blank">http://www.opensips.org/html/docs/modules/1.8.x/dialog.html#id295750</a></tt>
<br>
<tt><br>
Regards,<br>
</tt>
<pre cols="72">--
Răzvan Crainea
OpenSIPS Developer
<a href="http://www.opensips-solutions.com" target="_blank">http://www.opensips-solutions.com</a></pre><div><div class="h5">
<br>
On 05/15/2012 10:03 PM, Mariana Arduini wrote:
</div></div><blockquote type="cite"><div><div class="h5">Hello all,
<div><br>
</div>
<div>We need to perform some substitutions in the R-URI and
Contact header in order to have the following flow working as
required:</div>
<div><br>
</div>
<div>caller > opensips1 > opensips2 > callee</div>
<div><br>
</div>
<div>Currently, opensips1 stores "call_id", "caller_tag" and
"caller_contact" Dialog variables
using function store_dlg_value() on new INVITES, and
"callee_contact" on 200 OK for the INVITES. Later, for
sequential requests, it compares the from_tag with the
caller_tag, accessed using fetch_dlg_value(), to find out
whether it is a request from the caller or from the callee, and
it works. Then I started working on failover for opensips1, and
that's where I'm facing problems. I'm playing with
"db_flush_vals_profiles" new parameter and "dlg_db_sync" new
fifo command, both on Dialog module, in order to have a stand by
opensips1 taking over the dialogs going on in an active
opensips1, in case it fails. This is the test:
<div>
<br>
</div>
<div>1) active opensips is running listening on virtual ip say
10.0.0.1</div>
<div>2) caller sends INVITE to 10.0.0.1, which goes to active
opensips</div>
<div>3) active opensips is stopped and it's virtual ip set
down; same virtual ip is set up in stand by opensips and it is
started; fifo command dlg_db_sync is run on stand by opensips</div>
<div>4) caller sends BYE to 10.0.0.1, which goes to stand by
opensips</div>
<div><br>
</div>
<div>After loose_route(), stand by opensips cannot
fetch_dlg_value for "caller_tag" and the R-URI is set to
0. Then I tried the following, using only one opensips:</div>
<div><br>
</div>
<div>1) caller sends INVITE to opensips</div>
<div>2) fifo command dlg_list_ctx is run and shows all of the
variables I stored</div>
<div>3) opensips is restarted and fifo command dlg_db_sync is
run</div>
<div>
4) fifo command dlg_list_ctx is run again and shows only the
dialog info, not the variables in context</div>
<div>
<br>
</div>
<div>I also
tried get_dialog_info("caller_tag","$var(caller_tag)","call_id","$ci");
and $dlg_val(), but yet the variables are not found:</div>
<div><br>
</div>
<div>
<div>
<div>
22232: DBG:dialog:fetch_dlg_value: looking for
<caller_tag></div>
<div>22232: DBG:dialog:fetch_dlg_value: var NOT found!</div>
<div>22232: ERROR:core:do_assign: no value in right
expression</div>
<div>22232: ERROR:core:do_assign: error at line: 134</div>
<div>22232: callid(<a href="mailto:1-5150@192.168.16.154" target="_blank">1-5150@192.168.16.154</a>)
trying dlg_val(), caller_tag: 0</div>
<div>22232: DBG:core:comp_scriptvar: str 20 :
uac1192.168.16.154</div>
<div>22232: DBG:dialog:fetch_dlg_value: looking for
<caller_contact></div>
<div>22232: DBG:dialog:fetch_dlg_value: var NOT found!</div>
<div>22232: ERROR:core:do_assign: no value in right
expression</div>
<div>22232: ERROR:core:do_assign: error at line: 146</div>
<div>22232: callid(<a href="mailto:1-5150@192.168.16.154" target="_blank">1-5150@192.168.16.154</a>)
trying dlg_val(), caller_contact: 0</div>
<div>22232: DBG:tm:t_newtran: transaction on
entrance=0xffffffffffffffff</div>
<div>22232: DBG:core:parse_headers: flags=ffffffffffffffff</div>
<div>22232: DBG:core:parse_headers: flags=78</div>
<div>22232: DBG:tm:t_lookup_request: start searching:
hash=5130, isACK=0</div>
<div>22232: DBG:tm:matching_3261: RFC3261 transaction
matching failed</div>
<div>22232: DBG:tm:t_lookup_request: no transaction found</div>
<div>22232: ERROR:core:parse_uri: uri too short: <0>
(1)</div>
<div>22232: ERROR:core:parse_sip_msg_uri: bad uri <0></div>
<div>22232: DBG:core:set_err_info: ec: 1, el: 3, ei: 'error
parsing r-uri'</div>
<div>22232: ERROR:tm:new_t: uri invalid</div>
<div>22232: ERROR:tm:t_newtran: new_t failed</div>
</div>
</div>
<div><br>
</div>
<div>
There is no error logs when dlg_db_sync is run. I see in the
dialog table a column called from_tag, is there a way to get
its content for a certain dialog? It seems the functions
get_dialog_info(), fetch_dlg_info() and $dlg_val() only look
for variables in the column vars.</div>
<div><br>
</div>
<div>Can anyone see other type of solution that does not involve
storing/fetching dialog variables? I could take on that.</div>
<div><br>
</div>
<div>I'd really appreciate any help on this.</div>
<div><br>
</div>
</div>
<div>
This is my cfg file:
<div><br>
</div>
<div>...</div>
<div>
<div>modparam("dialog", "db_url",
"postgres://opensips:opensips@opensips_db_host:5432/opensips")</div>
<div>modparam("dialog", "db_mode", 1)</div>
<div>modparam("dialog", "db_flush_vals_profiles", 1)</div>
</div>
<div>...</div>
<div>
<div>route { </div>
<div>...</div>
<div><span style="white-space:pre-wrap"> </span>if(is_method("INVITE"))
{</div>
<div><span style="white-space:pre-wrap"> </span>create_dialog();</div>
<div><span style="white-space:pre-wrap"> </span>store_dlg_value("caller_tag",
"$ft");</div>
<div>
<span style="white-space:pre-wrap"> </span>xlog("L_INFO","Storing
caller_tag: $ft");</div>
<div><span style="white-space:pre-wrap"> </span>store_dlg_value("caller_contact",
"$ct.fields(uri)");</div>
<div><span style="white-space:pre-wrap"> </span>xlog("L_INFO","Storing
caller_contact: $ct.fields(uri)");</div>
<div><span style="white-space:pre-wrap"> </span>store_dlg_value("call_id",
"$ci");</div>
<div><span style="white-space:pre-wrap"> </span>xlog("L_INFO","Storing
call_id: $ci");</div>
<div> route(1);</div>
<div> }</div>
</div>
<div>...</div>
<div>
<div>if (has_totag()) {</div>
<div><span style="white-space:pre-wrap"> </span>#
sequential request withing a dialog should</div>
<div><span style="white-space:pre-wrap"> </span>#
take the path determined by record-routing</div>
<div><span style="white-space:pre-wrap"> </span>if
(loose_route()) {</div>
<div><br>
</div>
<div> $var(caller_tag) =
$dlg_val(caller_tag);</div>
<div> xlog("L_INFO","trying dlg_val(),
caller_tag: $var(caller_tag)\n");</div>
<div><br>
</div>
<div> if ($ft == $var(caller_tag)) {</div>
<div> $var(callee_contact) =
$dlg_val(callee_contact);</div>
<div> xlog("L_INFO"," trying dlg_val(),
callee_contact: $var(callee_contact)\n");</div>
<div> $ru = $var(callee_contact);</div>
<div> } else {</div>
<div> $var(caller_contact) =
$dlg_val(caller_contact);</div>
<div> xlog("L_INFO"," trying dlg_val(),
caller_contact: $var(caller_contact)\n");</div>
<div> $ru = $var(caller_contact);</div>
<div> }</div>
<div> </div>
<div><span style="white-space:pre-wrap"> </span>} </div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div> record_route();</div>
<div> if (!t_relay()) {</div>
<div> send_reply("500","Internal Error");</div>
<div> };</div>
<div> exit;</div>
<div>}</div>
<div>...</div>
<div>route[1] {</div>
<div><span style="white-space:pre-wrap"> </span>#
for INVITEs enable some additional helper routes</div>
<div><span style="white-space:pre-wrap"> </span>if
(is_method("INVITE")) {</div>
<div><span style="white-space:pre-wrap"> </span></div>
<div><span style="white-space:pre-wrap"> </span>
$rd="<a href="http://opensips2.domain.com" target="_blank">opensips2.domain.com</a>";</div>
<div> $rp="5060";<span style="white-space:pre-wrap"> </span></div>
<div><br>
</div>
<div> # Change Contact header</div>
<div> if
(subst('/^Contact\s*:\s*("[^"]*")?\s*<?sip:(([^@]*)@)?([^;>]*)((;[^;>]*)*)>?(.*)/Contact:
<<a href="mailto:sip%3Aplain@my.domain.com" target="_blank">sip:plain@my.domain.com</a>\5>\7/ig'))
{</div>
<div> xlog("L_DBG","CONTACT was modified");</div>
<div> }</div>
<div><br>
</div>
<div><span style="white-space:pre-wrap"> </span>
t_on_reply("2");</div>
<div><span style="white-space:pre-wrap"> </span>}</div>
<div><br>
</div>
<div>}</div>
<div>...</div>
<div>onreply_route[2] {</div>
<div><br>
</div>
<div> if(is_present_hf("Contact")) {</div>
<div>
xlog("L_INFO"," Storing callee_contact:
$ct.fields(uri)");</div>
<div> store_dlg_value("callee_contact",
"$ct.fields(uri)");</div>
<div> }</div>
<div><br>
</div>
<div> if
(subst('/^Contact\s*:\s*("[^"]*")?\s*<?sip:([^@]*)@[^;>]*((;[^;>]*)*)>?(.*)/Contact:
<sip:\<a href="mailto:2@my.domain.com" target="_blank">2@my.domain.com</a>\3>\5/ig'))
{</div>
<div> xlog("L_DBG","CONTACT was modified");</div>
<div> } </div>
<div>}</div>
</div>
<div>
<div>...</div>
</div>
</div>
<div><br>
</div>
<br>
<fieldset></fieldset>
<br>
</div></div><pre>_______________________________________________
Users mailing list
<a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a>
<a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a>
</pre>
</blockquote>
</div>
<br>_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.opensips.org">Users@lists.opensips.org</a><br>
<a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
<br></blockquote></div><br></div>