From b14c7d99d296b6e4de74581b1cdc1281b9f8255c Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Tue, 7 Sep 2010 09:36:15 +0000 Subject: Re #1120: - Added enum pjsua_sip_timer_use for session timer usage types, containing: inactive, optional, required, always - Replaced require_timer (boolean) with above enum in global and account config setting. - Updated pjsua app --use-timer option accordingly. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3305 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsua-lib/pjsua_acc.c | 2 +- pjsip/src/pjsua-lib/pjsua_call.c | 25 ++++++++++++++++++++----- pjsip/src/pjsua-lib/pjsua_core.c | 3 ++- 3 files changed, 23 insertions(+), 7 deletions(-) (limited to 'pjsip/src') diff --git a/pjsip/src/pjsua-lib/pjsua_acc.c b/pjsip/src/pjsua-lib/pjsua_acc.c index 5597dad1..fbda32c2 100644 --- a/pjsip/src/pjsua-lib/pjsua_acc.c +++ b/pjsip/src/pjsua-lib/pjsua_acc.c @@ -737,7 +737,7 @@ PJ_DEF(pj_status_t) pjsua_acc_modify( pjsua_acc_id acc_id, acc->cfg.require_100rel = cfg->require_100rel; /* Session timer */ - acc->cfg.require_timer = cfg->require_timer; + acc->cfg.use_timer = cfg->use_timer; acc->cfg.timer_setting = cfg->timer_setting; /* Transport and keep-alive */ diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c index ed5eb100..2caaee1e 100644 --- a/pjsip/src/pjsua-lib/pjsua_call.c +++ b/pjsip/src/pjsua-lib/pjsua_call.c @@ -493,11 +493,15 @@ PJ_DEF(pj_status_t) pjsua_call_make_call( pjsua_acc_id acc_id, /* Create the INVITE session: */ options |= PJSIP_INV_SUPPORT_100REL; - options |= PJSIP_INV_SUPPORT_TIMER; if (acc->cfg.require_100rel) options |= PJSIP_INV_REQUIRE_100REL; - if (acc->cfg.require_timer) - options |= PJSIP_INV_REQUIRE_TIMER; + if (acc->cfg.use_timer != PJSUA_SIP_TIMER_INACTIVE) { + options |= PJSIP_INV_SUPPORT_TIMER; + if (acc->cfg.use_timer == PJSUA_SIP_TIMER_REQUIRED) + options |= PJSIP_INV_REQUIRE_TIMER; + else if (acc->cfg.use_timer == PJSUA_SIP_TIMER_ALWAYS) + options |= PJSIP_INV_ALWAYS_USE_TIMER; + } status = pjsip_inv_create_uac( dlg, offer, options, &inv); if (status != PJ_SUCCESS) { @@ -839,10 +843,12 @@ pj_bool_t pjsua_call_on_incoming(pjsip_rx_data *rdata) options |= PJSIP_INV_SUPPORT_TIMER; if (pjsua_var.acc[acc_id].cfg.require_100rel) options |= PJSIP_INV_REQUIRE_100REL; - if (pjsua_var.acc[acc_id].cfg.require_timer) - options |= PJSIP_INV_REQUIRE_TIMER; if (pjsua_var.media_cfg.enable_ice) options |= PJSIP_INV_SUPPORT_ICE; + if (pjsua_var.acc[acc_id].cfg.use_timer == PJSUA_SIP_TIMER_REQUIRED) + options |= PJSIP_INV_REQUIRE_TIMER; + else if (pjsua_var.acc[acc_id].cfg.use_timer == PJSUA_SIP_TIMER_ALWAYS) + options |= PJSIP_INV_ALWAYS_USE_TIMER; status = pjsip_inv_verify_request2(rdata, &options, offer, answer, NULL, pjsua_var.endpt, &response); @@ -909,6 +915,15 @@ pj_bool_t pjsua_call_on_incoming(pjsip_rx_data *rdata) pjsip_auth_clt_set_prefs(&dlg->auth_sess, &pjsua_var.acc[acc_id].cfg.auth_pref); + /* Disable Session Timers if not prefered and the incoming INVITE request + * did not require it. + */ + if (pjsua_var.acc[acc_id].cfg.use_timer == PJSUA_SIP_TIMER_INACTIVE && + (options & PJSIP_INV_REQUIRE_TIMER) == 0) + { + options &= ~(PJSIP_INV_SUPPORT_TIMER); + } + /* Create invite session: */ status = pjsip_inv_create_uas( dlg, rdata, answer, options, &inv); if (status != PJ_SUCCESS) { diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c index 368996d1..a0e43b21 100644 --- a/pjsip/src/pjsua-lib/pjsua_core.c +++ b/pjsip/src/pjsua-lib/pjsua_core.c @@ -109,6 +109,7 @@ PJ_DEF(void) pjsua_config_default(pjsua_config *cfg) #endif cfg->hangup_forked_call = PJ_TRUE; + cfg->use_timer = PJSUA_SIP_TIMER_OPTIONAL; pjsip_timer_setting_default(&cfg->timer_setting); } @@ -171,7 +172,7 @@ PJ_DEF(void) pjsua_acc_config_default(pjsua_acc_config *cfg) cfg->transport_id = PJSUA_INVALID_ID; cfg->allow_contact_rewrite = PJ_TRUE; cfg->require_100rel = pjsua_var.ua_cfg.require_100rel; - cfg->require_timer = pjsua_var.ua_cfg.require_timer; + cfg->use_timer = pjsua_var.ua_cfg.use_timer; cfg->timer_setting = pjsua_var.ua_cfg.timer_setting; cfg->ka_interval = 15; cfg->ka_data = pj_str("\r\n"); -- cgit v1.2.3