[OpenSIPS-Users] multi-leg accounting in case of redirect

Bogdan-Andrei Iancu bogdan at voice-system.ro
Tue Aug 19 14:19:05 CEST 2008


Hi Ruchir,

I see in failure route you are using route[1] to do the job if a 
redirect happens. How exactly are you populating in the second set of 
caller/callee in route[1] ?

Regards,
Bogdan

Ruchir wrote:
> Here it is. route[1] is relay route.
>
>     failure_route[1]
>     {
>         xlog("------- failure_route[1] ----- \n ");
>         t_on_branch("1");
>
>         if(t_check_status("302"))
>         {
>             xlog("------- t_check_status(302) ----- \n ");
>            
>             get_redirects("4:1","Redirected");
>             route(1);
>         }   
>
>         if( t_check_status("486") && isbflagset(17))
>         {
>             xlog("------- t_check_status(486) -- isflagset(17) -----
>     \n ");
>                     end_media_session();
>             #resetbflag(6);
>             append_hf("SRC-USER: $rU\r\n");
>             if(avp_pushto("$ruri","$avp(s:cfwdbusy)"))
>             {
>                 append_hf("SRC-CALL-TYPE: cfwdbusy\r\n");
>                 append_hf("CFWD: YES\r\n");
>                 avp_delete("$avp(s:cfwdbusy)");
>                 resetbflag(17);
>                 append_branch();
>                 append_hf("PREV_STATUS: $T_reply_code\r\n");
>                 #route(5);
>                 $avp(i:120) = $avp(s:inv_timeout);
>                 route(1);
>                 exit;
>             }
>         }   
>           
>         if( t_check_status("408") && isbflagset(18))
>         {
>             xlog("------- t_check_status(408) -- isflagset(18) -----
>     \n ");
>
>                     end_media_session();
>             #resetbflag(6);
>             append_hf("SRC-USER: $rU\r\n");
>
>                     if(avp_pushto("$ruri","$avp(s:cfwdnoanswer)"))
>                     {
>                 append_hf("SRC-CALL-TYPE: cfwdnoanswer\r\n");
>                 append_hf("CFWD: YES\r\n");
>                 avp_delete("$avp(s:cfwdnoanswer)");
>                             resetbflag(18);
>                             append_branch();
>                 append_hf("PREV_STATUS: $T_reply_code\r\n");
>                 route(5);
>                 $avp(i:120) = $avp(s:inv_timeout);
>                 route(1);
>                 exit;
>
>                     }
>                     else if(isbflagset(4))
>             {
>                 xlog("------- t_check_status(408) -- Voicemail -----
>     \n ");
>                
>     if(!t_write_unix("/tmp/sems_sock","voicemail/voicemail_headers"))
>                     {
>                         xlog("----------------- Error--- not
>     communicating----------- \n ");
>                         exit;
>                     }
>                 exit;
>             }
>             }
>
>      
>
>     }
>
>
> On Mon, Aug 11, 2008 at 2:07 AM, Bogdan-Andrei Iancu 
> <bogdan at voice-system.ro <mailto:bogdan at voice-system.ro>> wrote:
>
>     Could you post your complete failure route (if not a secret;) ) ?
>
>     Regards,
>     Bogdan
>
>
>     Ruchir wrote:
>
>         Yes. I've used uac_redirect module and I'm using
>          get_redirects function to load the contacts to redirect to.
>
>         On Sun, Aug 10, 2008 at 4:02 PM, Bogdan-Andrei Iancu
>         <bogdan at voice-system.ro <mailto:bogdan at voice-system.ro>
>         <mailto:bogdan at voice-system.ro
>         <mailto:bogdan at voice-system.ro>>> wrote:
>
>            Hi Ruchir,
>
>            Are you using uac_redirect module to process the 3xx replies on
>            server?
>
>            Regards,
>            Bogdan
>
>            Ruchir wrote:
>
>                Yes. I've set unconditional forwarding in linksys pap2.
>         So it
>                sends "302 temporarily moved".
>
>                On Sat, Aug 9, 2008 at 4:36 PM, Bogdan-Andrei Iancu
>                <bogdan at voice-system.ro <mailto:bogdan at voice-system.ro>
>         <mailto:bogdan at voice-system.ro <mailto:bogdan at voice-system.ro>>
>                <mailto:bogdan at voice-system.ro
>         <mailto:bogdan at voice-system.ro>
>                <mailto:bogdan at voice-system.ro
>         <mailto:bogdan at voice-system.ro>>>> wrote:
>
>                   Hi Ruchir,
>
>                   The redirect on the phone is done via the 3xx replies?
>
>                   Regards,
>                   Bogdan
>
>                   Ruchir wrote:
>
>                       I've set avp and radius_extra param properly. If I
>                handle call
>                       forwarding from server side, everything works
>         fine. I
>                get leg
>                       source, destination, forward reason, etc.
>         perfectly. The
>                       problem is there only when I do call forwarding
>         from phone.
>
>                       On Fri, Aug 8, 2008 at 8:08 PM, Pablo Hernan Saro
>                       <pablosaro at gmail.com
>         <mailto:pablosaro at gmail.com> <mailto:pablosaro at gmail.com
>         <mailto:pablosaro at gmail.com>>
>                <mailto:pablosaro at gmail.com
>         <mailto:pablosaro at gmail.com> <mailto:pablosaro at gmail.com
>         <mailto:pablosaro at gmail.com>>>
>                       <mailto:pablosaro at gmail.com
>         <mailto:pablosaro at gmail.com>
>                <mailto:pablosaro at gmail.com
>         <mailto:pablosaro at gmail.com>> <mailto:pablosaro at gmail.com
>         <mailto:pablosaro at gmail.com>
>                <mailto:pablosaro at gmail.com
>         <mailto:pablosaro at gmail.com>>>>> wrote:
>
>                          I believe that it's not about how OpenSER or
>         OpenSIPS
>                       implements
>                          multi-leg accounting, it's about how you do.
>                          Particularly how you set up two important
>         parameters for
>                       the acc
>                          module: multi_leg_info and db_extra. In my
>         case, I
>                set up
>                       one avp
>                          for source leg, another for destination leg
>         and two avps
>                       for extra
>                          information: the state of the call and a
>                classification of
>                       the dst.
>                          The "state of the call", for me, means when
>         it's a
>                call, a
>                       fw or
>                          whatever; while the "classification of the dst"
>                means if dst is
>                          national, long distance, international.
>                          So, you have to set up avps as the
>         information you
>                need and
>                       make
>                          sure to set it to proper values before the
>         acc module
>                       writes the
>                          row in your db.
>                          BTW, take care of using Diversion header...
>         It's a draft
>                       from 2004
>                          and it's expired. Not all UAC/UAS has this
>         implemented.
>                          I hope it helps.
>                          Cheers
>
>                          Pablo
>
>
>                          On Fri, Aug 8, 2008 at 4:05 AM, Ruchir
>                       <ruchir.lists at gmail.com
>         <mailto:ruchir.lists at gmail.com> <mailto:ruchir.lists at gmail.com
>         <mailto:ruchir.lists at gmail.com>>
>                <mailto:ruchir.lists at gmail.com
>         <mailto:ruchir.lists at gmail.com> <mailto:ruchir.lists at gmail.com
>         <mailto:ruchir.lists at gmail.com>>>
>                          <mailto:ruchir.lists at gmail.com
>         <mailto:ruchir.lists at gmail.com>
>                <mailto:ruchir.lists at gmail.com
>         <mailto:ruchir.lists at gmail.com>>
>                       <mailto:ruchir.lists at gmail.com
>         <mailto:ruchir.lists at gmail.com>
>                <mailto:ruchir.lists at gmail.com
>         <mailto:ruchir.lists at gmail.com>>>>> wrote:
>
>                              I'm using uac_redirect module to handle
>         redirect
>                from
>                       UA and
>                              doing accounting from openser. Redirect works
>                fine so
>                       as cdr
>                              but I'm not able to store CDR records for
>         multi-leg
>                       accounting
>                              properly.
>
>                              I have set onreply avp by
>
>                                  modparam("tm", "onreply_avp_mode", 1)
>
>
>                              I've set following in onreply route
>
>
>                                  if($hdr(Diversion)!=null)
>                                  {
>                                  avp_delete("$avp(s:src_call_type)");
>                                  $avp(s:src_call_type) = $hdr(Diversion);
>
>                                  xlog("Client call forwarding to
>                       $avp(s:src_user_reply)\n ");
>
>                                  avp_subst("$avp(s:src_user_reply)",
>                                  "/(.*)<sip:(.*)@(.*)>;reason=(.*)/\4/");
>
>
>
>                                  switch($avp(s:src_call_type))
>                                  {
>                                  case "unconditional":
>                                  $avp(s:call_type) = "cwfd";
>                                  break;
>                                  case "user-busy":
>                                  $avp(s:call_type) = "cwfdbusy";
>                                  break;
>                                  case "no-answer":
>                                  $avp(s:call_type) = "cwfdnoanswer";
>                                  break;
>                                  default:
>                                  log("no forwarding\n");
>                                  }
>
>                                  }
>
>                              But the problem is that records are not
>                generated the
>                       way we
>                              expect and the way it works in normal
>         forwarding
>                using
>                              usr_preferences. For example call is
>         forwarded
>                from one
>                       user
>                              to another, the first leg of the call
>         should be
>                logged
>                       as it
>                              should normally be($fU in leg source, $rU
>         in leg
>                       destination &
>                              calltype=call) and in next cdr log, it should
>                log with
>                              forwarding details(Forwarding user in leg
>                source, forwarded
>                              user in leg destination & calltype=cfwd).
>         But it
>                actually
>                              generates 5 records(1 failed invite, 2 ok
>                invites & 2 byes,
>                              instead of 2 invites & 2 byes) of the
>         call. Also
>                as we set
>                              calltype and leg source in onreply route,
>         it'll
>                store that
>                              date for the first leg of the CDR which
>         should
>                not happen.
>
>                              Is the same limitation is there in
>         OpenSIPS or
>                it has
>                       better
>                              uac_redirect module?
>
>                              I'll consider switching to OpenSIPS if it
>         solves
>                this
>                       issue.
>




More information about the Users mailing list