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 <meta http-equiv="content-type" content="text/html; charset=utf-8">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><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta http-equiv="content-type" content="text/html; charset=utf-8"><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">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">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><meta http-equiv="content-type" content="text/html; charset=utf-8"><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><meta http-equiv="content-type" content="text/html; charset=utf-8">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 class="Apple-tab-span" style="white-space:pre">        </span>if(is_method("INVITE")) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>create_dialog();</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>store_dlg_value("caller_tag", "$ft");</div><div>
<span class="Apple-tab-span" style="white-space:pre">                </span>xlog("L_INFO","Storing caller_tag: $ft");</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>store_dlg_value("caller_contact", "$ct.fields(uri)");</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>xlog("L_INFO","Storing caller_contact: $ct.fields(uri)");</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>store_dlg_value("call_id", "$ci");</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </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 class="Apple-tab-span" style="white-space:pre">                </span># sequential request withing a dialog should</div><div><span class="Apple-tab-span" style="white-space:pre">                </span># take the path determined by record-routing</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </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 class="Apple-tab-span" style="white-space:pre">                </span>} </div><div><span class="Apple-tab-span" style="white-space:pre">        </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 class="Apple-tab-span" style="white-space:pre">        </span># for INVITEs enable some additional helper routes</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (is_method("INVITE")) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span> $rd="<a href="http://opensips2.domain.com">opensips2.domain.com</a>";</div>
<div> $rp="5060";<span class="Apple-tab-span" style="white-space:pre">        </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">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 class="Apple-tab-span" style="white-space:pre">        </span> t_on_reply("2");</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </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">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>