I am experiencing an issue with server side call forward always which I didn’t see before but I now believe has always existed. We recently switched phone manufacturers and now have the ability to offer bridged line appearance (BLA). Part of the process
for offering BLA is to have the phones register with the shared attribute for a given line. When we enable this attribute server side call forward always breaks. When I say break I mean that the call forwards OK but the intermediate IP phone now rings which
it never did before.
Using ngrep I see that even with the old config we had the same message flow:
Invite (from PSTN gateway)->
Invite received at proxy->
Proxy responds to gateway with 200 OK->
Proxy loads forward address from mysql usr_preferences table
Proxy rewrite R-URI to the forward address - avp_pushto("$ruri/username", "s:fwdaaddr");
Proxy send invite to this new address – but…
Proxy also sends invite to each contact address registered to the original AOR. This should not happen but I think it was
Always happening and the old phones just ignored it. Any thoughts on why and how to correct this behavior?
The ser.cfg snippets involved are included below:
Determine if call forward all is on:
# call forward always
if (avp_db_load("$ruri/username", "s:callfwdall")) {
if (avp_check("s:callfwdall","eq/y/i")) {
xlog("L_INFO", "\n[SER]: [%Tf] [%ci] User <%ru> has enabled Call Forward Always\n");
avp_write("$ruri", "$ocn"); - save original RURI for voicemail access if needed
if (avp_db_load("$ruri/username", "s:fwdaaddr")) {
avp_pushto("$ruri/username", "s:fwdaaddr");
rewritehostport("mydomain.edu");
xlog("L_INFO", "\n[SER]: [%Tf] [%ci] Calls for user <%tu> FORWARDING to <%ru>\n");
route(2);
break;
};
And call relaying is done by:
route[2] {
xlog("L_INFO", "\n[SER]: Route block #2 campus 5-digit extensions:\n\n");
xlog("L_INFO", "\n[SER]: [%Tf] [%ci] Route block #2: sending oncampus call from <%fu> to local gateway\n");
avp_write("65", "inv_timeout");
rewritehostport("my-gwy-ip-address:5060");
t_on_failure("1"); # for gwy failover
t_relay();
break;
};
Thanks,Steve