fold reconfig_sofia into config_sofia so we don't have 2 difft config funcs
This commit is contained in:
parent
68e0b7e859
commit
b29412054a
|
@ -3636,7 +3636,7 @@ static switch_status_t cmd_profile(char **argv, int argc, switch_stream_handle_t
|
||||||
switch_xml_reload(&err);
|
switch_xml_reload(&err);
|
||||||
stream->write_function(stream, "Reload XML [%s]\n", err);
|
stream->write_function(stream, "Reload XML [%s]\n", err);
|
||||||
|
|
||||||
if (config_sofia(1, argv[0]) == SWITCH_STATUS_SUCCESS) {
|
if (config_sofia(SOFIA_CONFIG_RESCAN, argv[0]) == SWITCH_STATUS_SUCCESS) {
|
||||||
stream->write_function(stream, "%s started successfully\n", argv[0]);
|
stream->write_function(stream, "%s started successfully\n", argv[0]);
|
||||||
} else {
|
} else {
|
||||||
stream->write_function(stream, "Failure starting %s\n", argv[0]);
|
stream->write_function(stream, "Failure starting %s\n", argv[0]);
|
||||||
|
@ -3713,7 +3713,7 @@ static switch_status_t cmd_profile(char **argv, int argc, switch_stream_handle_t
|
||||||
switch_xml_reload(&err);
|
switch_xml_reload(&err);
|
||||||
stream->write_function(stream, "Reload XML [%s]\n", err);
|
stream->write_function(stream, "Reload XML [%s]\n", err);
|
||||||
|
|
||||||
if (reconfig_sofia(profile) == SWITCH_STATUS_SUCCESS) {
|
if (config_sofia(SOFIA_CONFIG_RESCAN, profile->name) == SWITCH_STATUS_SUCCESS) {
|
||||||
stream->write_function(stream, "+OK scan complete\n");
|
stream->write_function(stream, "+OK scan complete\n");
|
||||||
} else {
|
} else {
|
||||||
stream->write_function(stream, "-ERR cannot find config for profile %s\n", profile->name);
|
stream->write_function(stream, "-ERR cannot find config for profile %s\n", profile->name);
|
||||||
|
@ -5708,7 +5708,12 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_sofia_load)
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Starting initial message thread.\n");
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Starting initial message thread.\n");
|
||||||
sofia_msg_thread_start(0);
|
sofia_msg_thread_start(0);
|
||||||
|
|
||||||
if (config_sofia(0, NULL) != SWITCH_STATUS_SUCCESS) {
|
|
||||||
|
if (sofia_init() != SWITCH_STATUS_SUCCESS) {
|
||||||
|
return SWITCH_STATUS_GENERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config_sofia(SOFIA_CONFIG_LOAD, NULL) != SWITCH_STATUS_SUCCESS) {
|
||||||
mod_sofia_globals.running = 0;
|
mod_sofia_globals.running = 0;
|
||||||
return SWITCH_STATUS_GENERR;
|
return SWITCH_STATUS_GENERR;
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,6 +138,12 @@ typedef struct private_object private_object_t;
|
||||||
#include <sofia-sip/msg.h>
|
#include <sofia-sip/msg.h>
|
||||||
#include <sofia-sip/uniqueid.h>
|
#include <sofia-sip/uniqueid.h>
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
SOFIA_CONFIG_LOAD = 0,
|
||||||
|
SOFIA_CONFIG_RESCAN,
|
||||||
|
SOFIA_CONFIG_RESPAWN
|
||||||
|
} sofia_config_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
DTMF_2833,
|
DTMF_2833,
|
||||||
DTMF_INFO,
|
DTMF_INFO,
|
||||||
|
@ -966,7 +972,7 @@ void sofia_presence_event_handler(switch_event_t *event);
|
||||||
|
|
||||||
|
|
||||||
void sofia_presence_cancel(void);
|
void sofia_presence_cancel(void);
|
||||||
switch_status_t config_sofia(int reload, char *profile_name);
|
switch_status_t config_sofia(sofia_config_t reload, char *profile_name);
|
||||||
void sofia_reg_auth_challenge(sofia_profile_t *profile, nua_handle_t *nh, sofia_dispatch_event_t *de,
|
void sofia_reg_auth_challenge(sofia_profile_t *profile, nua_handle_t *nh, sofia_dispatch_event_t *de,
|
||||||
sofia_regtype_t regtype, const char *realm, int stale);
|
sofia_regtype_t regtype, const char *realm, int stale);
|
||||||
auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t const *authorization,
|
auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t const *authorization,
|
||||||
|
@ -1118,7 +1124,6 @@ switch_status_t sofia_glue_tech_choose_video_port(private_object_t *tech_pvt, in
|
||||||
switch_status_t sofia_glue_tech_set_video_codec(private_object_t *tech_pvt, int force);
|
switch_status_t sofia_glue_tech_set_video_codec(private_object_t *tech_pvt, int force);
|
||||||
char *sofia_glue_get_register_host(const char *uri);
|
char *sofia_glue_get_register_host(const char *uri);
|
||||||
const char *sofia_glue_strip_proto(const char *uri);
|
const char *sofia_glue_strip_proto(const char *uri);
|
||||||
switch_status_t reconfig_sofia(sofia_profile_t *profile);
|
|
||||||
void sofia_glue_del_gateway(sofia_gateway_t *gp);
|
void sofia_glue_del_gateway(sofia_gateway_t *gp);
|
||||||
void sofia_glue_gateway_list(sofia_profile_t *profile, switch_stream_handle_t *stream, int up);
|
void sofia_glue_gateway_list(sofia_profile_t *profile, switch_stream_handle_t *stream, int up);
|
||||||
void sofia_glue_del_every_gateway(sofia_profile_t *profile);
|
void sofia_glue_del_every_gateway(sofia_profile_t *profile);
|
||||||
|
@ -1199,6 +1204,7 @@ void crtp_init(switch_loadable_module_interface_t *module_interface);
|
||||||
int sofia_recover_callback(switch_core_session_t *session);
|
int sofia_recover_callback(switch_core_session_t *session);
|
||||||
void sofia_glue_set_name(private_object_t *tech_pvt, const char *channame);
|
void sofia_glue_set_name(private_object_t *tech_pvt, const char *channame);
|
||||||
private_object_t *sofia_glue_new_pvt(switch_core_session_t *session);
|
private_object_t *sofia_glue_new_pvt(switch_core_session_t *session);
|
||||||
|
switch_status_t sofia_init(void);
|
||||||
|
|
||||||
/* For Emacs:
|
/* For Emacs:
|
||||||
* Local Variables:
|
* Local Variables:
|
||||||
|
|
|
@ -2672,7 +2672,7 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Write unlock %s\n", profile->name);
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Write unlock %s\n", profile->name);
|
||||||
|
|
||||||
if (sofia_test_pflag(profile, PFLAG_RESPAWN)) {
|
if (sofia_test_pflag(profile, PFLAG_RESPAWN)) {
|
||||||
config_sofia(1, profile->name);
|
config_sofia(SOFIA_CONFIG_RESPAWN, profile->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
sofia_profile_destroy(profile);
|
sofia_profile_destroy(profile);
|
||||||
|
@ -3389,813 +3389,12 @@ static void config_sofia_profile_urls(sofia_profile_t * profile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch_status_t reconfig_sofia(sofia_profile_t *profile)
|
switch_status_t sofia_init(void)
|
||||||
{
|
{
|
||||||
switch_xml_t cfg, xml = NULL, xprofile, profiles, gateways_tag, domain_tag, domains_tag, aliases_tag, alias_tag, settings, param;
|
|
||||||
char *cf = "sofia.conf";
|
|
||||||
switch_event_t *params = NULL;
|
|
||||||
switch_status_t status = SWITCH_STATUS_FALSE;
|
|
||||||
|
|
||||||
switch_event_create(¶ms, SWITCH_EVENT_REQUEST_PARAMS);
|
|
||||||
switch_assert(params);
|
|
||||||
switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile", profile->name);
|
|
||||||
switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "reconfig", "true");
|
|
||||||
|
|
||||||
if (!(xml = switch_xml_open_cfg(cf, &cfg, params))) {
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", cf);
|
|
||||||
status = SWITCH_STATUS_FALSE;
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((settings = switch_xml_child(cfg, "global_settings"))) {
|
|
||||||
for (param = switch_xml_child(settings, "param"); param; param = param->next) {
|
|
||||||
char *var = (char *) switch_xml_attr_soft(param, "name");
|
|
||||||
char *val = (char *) switch_xml_attr_soft(param, "value");
|
|
||||||
if (!strcasecmp(var, "log-level")) {
|
|
||||||
su_log_set_level(NULL, atoi(val));
|
|
||||||
} else if (!strcasecmp(var, "tracelevel")) {
|
|
||||||
mod_sofia_globals.tracelevel = switch_log_str2level(val);
|
|
||||||
} else if (!strcasecmp(var, "debug-presence")) {
|
|
||||||
mod_sofia_globals.debug_presence = atoi(val);
|
|
||||||
} else if (!strcasecmp(var, "debug-sla")) {
|
|
||||||
mod_sofia_globals.debug_sla = atoi(val);
|
|
||||||
} else if (!strcasecmp(var, "auto-restart")) {
|
|
||||||
mod_sofia_globals.auto_restart = switch_true(val);
|
|
||||||
} else if (!strcasecmp(var, "reg-deny-binding-fetch-and-no-lookup")) { /* backwards compatibility */
|
|
||||||
mod_sofia_globals.reg_deny_binding_fetch_and_no_lookup = switch_true(val); /* remove when noone complains about the extra lookup */
|
|
||||||
if (switch_true(val)) {
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Enabling reg-deny-binding-fetch-and-no-lookup - this functionality is "
|
|
||||||
"deprecated and will be removed - let FS devs know if you think it should stay\n");
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "rewrite-multicasted-fs-path")) {
|
|
||||||
if( (!strcasecmp(val, "to_host")) || (!strcasecmp(val, "1")) ) {
|
|
||||||
/* old behaviour */
|
|
||||||
mod_sofia_globals.rewrite_multicasted_fs_path = 1;
|
|
||||||
} else if (!strcasecmp(val, "original_server_host")) {
|
|
||||||
mod_sofia_globals.rewrite_multicasted_fs_path = 2;
|
|
||||||
} else if (!strcasecmp(val, "original_hostname")) {
|
|
||||||
mod_sofia_globals.rewrite_multicasted_fs_path = 3;
|
|
||||||
} else {
|
|
||||||
mod_sofia_globals.rewrite_multicasted_fs_path = SWITCH_FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (!strcasecmp(var, "capture-server")) {
|
|
||||||
mod_sofia_globals.capture_server = switch_core_strdup(mod_sofia_globals.pool, val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((profiles = switch_xml_child(cfg, "profiles"))) {
|
|
||||||
for (xprofile = switch_xml_child(profiles, "profile"); xprofile; xprofile = xprofile->next) {
|
|
||||||
char *xprofilename = (char *) switch_xml_attr_soft(xprofile, "name");
|
|
||||||
char *xprofiledomain = (char *) switch_xml_attr(xprofile, "domain");
|
|
||||||
|
|
||||||
if (strcasecmp(profile->name, xprofilename)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* you could change profile->foo here if it was a minor change like context or dialplan ... */
|
|
||||||
profile->acl_count = 0;
|
|
||||||
profile->nat_acl_count = 0;
|
|
||||||
profile->reg_acl_count = 0;
|
|
||||||
profile->proxy_acl_count = 0;
|
|
||||||
sofia_set_pflag(profile, PFLAG_STUN_ENABLED);
|
|
||||||
sofia_set_pflag(profile, PFLAG_PASS_CALLEE_ID);
|
|
||||||
profile->ib_calls = 0;
|
|
||||||
profile->ob_calls = 0;
|
|
||||||
profile->ib_failed_calls = 0;
|
|
||||||
profile->ob_failed_calls = 0;
|
|
||||||
profile->shutdown_type = "false";
|
|
||||||
|
|
||||||
if (xprofiledomain) {
|
|
||||||
profile->domain_name = switch_core_strdup(profile->pool, xprofiledomain);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((settings = switch_xml_child(xprofile, "settings"))) {
|
|
||||||
for (param = switch_xml_child(settings, "param"); param; param = param->next) {
|
|
||||||
char *var = (char *) switch_xml_attr_soft(param, "name");
|
|
||||||
char *val = (char *) switch_xml_attr_soft(param, "value");
|
|
||||||
if (!strcasecmp(var, "debug")) {
|
|
||||||
profile->debug = atoi(val);
|
|
||||||
} else if (!strcasecmp(var, "shutdown-on-fail")) {
|
|
||||||
profile->shutdown_type = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "pass-callee-id")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_PASS_CALLEE_ID);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_PASS_CALLEE_ID);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "rtp-digit-delay")) {
|
|
||||||
int delay = val ? atoi(val) : 0;
|
|
||||||
|
|
||||||
if (delay < 0) delay = 0;
|
|
||||||
|
|
||||||
profile->rtp_digit_delay = (uint32_t) delay;
|
|
||||||
} else if (!strcasecmp(var, "watchdog-enabled")) {
|
|
||||||
profile->watchdog_enabled = switch_true(val);
|
|
||||||
} else if (!strcasecmp(var, "watchdog-step-timeout")) {
|
|
||||||
profile->step_timeout = (unsigned long) atol(val);
|
|
||||||
} else if (!strcasecmp(var, "watchdog-event-timeout")) {
|
|
||||||
profile->event_timeout = (unsigned long) atol(val);
|
|
||||||
} else if (!strcasecmp(var, "in-dialog-chat")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_IN_DIALOG_CHAT);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_IN_DIALOG_CHAT);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "fire-message-events")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_FIRE_MESSAGE_EVENTS);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_FIRE_MESSAGE_EVENTS);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "disable-hold")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_DISABLE_HOLD);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_DISABLE_HOLD);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "auto-jitterbuffer-msec")) {
|
|
||||||
int msec = atoi(val);
|
|
||||||
if (msec > 19) {
|
|
||||||
profile->jb_msec = switch_core_strdup(profile->pool, val);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "sip-trace")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_flag(profile, TFLAG_TPORT_LOG);
|
|
||||||
} else {
|
|
||||||
sofia_clear_flag(profile, TFLAG_TPORT_LOG);
|
|
||||||
}
|
|
||||||
nua_set_params(profile->nua, TPTAG_LOG(sofia_test_flag(profile, TFLAG_TPORT_LOG)), TAG_END());
|
|
||||||
} else if (!strcasecmp(var, "sip-capture")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_flag(profile, TFLAG_CAPTURE);
|
|
||||||
} else {
|
|
||||||
sofia_clear_flag(profile, TFLAG_CAPTURE);
|
|
||||||
}
|
|
||||||
nua_set_params(profile->nua, TPTAG_CAPT(sofia_test_flag(profile, TFLAG_CAPTURE) ? mod_sofia_globals.capture_server : NULL), TAG_END());
|
|
||||||
} else if (!strcasecmp(var, "send-message-query-on-register")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_MESSAGE_QUERY_ON_REGISTER);
|
|
||||||
} else if (!strcasecmp(val, "first-only")) {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_MESSAGE_QUERY_ON_REGISTER);
|
|
||||||
sofia_set_pflag(profile, PFLAG_MESSAGE_QUERY_ON_FIRST_REGISTER);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_MESSAGE_QUERY_ON_REGISTER);
|
|
||||||
sofia_clear_pflag(profile, PFLAG_MESSAGE_QUERY_ON_FIRST_REGISTER);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "auto-rtp-bugs")) {
|
|
||||||
sofia_glue_parse_rtp_bugs(&profile->auto_rtp_bugs, val);
|
|
||||||
} else if (!strcasecmp(var, "manual-rtp-bugs")) {
|
|
||||||
sofia_glue_parse_rtp_bugs(&profile->manual_rtp_bugs, val);
|
|
||||||
} else if (!strcasecmp(var, "registration-thread-frequency")) {
|
|
||||||
profile->ireg_seconds = atoi(val);
|
|
||||||
if (profile->ireg_seconds < 0) {
|
|
||||||
profile->ireg_seconds = IREG_SECONDS;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "user-agent-string")) {
|
|
||||||
profile->user_agent = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "auto-restart")) {
|
|
||||||
profile->auto_restart = switch_true(val);
|
|
||||||
} else if (!strcasecmp(var, "log-auth-failures")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_LOG_AUTH_FAIL);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_LOG_AUTH_FAIL);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "confirm-blind-transfer")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_CONFIRM_BLIND_TRANSFER);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_CONFIRM_BLIND_TRANSFER);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "send-display-update")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_SEND_DISPLAY_UPDATE);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_SEND_DISPLAY_UPDATE);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "mwi-use-reg-callid")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_MWI_USE_REG_CALLID);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_MWI_USE_REG_CALLID);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "presence-proto-lookup")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_PRESENCE_MAP);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_PRESENCE_MAP);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "profile-standby")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_STANDBY);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_STANDBY);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "liberal-dtmf")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_LIBERAL_DTMF);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_LIBERAL_DTMF);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "forward-unsolicited-mwi-notify")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_FORWARD_MWI_NOTIFY);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_FORWARD_MWI_NOTIFY);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "t38-passthru")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_T38_PASSTHRU);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_T38_PASSTHRU);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "presence-disable-early")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_PRESENCE_DISABLE_EARLY);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_PRESENCE_DISABLE_EARLY);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "ignore-183nosdp")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_IGNORE_183NOSDP);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_IGNORE_183NOSDP);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "renegotiate-codec-on-hold")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_RENEG_ON_HOLD);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_RENEG_ON_HOLD);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "renegotiate-codec-on-reinvite")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_RENEG_ON_REINVITE);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_RENEG_ON_REINVITE);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "presence-probe-on-register")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_PRESENCE_PROBE_ON_REGISTER);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_PRESENCE_PROBE_ON_REGISTER);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (!strcasecmp(var, "send-presence-on-register")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_PRESENCE_ON_REGISTER);
|
|
||||||
} else if (!strcasecmp(val, "first-only")) {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_PRESENCE_ON_REGISTER);
|
|
||||||
sofia_set_pflag(profile, PFLAG_PRESENCE_ON_FIRST_REGISTER);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_PRESENCE_ON_REGISTER);
|
|
||||||
sofia_clear_pflag(profile, PFLAG_PRESENCE_ON_FIRST_REGISTER);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "cid-in-1xx")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_CID_IN_1XX);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_CID_IN_1XX);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "dtmf-type")) {
|
|
||||||
if (!strcasecmp(val, "rfc2833")) {
|
|
||||||
profile->dtmf_type = DTMF_2833;
|
|
||||||
} else if (!strcasecmp(val, "info")) {
|
|
||||||
profile->dtmf_type = DTMF_INFO;
|
|
||||||
} else {
|
|
||||||
profile->dtmf_type = DTMF_NONE;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "caller-id-type")) {
|
|
||||||
profile->cid_type = sofia_cid_name2type(val);
|
|
||||||
} else if (!strcasecmp(var, "record-template")) {
|
|
||||||
profile->record_template = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "record-path")) {
|
|
||||||
profile->record_path = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if ((!strcasecmp(var, "inbound-no-media") || !strcasecmp(var, "inbound-bypass-media"))) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_flag(profile, TFLAG_INB_NOMEDIA);
|
|
||||||
} else {
|
|
||||||
sofia_clear_flag(profile, TFLAG_INB_NOMEDIA);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "force-subscription-expires")) {
|
|
||||||
int tmp = atoi(val);
|
|
||||||
if (tmp > 0) {
|
|
||||||
profile->force_subscription_expires = tmp;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "force-publish-expires")) {
|
|
||||||
int tmp = atoi(val);
|
|
||||||
if (tmp > 0) {
|
|
||||||
profile->force_publish_expires = tmp;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "inbound-late-negotiation")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_flag(profile, TFLAG_LATE_NEGOTIATION);
|
|
||||||
} else {
|
|
||||||
sofia_clear_flag(profile, TFLAG_LATE_NEGOTIATION);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "inbound-proxy-media")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_flag(profile, TFLAG_PROXY_MEDIA);
|
|
||||||
} else {
|
|
||||||
sofia_clear_flag(profile, TFLAG_PROXY_MEDIA);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "inbound-zrtp-passthru")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_flag(profile, TFLAG_ZRTP_PASSTHRU);
|
|
||||||
} else {
|
|
||||||
sofia_clear_flag(profile, TFLAG_ZRTP_PASSTHRU);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "inbound-use-callid-as-uuid")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_CALLID_AS_UUID);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_CALLID_AS_UUID);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "inbound-reg-in-new-thread")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_THREAD_PER_REG);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_THREAD_PER_REG);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "rtp-autoflush-during-bridge")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_RTP_AUTOFLUSH_DURING_BRIDGE);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_RTP_AUTOFLUSH_DURING_BRIDGE);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "rtp-notimer-during-bridge")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_RTP_NOTIMER_DURING_BRIDGE);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_RTP_NOTIMER_DURING_BRIDGE);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "manual-redirect")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_MANUAL_REDIRECT);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_MANUAL_REDIRECT);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "outbound-use-uuid-as-callid")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_UUID_AS_CALLID);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_UUID_AS_CALLID);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "NDLB-received-in-nat-reg-contact")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_RECIEVED_IN_NAT_REG_CONTACT);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_RECIEVED_IN_NAT_REG_CONTACT);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "NDLB-allow-bad-iananame")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
profile->ndlb |= PFLAG_NDLB_ALLOW_BAD_IANANAME;
|
|
||||||
} else {
|
|
||||||
profile->ndlb &= ~PFLAG_NDLB_ALLOW_BAD_IANANAME;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "NDLB-expires-in-register-response")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
profile->ndlb |= PFLAG_NDLB_EXPIRES_IN_REGISTER_RESPONSE;
|
|
||||||
} else {
|
|
||||||
profile->ndlb &= ~PFLAG_NDLB_EXPIRES_IN_REGISTER_RESPONSE;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "NDLB-allow-crypto-in-avp")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
profile->ndlb |= PFLAG_NDLB_ALLOW_CRYPTO_IN_AVP;
|
|
||||||
} else {
|
|
||||||
profile->ndlb &= ~PFLAG_NDLB_ALLOW_CRYPTO_IN_AVP;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "NDLB-allow-nondup-sdp")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
profile->ndlb |= PFLAG_NDLB_ALLOW_NONDUP_SDP;
|
|
||||||
} else {
|
|
||||||
profile->ndlb &= ~PFLAG_NDLB_ALLOW_NONDUP_SDP;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "aggressive-nat-detection")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "disable-rtp-auto-adjust")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_DISABLE_RTP_AUTOADJ);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_DISABLE_RTP_AUTOADJ);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "NDLB-support-asterisk-missing-srtp-auth")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_DISABLE_SRTP_AUTH);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_DISABLE_SRTP_AUTH);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "NDLB-funny-stun")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_FUNNY_STUN);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_FUNNY_STUN);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "stun-enabled")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_STUN_ENABLED);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_STUN_ENABLED);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "stun-auto-disable")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_STUN_AUTO_DISABLE);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_STUN_AUTO_DISABLE);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "apply-nat-acl")) {
|
|
||||||
if (profile->nat_acl_count < SOFIA_MAX_ACL) {
|
|
||||||
if (!profile->extsipip && switch_check_network_list_ip(profile->sipip, val)) {
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Not adding acl %s because it's the local network\n", val);
|
|
||||||
} else {
|
|
||||||
profile->nat_acl[profile->nat_acl_count++] = switch_core_strdup(profile->pool, val);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Max acl records of %d reached\n", SOFIA_MAX_ACL);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "apply-inbound-acl")) {
|
|
||||||
if (profile->acl_count < SOFIA_MAX_ACL) {
|
|
||||||
char *list, *pass = NULL, *fail = NULL;
|
|
||||||
|
|
||||||
list = switch_core_strdup(profile->pool, val);
|
|
||||||
|
|
||||||
if ((pass = strchr(list, ':'))) {
|
|
||||||
*pass++ = '\0';
|
|
||||||
if ((fail = strchr(pass, ':'))) {
|
|
||||||
*fail++ = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (zstr(pass)) pass = NULL;
|
|
||||||
if (zstr(fail)) fail = NULL;
|
|
||||||
|
|
||||||
profile->acl_pass_context[profile->acl_count] = pass;
|
|
||||||
profile->acl_fail_context[profile->acl_count] = fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
profile->acl[profile->acl_count++] = list;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Max acl records of %d reached\n", SOFIA_MAX_ACL);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "apply-proxy-acl")) {
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "apply proxy acl [%s]\n", val);
|
|
||||||
if (profile->proxy_acl_count < SOFIA_MAX_ACL) {
|
|
||||||
profile->proxy_acl[profile->proxy_acl_count++] = switch_core_strdup(profile->pool, val);
|
|
||||||
} else {
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Max acl records of %d reached\n", SOFIA_MAX_ACL);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "apply-register-acl")) {
|
|
||||||
if (profile->reg_acl_count < SOFIA_MAX_ACL) {
|
|
||||||
profile->reg_acl[profile->reg_acl_count++] = switch_core_strdup(profile->pool, val);
|
|
||||||
} else {
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Max acl records of %d reached\n", SOFIA_MAX_ACL);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "user-agent-filter")) {
|
|
||||||
profile->user_agent_filter = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "max-registrations-per-extension")) {
|
|
||||||
profile->max_registrations_perext = atoi(val);
|
|
||||||
} else if (!strcasecmp(var,"presence-privacy")) {
|
|
||||||
profile->presence_privacy = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "rfc2833-pt")) {
|
|
||||||
profile->te = (switch_payload_t) atoi(val);
|
|
||||||
} else if (!strcasecmp(var, "cng-pt") && !(sofia_test_pflag(profile, PFLAG_SUPPRESS_CNG))) {
|
|
||||||
profile->cng_pt = (switch_payload_t) atoi(val);
|
|
||||||
} else if (!strcasecmp(var, "vad")) {
|
|
||||||
if (!strcasecmp(val, "in")) {
|
|
||||||
sofia_set_flag(profile, TFLAG_VAD_IN);
|
|
||||||
} else if (!strcasecmp(val, "out")) {
|
|
||||||
sofia_set_flag(profile, TFLAG_VAD_OUT);
|
|
||||||
} else if (!strcasecmp(val, "both")) {
|
|
||||||
sofia_set_flag(profile, TFLAG_VAD_IN);
|
|
||||||
sofia_set_flag(profile, TFLAG_VAD_OUT);
|
|
||||||
} else if (strcasecmp(val, "none")) {
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid option %s for VAD\n", val);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "unregister-on-options-fail")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_UNREG_OPTIONS_FAIL);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_UNREG_OPTIONS_FAIL);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "require-secure-rtp")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_SECURE);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_SECURE);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "multiple-registrations")) {
|
|
||||||
if (!strcasecmp(val, "call-id")) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_MULTIREG);
|
|
||||||
} else if (!strcasecmp(val, "contact") || switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_MULTIREG);
|
|
||||||
sofia_set_pflag(profile, PFLAG_MULTIREG_CONTACT);
|
|
||||||
} else if (switch_true(val)) {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_MULTIREG);
|
|
||||||
//sofia_clear_pflag(profile, PFLAG_MULTIREG_CONTACT);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "supress-cng") || !strcasecmp(var, "suppress-cng")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_SUPPRESS_CNG);
|
|
||||||
profile->cng_pt = 0;
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_SUPPRESS_CNG);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "NDLB-broken-auth-hash")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
profile->ndlb |= PFLAG_NDLB_BROKEN_AUTH_HASH;
|
|
||||||
} else {
|
|
||||||
profile->ndlb &= ~PFLAG_NDLB_BROKEN_AUTH_HASH;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "NDLB-sendrecv-in-session")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
profile->ndlb |= PFLAG_NDLB_SENDRECV_IN_SESSION;
|
|
||||||
} else {
|
|
||||||
profile->ndlb &= ~PFLAG_NDLB_SENDRECV_IN_SESSION;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "pass-rfc2833")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_PASS_RFC2833);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_PASS_RFC2833);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "rtp-autoflush")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_AUTOFLUSH);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_AUTOFLUSH);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "rtp-autofix-timing")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_AUTOFIX_TIMING);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_AUTOFIX_TIMING);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "nat-options-ping")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_NAT_OPTIONS_PING);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_NAT_OPTIONS_PING);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "all-reg-options-ping")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_ALL_REG_OPTIONS_PING);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_ALL_REG_OPTIONS_PING);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "inbound-codec-negotiation")) {
|
|
||||||
if (!strcasecmp(val, "greedy")) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_GREEDY);
|
|
||||||
} else if (!strcasecmp(val, "scrooge")) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_GREEDY);
|
|
||||||
sofia_set_pflag(profile, PFLAG_SCROOGE);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_SCROOGE);
|
|
||||||
sofia_clear_pflag(profile, PFLAG_GREEDY);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "disable-transcoding")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_DISABLE_TRANSCODING);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_DISABLE_TRANSCODING);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "rtp-rewrite-timestamps")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_REWRITE_TIMESTAMPS);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_REWRITE_TIMESTAMPS);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "auth-calls")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_AUTH_CALLS);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_AUTH_CALLS);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "extended-info-parsing")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_EXTENDED_INFO_PARSING);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_EXTENDED_INFO_PARSING);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "context")) {
|
|
||||||
profile->context = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "local-network-acl")) {
|
|
||||||
if (!strcasecmp(val, "none")) {
|
|
||||||
profile->local_network = NULL;
|
|
||||||
} else {
|
|
||||||
profile->local_network = switch_core_strdup(profile->pool, val);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "force-register-domain")) {
|
|
||||||
profile->reg_domain = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "force-subscription-domain")) {
|
|
||||||
profile->sub_domain = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "force-register-db-domain")) {
|
|
||||||
profile->reg_db_domain = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "hold-music")) {
|
|
||||||
profile->hold_music = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "outbound-proxy")) {
|
|
||||||
profile->outbound_proxy = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "rtcp-audio-interval-msec")) {
|
|
||||||
profile->rtcp_audio_interval_msec = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "rtcp-video-interval-msec")) {
|
|
||||||
profile->rtcp_video_interval_msec = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "session-timeout")) {
|
|
||||||
int v_session_timeout = atoi(val);
|
|
||||||
if (v_session_timeout >= 0) {
|
|
||||||
profile->session_timeout = v_session_timeout;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "rtp-timeout-sec")) {
|
|
||||||
int v = atoi(val);
|
|
||||||
if (v >= 0) {
|
|
||||||
profile->rtp_timeout_sec = v;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "rtp-hold-timeout-sec")) {
|
|
||||||
int v = atoi(val);
|
|
||||||
if (v >= 0) {
|
|
||||||
profile->rtp_hold_timeout_sec = v;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "nonce-ttl")) {
|
|
||||||
profile->nonce_ttl = atoi(val);
|
|
||||||
} else if (!strcasecmp(var, "dialplan")) {
|
|
||||||
profile->dialplan = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "max-calls")) {
|
|
||||||
profile->max_calls = atoi(val);
|
|
||||||
} else if (!strcasecmp(var, "codec-prefs")) {
|
|
||||||
profile->inbound_codec_string = switch_core_strdup(profile->pool, val);
|
|
||||||
profile->outbound_codec_string = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "inbound-codec-prefs")) {
|
|
||||||
profile->inbound_codec_string = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "outbound-codec-prefs")) {
|
|
||||||
profile->outbound_codec_string = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "challenge-realm")) {
|
|
||||||
profile->challenge_realm = switch_core_strdup(profile->pool, val);
|
|
||||||
} else if (!strcasecmp(var, "dtmf-duration")) {
|
|
||||||
uint32_t dur = atoi(val);
|
|
||||||
if (dur >= switch_core_min_dtmf_duration(0) && dur <= switch_core_max_dtmf_duration(0)) {
|
|
||||||
profile->dtmf_duration = dur;
|
|
||||||
} else {
|
|
||||||
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());
|
|
||||||
} else if (!strcasecmp(var, "sip-options-respond-503-on-busy")) {
|
|
||||||
if (switch_true(val)) {
|
|
||||||
sofia_set_pflag(profile, PFLAG_OPTIONS_RESPOND_503_ON_BUSY);
|
|
||||||
} else {
|
|
||||||
sofia_clear_pflag(profile, PFLAG_OPTIONS_RESPOND_503_ON_BUSY);
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "sip-force-expires")) {
|
|
||||||
int32_t sip_force_expires = atoi(val);
|
|
||||||
if (sip_force_expires >= 0) {
|
|
||||||
profile->sip_force_expires = sip_force_expires;
|
|
||||||
} else {
|
|
||||||
profile->sip_force_expires = 0;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "sip-expires-max-deviation")) {
|
|
||||||
int32_t sip_expires_max_deviation = atoi(val);
|
|
||||||
if (sip_expires_max_deviation >= 0) {
|
|
||||||
profile->sip_expires_max_deviation = sip_expires_max_deviation;
|
|
||||||
} else {
|
|
||||||
profile->sip_expires_max_deviation = 0;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(var, "p-asserted-id-parse")) {
|
|
||||||
if (!strncasecmp(val, "default", 7)) {
|
|
||||||
profile->paid_type = PAID_DEFAULT;
|
|
||||||
} else if (!strncasecmp(val, "user-only", 9)) {
|
|
||||||
profile->paid_type = PAID_USER;
|
|
||||||
} else if (!strncasecmp(val, "user-domain", 11)) {
|
|
||||||
profile->paid_type = PAID_USER_DOMAIN;
|
|
||||||
} else if (!strncasecmp(val, "verbatim", 8)) {
|
|
||||||
profile->paid_type = PAID_VERBATIM;
|
|
||||||
} else {
|
|
||||||
profile->paid_type = PAID_DEFAULT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sofia_test_flag(profile, TFLAG_ZRTP_PASSTHRU)) {
|
|
||||||
sofia_set_flag(profile, TFLAG_LATE_NEGOTIATION);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((gateways_tag = switch_xml_child(xprofile, "gateways"))) {
|
|
||||||
parse_gateways(profile, gateways_tag);
|
|
||||||
}
|
|
||||||
|
|
||||||
status = SWITCH_STATUS_SUCCESS;
|
|
||||||
|
|
||||||
if ((domains_tag = switch_xml_child(xprofile, "domains"))) {
|
|
||||||
switch_event_t *xml_params;
|
|
||||||
switch_event_create(&xml_params, SWITCH_EVENT_REQUEST_PARAMS);
|
|
||||||
switch_assert(xml_params);
|
|
||||||
switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "purpose", "gateways");
|
|
||||||
switch_event_add_header_string(xml_params, SWITCH_STACK_BOTTOM, "profile", profile->name);
|
|
||||||
|
|
||||||
for (domain_tag = switch_xml_child(domains_tag, "domain"); domain_tag; domain_tag = domain_tag->next) {
|
|
||||||
switch_xml_t droot, x_domain_tag;
|
|
||||||
const char *dname = switch_xml_attr_soft(domain_tag, "name");
|
|
||||||
const char *parse = switch_xml_attr_soft(domain_tag, "parse");
|
|
||||||
const char *alias = switch_xml_attr_soft(domain_tag, "alias");
|
|
||||||
|
|
||||||
if (!zstr(dname)) {
|
|
||||||
if (!strcasecmp(dname, "all")) {
|
|
||||||
switch_xml_t xml_root, x_domains;
|
|
||||||
if (switch_xml_locate("directory", NULL, NULL, NULL, &xml_root, &x_domains, xml_params, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) {
|
|
||||||
for (x_domain_tag = switch_xml_child(x_domains, "domain"); x_domain_tag; x_domain_tag = x_domain_tag->next) {
|
|
||||||
dname = switch_xml_attr_soft(x_domain_tag, "name");
|
|
||||||
parse_domain_tag(profile, x_domain_tag, dname, parse, alias);
|
|
||||||
}
|
|
||||||
switch_xml_free(xml_root);
|
|
||||||
}
|
|
||||||
} else if (switch_xml_locate_domain(dname, xml_params, &droot, &x_domain_tag) == SWITCH_STATUS_SUCCESS) {
|
|
||||||
parse_domain_tag(profile, x_domain_tag, dname, parse, alias);
|
|
||||||
switch_xml_free(droot);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch_event_destroy(&xml_params);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((aliases_tag = switch_xml_child(xprofile, "aliases"))) {
|
|
||||||
for (alias_tag = switch_xml_child(aliases_tag, "alias"); alias_tag; alias_tag = alias_tag->next) {
|
|
||||||
char *aname = (char *) switch_xml_attr_soft(alias_tag, "name");
|
|
||||||
if (!zstr(aname)) {
|
|
||||||
|
|
||||||
if (sofia_glue_add_profile(switch_core_strdup(profile->pool, aname), profile) == SWITCH_STATUS_SUCCESS) {
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Alias [%s] for profile [%s]\n", aname, profile->name);
|
|
||||||
} else {
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Alias [%s] for profile [%s] (already exists)\n",
|
|
||||||
aname, profile->name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
done:
|
|
||||||
|
|
||||||
if (xml) {
|
|
||||||
switch_xml_free(xml);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch_event_destroy(¶ms);
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch_status_t config_sofia(int reload, char *profile_name)
|
|
||||||
{
|
|
||||||
char *cf = "sofia.conf";
|
|
||||||
switch_xml_t cfg, xml = NULL, xprofile, param, settings, profiles;
|
|
||||||
switch_status_t status = SWITCH_STATUS_SUCCESS;
|
|
||||||
sofia_profile_t *profile = NULL;
|
|
||||||
char url[512] = "";
|
|
||||||
int profile_found = 0;
|
|
||||||
switch_event_t *params = NULL;
|
|
||||||
|
|
||||||
if (!reload) {
|
|
||||||
su_init();
|
su_init();
|
||||||
if (sip_update_default_mclass(sip_extend_mclass(NULL)) < 0) {
|
if (sip_update_default_mclass(sip_extend_mclass(NULL)) < 0) {
|
||||||
su_deinit();
|
su_deinit();
|
||||||
return SWITCH_STATUS_FALSE;
|
return SWITCH_STATUS_GENERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Redirect loggers in sofia */
|
/* Redirect loggers in sofia */
|
||||||
|
@ -4212,18 +3411,39 @@ switch_status_t config_sofia(int reload, char *profile_name)
|
||||||
#ifdef HAVE_SOFIA_STUN
|
#ifdef HAVE_SOFIA_STUN
|
||||||
su_log_redirect(stun_log, logger, NULL);
|
su_log_redirect(stun_log, logger, NULL);
|
||||||
#endif
|
#endif
|
||||||
}
|
|
||||||
|
return SWITCH_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
switch_status_t config_sofia(sofia_config_t reload, char *profile_name)
|
||||||
|
{
|
||||||
|
char *cf = "sofia.conf";
|
||||||
|
switch_xml_t cfg, xml = NULL, xprofile, param, settings, profiles;
|
||||||
|
switch_status_t status = SWITCH_STATUS_SUCCESS;
|
||||||
|
sofia_profile_t *profile = NULL;
|
||||||
|
char url[512] = "";
|
||||||
|
int profile_found = 0;
|
||||||
|
switch_event_t *params = NULL;
|
||||||
|
sofia_profile_t *profile_already_started = NULL;
|
||||||
|
|
||||||
if (!zstr(profile_name) && (profile = sofia_glue_find_profile(profile_name))) {
|
if (!zstr(profile_name) && (profile = sofia_glue_find_profile(profile_name))) {
|
||||||
|
if (reload == SOFIA_CONFIG_RESCAN) {
|
||||||
|
profile_already_started = profile;
|
||||||
|
} else {
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Profile [%s] Already exists.\n", switch_str_nil(profile_name));
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Profile [%s] Already exists.\n", switch_str_nil(profile_name));
|
||||||
status = SWITCH_STATUS_FALSE;
|
status = SWITCH_STATUS_FALSE;
|
||||||
sofia_glue_release_profile(profile);
|
sofia_glue_release_profile(profile);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch_event_create(¶ms, SWITCH_EVENT_REQUEST_PARAMS);
|
switch_event_create(¶ms, SWITCH_EVENT_REQUEST_PARAMS);
|
||||||
switch_assert(params);
|
switch_assert(params);
|
||||||
switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile", profile_name);
|
switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile", profile_name);
|
||||||
|
if (reload == SOFIA_CONFIG_RESCAN) {
|
||||||
|
switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "reconfig", "true");
|
||||||
|
}
|
||||||
|
|
||||||
if (!(xml = switch_xml_open_cfg(cf, &cfg, params))) {
|
if (!(xml = switch_xml_open_cfg(cf, &cfg, params))) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", cf);
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", cf);
|
||||||
|
@ -4295,6 +3515,8 @@ switch_status_t config_sofia(int reload, char *profile_name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!profile_already_started) {
|
||||||
|
|
||||||
/* Setup the pool */
|
/* Setup the pool */
|
||||||
if ((status = switch_core_new_memory_pool(&pool)) != SWITCH_STATUS_SUCCESS) {
|
if ((status = switch_core_new_memory_pool(&pool)) != SWITCH_STATUS_SUCCESS) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n");
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n");
|
||||||
|
@ -4307,6 +3529,7 @@ switch_status_t config_sofia(int reload, char *profile_name)
|
||||||
sofia_profile_start_failure(NULL, xprofilename);
|
sofia_profile_start_failure(NULL, xprofilename);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
profile->tls_verify_policy = TPTLS_VERIFY_NONE;
|
profile->tls_verify_policy = TPTLS_VERIFY_NONE;
|
||||||
/* lib default */
|
/* lib default */
|
||||||
profile->tls_verify_depth = 2;
|
profile->tls_verify_depth = 2;
|
||||||
|
@ -4367,6 +3590,25 @@ switch_status_t config_sofia(int reload, char *profile_name)
|
||||||
/* lib default */
|
/* lib default */
|
||||||
profile->tls_verify_depth = 2;
|
profile->tls_verify_depth = 2;
|
||||||
profile->tls_verify_date = SWITCH_TRUE;
|
profile->tls_verify_date = SWITCH_TRUE;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* you could change profile->foo here if it was a minor change like context or dialplan ... */
|
||||||
|
profile->acl_count = 0;
|
||||||
|
profile->nat_acl_count = 0;
|
||||||
|
profile->reg_acl_count = 0;
|
||||||
|
profile->proxy_acl_count = 0;
|
||||||
|
sofia_set_pflag(profile, PFLAG_STUN_ENABLED);
|
||||||
|
sofia_set_pflag(profile, PFLAG_PASS_CALLEE_ID);
|
||||||
|
profile->ib_calls = 0;
|
||||||
|
profile->ob_calls = 0;
|
||||||
|
profile->ib_failed_calls = 0;
|
||||||
|
profile->ob_failed_calls = 0;
|
||||||
|
profile->shutdown_type = "false";
|
||||||
|
|
||||||
|
if (xprofiledomain) {
|
||||||
|
profile->domain_name = switch_core_strdup(profile->pool, xprofiledomain);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (param = switch_xml_child(settings, "param"); param; param = param->next) {
|
for (param = switch_xml_child(settings, "param"); param; param = param->next) {
|
||||||
char *var = (char *) switch_xml_attr_soft(param, "name");
|
char *var = (char *) switch_xml_attr_soft(param, "name");
|
||||||
|
@ -5343,7 +4585,7 @@ switch_status_t config_sofia(int reload, char *profile_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (profile) {
|
if (profile && !profile_already_started) {
|
||||||
switch_xml_t aliases_tag, alias_tag;
|
switch_xml_t aliases_tag, alias_tag;
|
||||||
|
|
||||||
if ((aliases_tag = switch_xml_child(xprofile, "aliases"))) {
|
if ((aliases_tag = switch_xml_child(xprofile, "aliases"))) {
|
||||||
|
@ -5382,6 +4624,10 @@ switch_status_t config_sofia(int reload, char *profile_name)
|
||||||
}
|
}
|
||||||
done:
|
done:
|
||||||
|
|
||||||
|
if (profile_already_started) {
|
||||||
|
sofia_glue_release_profile(profile_already_started);
|
||||||
|
}
|
||||||
|
|
||||||
switch_event_destroy(¶ms);
|
switch_event_destroy(¶ms);
|
||||||
|
|
||||||
if (xml) {
|
if (xml) {
|
||||||
|
|
Loading…
Reference in New Issue