Hello.
I am having configuration issues with ser when dealing with users who
have voicemail and desire a timeout after a set number of rings, and those who
don’t have voicemail and desire a very long ring count. Here is the example:
Phone A has voicemail
Phone B does not have voicemail
Works:
Phone B calls A. A does not
answer. After a set period of time
(fr_inv_timer=24), the user is proxy’ed
to voicemail.
Doesn’t work:
Phone A calls B. B does not answer. After a set period of time, the proxy
responds with a 408 and the transaction is CANCELed .
The example above is a case when I just want to proxy the INVITE to a
user without setting a timer, stateless.
I would consider sending the original INVITE using forward()
for users without voicemail, but the parameters require a port and IP, of which
exists in ser.location and I may fork to multiple contacts
for the user.
In addition, when responding with a 408, how does the proxy
differentiate between a timed out INVITE (after a set of retries) and a
transactional timeout (that had a provisional response)?
Looking forward to the
Regards,
Chris
modparam("tm", "fr_timer", 12)
modparam("tm", "fr_inv_timer", 24)
modparam("tm", "wt_timer", 180)
route[7]
{
setflag(5);
if
( is_user_in("Request-URI",
"mail" ) )
{
t_on_failure("5"); /*_media_server_info_*/
}
else
{
log( "------------------------------------>route7
\n");
t_on_failure("1"); /*_media_server_info_*/
}
}
failure_route[5]
{
if ( is_user_in("Request-URI", "mail" )
&& ( t_check_status( "486" ) || t_check_status( "600" ) || t_check_status(
"408" ) ) )
{
rewritehostport("66.115.232.216:5060"); /*_media_server_info_*/
append_branch();
if(
t_check_status( "486" ) || t_check_status( "600" ) )
{
append_urihf("Diversion:
", " ; reason=user-busy \r\n");
}
else if( t_check_status(
"408" ) )
{
append_urihf("Diversion:
", " ; reason=unavailable \r\n");
}
append_hf("P-hint:
Forwarding to Voicemail Media Server\n");
t_relay();
}
else if ( is_user_in("Request-URI",
"mail" ) )
{
t_relay();
}
else if ( !is_user_in("Request-URI",
"mail" ) || t_check_status( "408"
) )
{
log(
"------------------------------------>failureroute5 conditional
\n");
t_on_failure("1");;
}
log(
"------------------------------------>failureroute5 \n");
break ;
}
failure_route[ 1 ]
{
if(
t_check_status( "408" ) || t_check_status( "400" ) )
{
log(
"------------------------------------>failureroute1 \n");
append_branch( );
t_on_failure("1");
}
t_relay();
break;
}