[pjsip] Making T1, T2, etc. configurable without recompile

Benny Prijono bennylp at pjsip.org
Tue Nov 20 21:43:54 EST 2007


Yes, mee too! ;-)

Christian, thanks for bringing up this issue. I've been having this 
ticket (http://www.pjsip.org/trac/ticket/7) for long time, but 
haven't had chance to do something about it. And thanks too for the 
idea.

I have been thinking about different way to do this though. I'm 
thinking of storing these compile time settings into a struct. This 
struct instance values would be initialized to their compile time 
value.

Then export the instance of this struct via a public API. Both 
application and pjsip can access each individual field by using 
something like "pjsip_cfg()->t1", and "pjsip_cfg()->t1 = 1000" to 
change the setting. Of course if application wants to override the 
default settings, it can only do that before creating the pjsip 
endpoint and modules.

Something like below:

----

//
// In sip_config.h, perhaps..
//
typedef struct pjsip_cfg_t
{
    /* Transaction settings: */
    struct {
      /** Maximum number of transactions */
      unsigned max_count;

      /* Timeout values */
      unsigned t1;   /**< T1 timeout, in msec */
      unsigned t2;   /**< .. fill up with doxygen comment .. */
      unsigned t4;
      unsigned td;
    } tsx;

    /* Dialog layer settings .. */

} pjsip_cfg_t;

/**
  * Get pjsip configuration instance. Application may modify the
  * settings before creating the SIP endpoint and modules.
  */
PJ_DECL(pjsip_cfg_t*) pjsip_cfg(void);

----

//
// In sip_config.c (new file), perhaps..
//

/* pjsip configuration instance, initialized with default values */
static struct pjsip_cfg_t =
{
    /* Transaction settings */
    {
       PJSIP_MAX_TSX_COUNT,
       PJSIP_T1_TIMEOUT,
       PJSIP_T2_TIMEOUT,
       PJSIP_T4_TIMEOUT,
       PJSIP_TD_TIMEOUT
    }
} sip_cfg;


PJ_DEF(pjsip_cfg_t*) pjsip_cfg(void)
{
    return &sip_cfg;
}

What do yo think?

regards,
  -benny

Alexander Agranovsky wrote:
> Hear, hear.
> 
> I'd appreciate this as well ;-)
> 
> - Alex
> 
> On Nov 20, 2007, at 11:22 AM, Christian Grigis wrote:
> 
>> Hello Benny,
>>
>> Pjsip, in accordance with the RFC, uses some values to determine timer
>> timeout values in transaction processing, namely T1, T2, T4 and TD.
>> Currently these values are #defines (in
>> ./pjsip/include/pjsip/sip_config.h) and consequently determined at
>> compile-time.
>>
>> We would like to be able to have the application change the default
>> values at runtime, during the initialization of the stack, without
>> requiring a recompilation of the SIP stack.
>>
>> We are perfectly willing to make the necessary changes, but are
>> wondering if you had any advice as to how these changes should be  
>> made.
>>
>> After some examination, it appears the constant values are used  
>> only in
>> the following files:
>>
>> ./pjsip/include/pjsip/sip_config.h
>> ./pjsip/src/pjsip/sip_transaction.c
>> ./pjsip/src/test-pjsip/tsx_uac_test.c
>> ./pjsip/src/test-pjsip/tsx_uas_test.c
>> ./pjsip/src/pjsip-ua/sip_100rel.c
>>
>> The first thing that comes to mind is to provide a function to  
>> override
>> the default values, and another function (or rather, one per value),
>> that returns either the default value if it has not been  
>> overridden, or
>> the override value. These last functions would then be used  
>> wherever the
>> constants were previously used.
>>
>> Something like:
>>
>> * a set of 4 values to be somehow passed to
>>   pjsip_tsx_layer_init_module(), indicating overrides for T1, T2,  
>> T4 and
>>   TD (0 meaning no override), stored in static variables
>>   pjsip_t1_timeout, pjsip_t2_timeout, pjsip_t4_timeout and
>>   pjsip_td_timeout;
>>
>> * 4 functions similar to:
>>
>> 	unsigned int pjsip_get_t1_timeout()
>> 	{
>> 		if (pjsip_t1_timeout > 0) {
>> 			return pjsip_t1_timeout;
>> 		} else {
>> 			return PJSIP_T1_TIMEOUT;
>> 		}
>> 	}
>>
>>
>> What do you think?
>>
>> Thanks and best regards,
>>
>> -Christian
>> -- 
>> Christian Grigis
>> Senior Software Engineer
>>
>> eyeP Media S.A. -- http://www.eyepmedia.com/






More information about the pjsip mailing list