Hi Saul,
The endpoints send the Invite twice (Time 0.000 and Time 0.099), after
that The proxy (opensips) send back a 500 . It seems like the endpoints
consider timed out the first invite and it resend again.
My routing flow is:
1. Check if is an INVITE from a GW ( is_method("INVITE") && is_from_gw() )
2. do a "dp_translate"
3. route to "check_channels" block that is composed in this mode:
* Check the available channels , script idea taken from
http://www.opensips.org/Resources/DocsTutConcurrentCalls
* Call the "call_control()" functions as described in
call_cc.txt (attached)
4. call "topology_hidding()" function
5. engage_mediaproxy()
6. call do_routing, and add some helper routes (t_on_branch("2");
t_on_reply("2"); t_on_failure("2");) and call the t_relay() . The block
is attached in helper.txt file.
Thanks again for your time
Regards
Davide
On 02/22/2013 12:18 PM, Saúl Ibarra Corretgé wrote:
I analyzed the traces you sent and I'm seeing very weird things on the OnAnswer
set:
An endpoint sends an INVITE to the proxy, the proxy sends a 500 and the device
acknowledges it with an ACK. Yet the proxy seems to forward the INVITE anyway!
As you can see from the response on the BYE request (481) the proxy is confused
and so is CallControl.
Can you better describe how you are doing the routing and when do you call
call_control in your OpenSIPS script? (an overview, please don't attach a full
configuration file).
Regards,
--
Saúl Ibarra Corretgé
AG Projects
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
route[check_whs_channels]{
if ( !isflagset(30) ){
avp_db_load("$si" , "$avp(channels)");
get_profile_size("caller" , "sip:$avp(diverter-avp)", "$avp(calls)");
xlog("AVAIL CHANS: $avp(channels) IN USE: $avp(calls)");
if ( is_avp_set("$avp(channels)") ) {
if ( $avp(channels) > $avp(calls) ) {
xlog("--- MAX SESSION IS OK --");
$var(setprofile)=1;
}
else{
xlog("--- MAX SESSION REACHED ---");
send_reply("487" , "Channel limit exceeded\n");
exit;
}
}
else{
$var(setprofile)=0;
}
call_control();
switch ($retcode){
case 2:
#chiamata senza limiti
xlog("call with no limit");
send_reply("503","call with no limit not allowed");
exit;
break;
case 1:
xlog("--- CALL UNDER CALLCONTROL ---");
break;
case -1:
acc_aaa_request("402");
sl_send_reply("402", "Not enough credit");
exit;
break;
case -2:
#locked by call in progress
xlog("Call control: prepaid call locked by another call in
progress\n");
acc_aaa_request("403");
sl_send_reply("403", "Call locked by another call in
progress");
exit;
break;
default:
xlog("Call control internal server error");
acc_aaa_request("500");
sl_send_reply("500", "Internal server error");
exit;
}
if ( $var(setprofile) > 0 ) {
if(create_dialog("PpB")) {
xlog("************************* DIALOG CREATO CORRETTAMENTE
*****************************");
set_dlg_profile("caller","sip:$avp(diverter-avp)");
}
}
setflag(30);
}
}
route[helper_route]{
if (is_method("INVITE")) {
t_on_branch("2");
t_on_reply("2");
t_on_failure("2");
}
if (!t_relay()) {
send_reply("500","Internal Error");
};
xlog("--------- PACKET RELAYED ----------");
xlog("\n\n");
exit;
}
failure_route[2] {
if (t_was_cancelled()) {
xlog("transaction was cancelled");
exit;
}
if ( isflagset(10) ) {
if ( t_check_status("(404)|(503)|(500)|(502)") ){
if ( use_next_gw() ){
xlog("using next gw $ru\n");
$fs = $avp(gw_attrs);
t_on_failure("2");
t_relay();
exit;
}
else{
xlog("no more gateway")
send_reply("503" , "No more gw");
}
}
}
}
onreply_route[2] {
if ( isbflagset(6)){
xlog("fixing nated contact");
search_append('Contact:.*sip:[^>[:cntrl:]]*' , ';nat=yes');
fix_nated_contact();
}
exit;
}
branch_route[2] {
xlog("new branch at $ru\n");
}
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users