]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Tue Mar 3 07:47:19 CST 2009 Pekka Pessi <first.last@nokia.com>
authorMichael Jerris <mike@jerris.com>
Tue, 3 Mar 2009 17:26:13 +0000 (17:26 +0000)
committerMichael Jerris <mike@jerris.com>
Tue, 3 Mar 2009 17:26:13 +0000 (17:26 +0000)
  * nta: calculate timer D correctly
  Ignore-this: f43d9dcc11fb6a19c3674a6da35ee7ec

  Timer D is either 32 seconds or 64 times T1, whichever is larger.

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12387 d0543943-73ff-0310-b7d9-9358b9ac24b2

libs/sofia-sip/.update
libs/sofia-sip/libsofia-sip-ua/nta/nta.c

index f06343b3bf738025e335c02f945146b17140e461..2b50f12acc587244ec05bb3dce5c4e6f89a56072 100644 (file)
@@ -1 +1 @@
-Tue Mar  3 11:25:14 CST 2009
+Tue Mar  3 11:25:58 CST 2009
index b1ae563bbbb5f25bea3c4fe5ecc33d98e352fa16..9539e618b508342c2a6d8dfb1bd92c01a26616fd 100644 (file)
@@ -860,7 +860,7 @@ nta_agent_t *nta_agent_create(su_root_t *root,
   ta_start(ta, tag, value);
 
   if ((agent = su_home_new(sizeof(*agent)))) {
-    unsigned timer_c;
+    unsigned timer_c = 0, timer_d = 32000;
 
     agent->sa_root = root;
     agent->sa_callback = callback;
@@ -925,6 +925,11 @@ nta_agent_t *nta_agent_create(su_root_t *root,
 
     agent->sa_out.re_t1 = &agent->sa_out.re_list;
 
+    if (agent->sa_use_timer_c || !agent->sa_is_a_uas)
+      timer_c = agent->sa_timer_c;
+    if (timer_d < agent->sa_t1x64)
+      timer_d = agent->sa_t1x64;
+
     outgoing_queue_init(agent->sa_out.delayed, 0);
     outgoing_queue_init(agent->sa_out.resolving, 0);
     outgoing_queue_init(agent->sa_out.trying, agent->sa_t1x64); /* F */
@@ -932,10 +937,8 @@ nta_agent_t *nta_agent_create(su_root_t *root,
     outgoing_queue_init(agent->sa_out.terminated, 0);
     /* Special queues (states) for outgoing INVITE transactions */
     outgoing_queue_init(agent->sa_out.inv_calling, agent->sa_t1x64); /* B */
-    timer_c = (agent->sa_use_timer_c || !agent->sa_is_a_uas)
-      ? agent->sa_timer_c : 0;
     outgoing_queue_init(agent->sa_out.inv_proceeding, timer_c); /* C */
-    outgoing_queue_init(agent->sa_out.inv_completed, 32000); /* Timer D */
+    outgoing_queue_init(agent->sa_out.inv_completed, timer_d); /* D */
 
     if (leg_htable_resize(agent->sa_home, agent->sa_dialogs, 0) < 0 ||
        leg_htable_resize(agent->sa_home, agent->sa_defaults, 0) < 0 ||
@@ -1446,6 +1449,7 @@ int agent_set_params(nta_agent_t *agent, tagi_t *tags)
   unsigned sip_t4     = agent->sa_t4;
   unsigned sip_t1x64  = agent->sa_t1x64;
   unsigned timer_c    = agent->sa_timer_c;
+  unsigned timer_d    = 32000;
   unsigned graylist   = agent->sa_graylist;
   unsigned blacklist  = agent->sa_blacklist;
   int ua              = agent->sa_is_a_uas;
@@ -1646,6 +1650,9 @@ int agent_set_params(nta_agent_t *agent, tagi_t *tags)
     agent->sa_timer_c = timer_c;
     outgoing_queue_adjust(agent, agent->sa_out.inv_proceeding, timer_c);
   }
+  if (timer_d < sip_t1x64)
+    timer_d = sip_t1x64;
+  outgoing_queue_adjust(agent, agent->sa_out.inv_completed, timer_d);
 
   if (graylist > 24 * 60 * 60)
     graylist = 24 * 60 * 60;