[commit] r13245 - in freeswitch/trunk: conf/sip_profiles src/mod/endpoints/mod_sofia
Author: mrene Date: Wed May 6 13:12:44 2009 New Revision: 13245 Log: Add sofia profile params to fine-tune timers Modified: freeswitch/trunk/conf/sip_profiles/internal.xml freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Modified: freeswitch/trunk/conf/sip_profiles/internal.xml ============================================================================== --- freeswitch/trunk/conf/sip_profiles/internal.xml (original) +++ freeswitch/trunk/conf/sip_profiles/internal.xml Wed May 6 13:12:44 2009 @@ -207,6 +207,34 @@ <!--<param name="disable-srv" value="false" />--> <!--<param name="disable-naptr" value="false" />--> + <!-- The following can be used to fine-tune timers within sofia's transport layer + Those settings are for advanced users and can safely be left as-is --> + + <!-- Initial retransmission interval (in milliseconds). + Set the T1 retransmission interval used by the SIP transaction engine. + The T1 is the initial duration used by request retransmission timers A and E (UDP) as well as response retransmission timer G. --> + <!-- <param name="timer-T1" value="500" /> --> + + <!-- Transaction timeout (defaults to T1 * 64). + Set the T1x64 timeout value used by the SIP transaction engine. + The T1x64 is duration used for timers B, F, H, and J (UDP) by the SIP transaction engine. + The timeout value T1x64 can be adjusted separately from the initial retransmission interval T1. --> + <!-- <param name="timer-T1X64" value="32000" /> --> + + + <!-- Maximum retransmission interval (in milliseconds). + Set the maximum retransmission interval used by the SIP transaction engine. + The T2 is the maximum duration used for the timers E (UDP) and G by the SIP transaction engine. + Note that the timer A is not capped by T2. Retransmission interval of INVITE requests grows exponentially + until the timer B fires. --> + <!-- <param name="timer-T2" value="4000" /> --> + + <!-- + Transaction lifetime (in milliseconds). + Set the lifetime for completed transactions used by the SIP transaction engine. + A completed transaction is kept around for the duration of T4 in order to catch late responses. + The T4 is the maximum duration for the messages to stay in the network and the duration of SIP timer K. --> + <!-- <param name="timer-T4" value="4000" /> --> </settings> </profile> Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h Wed May 6 13:12:44 2009 @@ -479,6 +479,10 @@ uint32_t ob_calls; uint32_t ib_failed_calls; uint32_t ob_failed_calls; + uint32_t timer_t1; + uint32_t timer_t1x64; + uint32_t timer_t2; + uint32_t timer_t4; }; struct private_object { Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Wed May 6 13:12:44 2009 @@ -775,6 +775,10 @@ NTATAG_DEFAULT_PROXY(profile->outbound_proxy), NTATAG_SERVER_RPORT(profile->rport_level), TPTAG_LOG(sofia_test_flag(profile, TFLAG_TPORT_LOG)), + TAG_IF(profile->timer_t1, NTATAG_SIP_T1(profile->timer_t1)), + TAG_IF(profile->timer_t1x64, NTATAG_SIP_T1X64(profile->timer_t1x64)), + TAG_IF(profile->timer_t2, NTATAG_SIP_T2(profile->timer_t2)), + TAG_IF(profile->timer_t4, NTATAG_SIP_T4(profile->timer_t4)), TAG_END()); /* Last tag should always finish the sequence */ if (!profile->nua) { @@ -1780,6 +1784,38 @@ profile->dtmf_duration = SWITCH_DEFAULT_DTMF_DURATION; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Duration out of bounds, using default of %d!\n", SWITCH_DEFAULT_DTMF_DURATION); } + } else if (!strcasecmp(var, "timer-T1")) { + int v = atoi(val); + if (v > 0) { + profile->timer_t1 = v; + } else { + profile->timer_t1 = 500; + } + nua_set_params(profile->nua, NTATAG_SIP_T1(profile->timer_t1), TAG_END()); + } else if (!strcasecmp(var, "timer-T1X64")) { + int v = atoi(val); + if (v > 0) { + profile->timer_t1x64 = v; + } else { + profile->timer_t1x64 = 32000; + } + nua_set_params(profile->nua, NTATAG_SIP_T1X64(profile->timer_t1x64), TAG_END()); + } else if (!strcasecmp(var, "timer-T2")) { + int v = atoi(val); + if (v > 0) { + profile->timer_t2 = v; + } else { + profile->timer_t2 = 4000; + } + nua_set_params(profile->nua, NTATAG_SIP_T2(profile->timer_t2), TAG_END()); + } else if (!strcasecmp(var, "timer-T4")) { + int v = atoi(val); + if (v > 0) { + profile->timer_t4 = v; + } else { + profile->timer_t4 = 4000; + } + nua_set_params(profile->nua, NTATAG_SIP_T4(profile->timer_t4), TAG_END()); } } } @@ -2408,6 +2444,34 @@ } else { profile->tls_version = 0; } + } else if (!strcasecmp(var, "timer-T1")) { + int v = atoi(val); + if (v > 0) { + profile->timer_t1 = v; + } else { + profile->timer_t1 = 500; + } + } else if (!strcasecmp(var, "timer-T1X64")) { + int v = atoi(val); + if (v > 0) { + profile->timer_t1x64 = v; + } else { + profile->timer_t1x64 = 32000; + } + } else if (!strcasecmp(var, "timer-T2")) { + int v = atoi(val); + if (v > 0) { + profile->timer_t2 = v; + } else { + profile->timer_t2 = 4000; + } + } else if (!strcasecmp(var, "timer-T4")) { + int v = atoi(val); + if (v > 0) { + profile->timer_t4 = v; + } else { + profile->timer_t4 = 4000; + } } }
participants (1)
-
FreeSWITCH SVN