I am experiencing an issue with server side call forward always which I didn’t see before but I now believe has always existed. Call forward always has been working. 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 (non-BLA setup) 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
 
 
 
Senior Network Engineer,
Information Systems and Computing
Networking and Telecommunications , Suite 221A /6228
University of Pennsylvania
Voice:215-573-8396
FAX:215-898-9348