diff options
author | Corey Farrell <git@cfware.com> | 2015-11-02 21:24:58 -0500 |
---|---|---|
committer | Corey Farrell <git@cfware.com> | 2015-11-03 08:52:52 -0500 |
commit | 0393bd6bed3b87b312d7fc252c4fa3782df8260a (patch) | |
tree | 80be850e2c3d775119d32f0a7825c064b2edd626 /channels | |
parent | 6fbffe42e13d82eebd5545de9a74b6a36bd9a558 (diff) |
chan_sip: Allow websockets to be disabled.
This patch adds a new setting "websockets_enabled" to sip.conf.
Setting this to false allows chan_sip to be used without causing
conflicts with res_pjsip_transport_websocket.
ASTERISK-24106 #close
Reported by: Andrew Nagy
Change-Id: I04fe8c4f2d57b2d7375e0e25826c91a72e93bea7
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_sip.c | 20 | ||||
-rw-r--r-- | channels/sip/include/sip.h | 1 |
2 files changed, 19 insertions, 2 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index f28296627..acb7d535f 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -31261,6 +31261,7 @@ static int reload_config(enum channelreloadreason reason) int bindport = 0; int acl_change_subscription_needed = 0; int min_subexpiry_set = 0, max_subexpiry_set = 0; + int websocket_was_enabled = sip_cfg.websocket_enabled; run_start = time(0); ast_unload_realtime("sipregs"); @@ -32047,6 +32048,8 @@ static int reload_config(enum channelreloadreason reason) ast_log(LOG_WARNING, "'%s' is not a valid websocket_write_timeout value at line %d. Using default '%d'.\n", v->value, v->lineno, AST_DEFAULT_WEBSOCKET_WRITE_TIMEOUT); sip_cfg.websocket_write_timeout = AST_DEFAULT_WEBSOCKET_WRITE_TIMEOUT; } + } else if (!strcasecmp(v->name, "websocket_enabled")) { + sip_cfg.websocket_enabled = ast_true(v->value); } } @@ -32392,6 +32395,15 @@ static int reload_config(enum channelreloadreason reason) notify_types = NULL; } + /* If the module is loading it's not time to enable websockets yet. */ + if (reason != CHANNEL_MODULE_LOAD && websocket_was_enabled != sip_cfg.websocket_enabled) { + if (sip_cfg.websocket_enabled) { + ast_websocket_add_protocol("sip", sip_websocket_callback); + } else { + ast_websocket_remove_protocol("sip", sip_websocket_callback); + } + } + run_end = time(0); ast_debug(4, "SIP reload_config done...Runtime= %d sec\n", (int)(run_end-run_start)); @@ -34573,7 +34585,9 @@ static int load_module(void) sip_register_tests(); network_change_stasis_subscribe(); - ast_websocket_add_protocol("sip", sip_websocket_callback); + if (sip_cfg.websocket_enabled) { + ast_websocket_add_protocol("sip", sip_websocket_callback); + } return AST_MODULE_LOAD_SUCCESS; } @@ -34588,7 +34602,9 @@ static int unload_module(void) ast_sip_api_provider_unregister(); - ast_websocket_remove_protocol("sip", sip_websocket_callback); + if (sip_cfg.websocket_enabled) { + ast_websocket_remove_protocol("sip", sip_websocket_callback); + } network_change_stasis_unsubscribe(); acl_change_event_stasis_unsubscribe(); diff --git a/channels/sip/include/sip.h b/channels/sip/include/sip.h index 3ed3e8a33..82f208c77 100644 --- a/channels/sip/include/sip.h +++ b/channels/sip/include/sip.h @@ -774,6 +774,7 @@ struct sip_settings { int tcp_enabled; int default_max_forwards; /*!< Default max forwards (SIP Anti-loop) */ int websocket_write_timeout; /*!< Socket write timeout for websocket transports, in ms */ + int websocket_enabled; /*!< Are websockets enabled? */ }; struct ast_websocket; |