No subject


Wed May 28 05:09:41 CEST 2008


In one of the “weird” scenarios, I’ve seen openser parallel fork out the Invite(s) to all of the contacts in the 300 rather than building different branches.  (this shouldn’t happen)
In another one of the “weird” scenarios, I’ve seen openser fail on the next_branches call in the failure route and push the 408 out instead.  I’m able to pull a trace for these calls and can see there multiple contacts in the 300, so I know there should still be additional branches...

Scenario 2:
Openser receives an Invite.  Openser calls rewritehostport(“1.1.1.1:5060”), arms failure route 3 and t_relays the message

failure_route[3]
{
        if (t_check_status("503") ||
            t_check_status("480") ||
            t_check_status("502") ||
            t_check_status("504") ||
            t_check_status("403") ||
            t_check_status("404") ||
            t_check_status("484") ||
            t_check_status("488") ||                 
            t_check_status("500") ||
            t_check_status("400") ||
            t_check_status("606") ||                  
            t_check_status("408"))
        {
                if(!next_branches())
                {
                      if((t_check_status("408")) && (t_local_replied("last")))
                      { 
                        xlog( "L_ERR", "Failure Route3: Status: Local $T_reply_code  Ran out of branches for callid $ci" );

                        # One last try for this call....
                        rewritehostport("3.4.5.6:5060");
                        append_branch();
                        t_on_failure("0");
                        t_on_branch("0");
                        route(2);   # simple t_relay
                        return;

                      }
                      else
                      {
                        xlog( "L_ERR", "Failure Route3: Status: Network $T_reply_code  Ran out of branches for callid $ci" );
                      }
                      return;
                }
                else
                {
                      t_on_branch("1");
                      t_on_failure("2");
                }
                route(2);   # simple t_relay
                return;
        }
}

Openser does not receive any provisional responses within 2 seconds and therefore falls into a failure route when the fr_timer expires.  This failure route calls next_branches (which should fail).  We then check if it was an internally generated 408, we build one last branch to try the call a last time.....However sometimes this comes up with additional branches and parallel forks out the invite to multiple Ips.  In this scenario I know there are no additional branches, so not sure how this is happening either.



Most of these problems seem to be related to a 300 with multiple routes in the contact and the fr_timer expiring.  I realize that I’ve not really given much to go on here, but I’m willing to help out in any way I can...even adding some additional debug into openser core and the TM module and running for a while with traffic.

Is it possible to describe or point me to documentation on the following:
    1.  What sort of information is stored in the fr_timer structure?  (A pointer referencing ???)  What files and functions should I be looking at in the TM module?
    2.  How are the destination sets stored in the above scenarios?  It looks to me like sometimes openser stores the destination set as an array, but some of the documentation mentions that serialize_branches stores the destination set in AVP(s).  Can you again point me to files and functions that would help in analyzing this code.


Thanks

Scott

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=743020&aid=1983626&group_id=139143



More information about the Devel mailing list