Benny, That looks good to me! It is generic, and allows for easy addition of more values with little effort. Should I go ahead and make the changes, and then send you a diff? Best regards, -Christian On Wed, Nov 21, 2007 at 02:43:54AM +0000, Benny Prijono wrote: > 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/ > > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip at lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org