Hi, Razvan! Thank you for the $DLG_dir pseudovariable, it worked!
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. 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? Thanks again! Mariana. On Wed, May 16, 2012 at 5:34 AM, Razvan Crainea <[email protected]> wrote: > Hi, Mariana! > > Can you check if the variables are properly flushed into the DB after > 200OK? > 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. > > [1] http://www.opensips.org/html/docs/modules/1.8.x/dialog.html#id295750 > > Regards, > > -- > Răzvan Crainea > OpenSIPS Developerhttp://www.opensips-solutions.com > > > On 05/15/2012 10:03 PM, Mariana Arduini wrote: > > Hello all, > > We need to perform some substitutions in the R-URI and Contact header in > order to have the following flow working as required: > > caller > opensips1 > opensips2 > callee > > 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: > > 1) active opensips is running listening on virtual ip say 10.0.0.1 > 2) caller sends INVITE to 10.0.0.1, which goes to active opensips > 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 > 4) caller sends BYE to 10.0.0.1, which goes to stand by opensips > > 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: > > 1) caller sends INVITE to opensips > 2) fifo command dlg_list_ctx is run and shows all of the variables I stored > 3) opensips is restarted and fifo command dlg_db_sync is run > 4) fifo command dlg_list_ctx is run again and shows only the dialog info, > not the variables in context > > I also > tried get_dialog_info("caller_tag","$var(caller_tag)","call_id","$ci"); and > $dlg_val(), but yet the variables are not found: > > 22232: DBG:dialog:fetch_dlg_value: looking for <caller_tag> > 22232: DBG:dialog:fetch_dlg_value: var NOT found! > 22232: ERROR:core:do_assign: no value in right expression > 22232: ERROR:core:do_assign: error at line: 134 > 22232: callid([email protected]) trying dlg_val(), caller_tag: 0 > 22232: DBG:core:comp_scriptvar: str 20 : uac1192.168.16.154 > 22232: DBG:dialog:fetch_dlg_value: looking for <caller_contact> > 22232: DBG:dialog:fetch_dlg_value: var NOT found! > 22232: ERROR:core:do_assign: no value in right expression > 22232: ERROR:core:do_assign: error at line: 146 > 22232: callid([email protected]) trying dlg_val(), caller_contact: 0 > 22232: DBG:tm:t_newtran: transaction on entrance=0xffffffffffffffff > 22232: DBG:core:parse_headers: flags=ffffffffffffffff > 22232: DBG:core:parse_headers: flags=78 > 22232: DBG:tm:t_lookup_request: start searching: hash=5130, isACK=0 > 22232: DBG:tm:matching_3261: RFC3261 transaction matching failed > 22232: DBG:tm:t_lookup_request: no transaction found > 22232: ERROR:core:parse_uri: uri too short: <0> (1) > 22232: ERROR:core:parse_sip_msg_uri: bad uri <0> > 22232: DBG:core:set_err_info: ec: 1, el: 3, ei: 'error parsing r-uri' > 22232: ERROR:tm:new_t: uri invalid > 22232: ERROR:tm:t_newtran: new_t failed > > 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. > > Can anyone see other type of solution that does not involve > storing/fetching dialog variables? I could take on that. > > I'd really appreciate any help on this. > > This is my cfg file: > > ... > modparam("dialog", "db_url", > "postgres://opensips:opensips@opensips_db_host:5432/opensips") > modparam("dialog", "db_mode", 1) > modparam("dialog", "db_flush_vals_profiles", 1) > ... > route { > ... > if(is_method("INVITE")) { > create_dialog(); > store_dlg_value("caller_tag", "$ft"); > xlog("L_INFO","Storing caller_tag: $ft"); > store_dlg_value("caller_contact", "$ct.fields(uri)"); > xlog("L_INFO","Storing caller_contact: $ct.fields(uri)"); > store_dlg_value("call_id", "$ci"); > xlog("L_INFO","Storing call_id: $ci"); > route(1); > } > ... > if (has_totag()) { > # sequential request withing a dialog should > # take the path determined by record-routing > if (loose_route()) { > > $var(caller_tag) = $dlg_val(caller_tag); > xlog("L_INFO","trying dlg_val(), caller_tag: > $var(caller_tag)\n"); > > if ($ft == $var(caller_tag)) { > $var(callee_contact) = $dlg_val(callee_contact); > xlog("L_INFO"," trying dlg_val(), callee_contact: > $var(callee_contact)\n"); > $ru = $var(callee_contact); > } else { > $var(caller_contact) = $dlg_val(caller_contact); > xlog("L_INFO"," trying dlg_val(), caller_contact: > $var(caller_contact)\n"); > $ru = $var(caller_contact); > } > > } > } > record_route(); > if (!t_relay()) { > send_reply("500","Internal Error"); > }; > exit; > } > ... > route[1] { > # for INVITEs enable some additional helper routes > if (is_method("INVITE")) { > $rd="opensips2.domain.com"; > $rp="5060"; > > # Change Contact header > if > (subst('/^Contact\s*:\s*("[^"]*")?\s*<?sip:(([^@]*)@)?([^;>]*)((;[^;>]*)*)>?(.*)/Contact: > <sip:[email protected]\5>\7/ig')) { > xlog("L_DBG","CONTACT was modified"); > } > > t_on_reply("2"); > } > > } > ... > onreply_route[2] { > > if(is_present_hf("Contact")) { > xlog("L_INFO"," Storing callee_contact: $ct.fields(uri)"); > store_dlg_value("callee_contact", "$ct.fields(uri)"); > } > > if > (subst('/^Contact\s*:\s*("[^"]*")?\s*<?sip:([^@]*)@[^;>]*((;[^;>]*)*)>?(.*)/Contact: > <sip:\[email protected]\3>\5/ig')) { > xlog("L_DBG","CONTACT was modified"); > } > } > ... > > > > _______________________________________________ > Users mailing > [email protected]http://lists.opensips.org/cgi-bin/mailman/listinfo/users > > > _______________________________________________ > Users mailing list > [email protected] > http://lists.opensips.org/cgi-bin/mailman/listinfo/users > >
_______________________________________________ Users mailing list [email protected] http://lists.opensips.org/cgi-bin/mailman/listinfo/users
