From d9fd161b037c2a0cb85843c30a74fd502db8bfbb Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Mon, 14 Apr 2008 19:20:12 +0000 Subject: [PATCH] add settings to disable timer and 100rel support by profile (MODENDP-102) git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@8114 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- conf/sip_profiles/default.xml | 2 ++ src/mod/endpoints/mod_sofia/mod_sofia.h | 4 +++- src/mod/endpoints/mod_sofia/sofia.c | 26 +++++++++++++++++++++++-- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/conf/sip_profiles/default.xml b/conf/sip_profiles/default.xml index 905b836ad8..5ea701ab10 100644 --- a/conf/sip_profiles/default.xml +++ b/conf/sip_profiles/default.xml @@ -34,6 +34,8 @@ + + diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index 20add57929..fe9b0c393c 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -138,7 +138,9 @@ typedef enum { PFLAG_SECURE = (1 << 15), PFLAG_BLIND_AUTH = (1 << 16), PFLAG_WORKER_RUNNING = (1 << 17), - PFLAG_UNREG_OPTIONS_FAIL = (1 << 18) + PFLAG_UNREG_OPTIONS_FAIL = (1 << 18), + PFLAG_DISABLE_TIMER = (1 << 19), + PFLAG_DISABLE_100REL = (1 << 20) } PFLAGS; typedef enum { diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 9eebc52ac4..e5040c2e2b 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -497,6 +497,9 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void sip_alias_node_t *node; switch_event_t *s_event; int tportlog = 0; + int use_100rel = !sofia_test_pflag(profile, PFLAG_DISABLE_100REL); + int use_timer = !sofia_test_pflag(profile, PFLAG_DISABLE_TIMER); + const char *supported = NULL; switch_mutex_lock(mod_sofia_globals.mutex); mod_sofia_globals.threads++; @@ -517,6 +520,16 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void tportlog = 1; } + if (use_100rel && use_timer) { + supported = "100rel, precondition, timer"; + } else if (use_100rel) { + supported = "100rel, precondition"; + } else if (use_timer) { + supported = "timer, precondition"; + } else { + supported = "precondition"; + } + profile->nua = nua_create(profile->s_root, /* Event loop */ sofia_event_callback, /* Callback for processing events */ profile, /* Additional data to pass to callback */ @@ -559,7 +572,7 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void TAG_IF((profile->pflags & PFLAG_PRESENCE), NUTAG_ALLOW_EVENTS("include-session-description")), TAG_IF((profile->pflags & PFLAG_PRESENCE), NUTAG_ALLOW_EVENTS("presence.winfo")), TAG_IF((profile->pflags & PFLAG_PRESENCE), NUTAG_ALLOW_EVENTS("message-summary")), - SIPTAG_SUPPORTED_STR("100rel, precondition, timer"), SIPTAG_USER_AGENT_STR(profile->user_agent), TAG_END()); + SIPTAG_SUPPORTED_STR(supported), SIPTAG_USER_AGENT_STR(profile->user_agent), TAG_END()); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Set params for %s\n", profile->name); @@ -579,7 +592,8 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void NUTAG_ALLOW("INFO"), TAG_IF((profile->pflags & PFLAG_PRESENCE), NUTAG_ALLOW("PUBLISH")), TAG_IF((profile->pflags & PFLAG_PRESENCE), NUTAG_ENABLEMESSAGE(1)), - SIPTAG_SUPPORTED_STR("100rel, precondition"), SIPTAG_USER_AGENT_STR(profile->user_agent), TAG_END()); + SIPTAG_SUPPORTED_STR(supported), + SIPTAG_USER_AGENT_STR(profile->user_agent), TAG_END()); } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "activated db for %s\n", profile->name); @@ -1223,6 +1237,14 @@ switch_status_t config_sofia(int reload, char *profile_name) if (switch_true(val)) { profile->pflags |= PFLAG_CHECKUSER; } + } else if (!strcasecmp(var, "enable-timer")) { + if (!switch_true(val)) { + profile->pflags |= PFLAG_DISABLE_TIMER; + } + } else if (!strcasecmp(var, "enable-100rel")) { + if (!switch_true(val)) { + profile->pflags |= PFLAG_DISABLE_100REL; + } } else if (!strcasecmp(var, "bitpacking")) { if (!strcasecmp(val, "aal2")) { profile->codec_flags = SWITCH_CODEC_FLAG_AAL2;