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
changes/52/1552/2
Corey Farrell 10 years ago
parent f80a0ae49b
commit 40574a2ea3

@ -200,6 +200,13 @@ Queue
--- Functionality changes from Asterisk 13.6.0 to Asterisk 13.7.0 ------------ --- Functionality changes from Asterisk 13.6.0 to Asterisk 13.7.0 ------------
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
chan_sip
------------------
* The websockets_enabled option has been added to the general section of
sip.conf. The option is enabled by default to match the previous behavior.
The option should be disabled when using res_pjsip_transport_websockets to
ensure chan_sip will not conflict with PJSIP websockets.
Dialplan Functions Dialplan Functions
------------------ ------------------
* The HOLD_INTERCEPT dialplan function now actually exists in the source tree. * The HOLD_INTERCEPT dialplan function now actually exists in the source tree.

@ -31265,6 +31265,7 @@ static int reload_config(enum channelreloadreason reason)
int bindport = 0; int bindport = 0;
int acl_change_subscription_needed = 0; int acl_change_subscription_needed = 0;
int min_subexpiry_set = 0, max_subexpiry_set = 0; int min_subexpiry_set = 0, max_subexpiry_set = 0;
int websocket_was_enabled = sip_cfg.websocket_enabled;
run_start = time(0); run_start = time(0);
ast_unload_realtime("sipregs"); ast_unload_realtime("sipregs");
@ -32068,6 +32069,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); 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; 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);
} }
} }
@ -32413,6 +32416,15 @@ static int reload_config(enum channelreloadreason reason)
notify_types = NULL; 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); run_end = time(0);
ast_debug(4, "SIP reload_config done...Runtime= %d sec\n", (int)(run_end-run_start)); ast_debug(4, "SIP reload_config done...Runtime= %d sec\n", (int)(run_end-run_start));
@ -34594,7 +34606,9 @@ static int load_module(void)
sip_register_tests(); sip_register_tests();
network_change_stasis_subscribe(); network_change_stasis_subscribe();
if (sip_cfg.websocket_enabled) {
ast_websocket_add_protocol("sip", sip_websocket_callback); ast_websocket_add_protocol("sip", sip_websocket_callback);
}
return AST_MODULE_LOAD_SUCCESS; return AST_MODULE_LOAD_SUCCESS;
} }
@ -34609,7 +34623,9 @@ static int unload_module(void)
ast_sip_api_provider_unregister(); ast_sip_api_provider_unregister();
if (sip_cfg.websocket_enabled) {
ast_websocket_remove_protocol("sip", sip_websocket_callback); ast_websocket_remove_protocol("sip", sip_websocket_callback);
}
network_change_stasis_unsubscribe(); network_change_stasis_unsubscribe();
acl_change_event_stasis_unsubscribe(); acl_change_event_stasis_unsubscribe();

@ -774,6 +774,7 @@ struct sip_settings {
int tcp_enabled; int tcp_enabled;
int default_max_forwards; /*!< Default max forwards (SIP Anti-loop) */ int default_max_forwards; /*!< Default max forwards (SIP Anti-loop) */
int websocket_write_timeout; /*!< Socket write timeout for websocket transports, in ms */ int websocket_write_timeout; /*!< Socket write timeout for websocket transports, in ms */
int websocket_enabled; /*!< Are websockets enabled? */
}; };
struct ast_websocket; struct ast_websocket;

@ -232,6 +232,10 @@ tcpbindaddr=0.0.0.0 ; IP address for TCP server to bind to (0.0.0.0
; unauthenticated sessions that will be allowed ; unauthenticated sessions that will be allowed
; to connect at any given time. (default: 100) ; to connect at any given time. (default: 100)
;websocket_enabled = true ; Set to false to prevent chan_sip from listening to websockets. This
; is neeeded when using chan_sip and res_pjsip_transport_websockets on
; the same system.
;websocket_write_timeout = 100 ; Default write timeout to set on websocket transports. ;websocket_write_timeout = 100 ; Default write timeout to set on websocket transports.
; This value may need to be adjusted for connections where ; This value may need to be adjusted for connections where
; Asterisk must write a substantial amount of data and the ; Asterisk must write a substantial amount of data and the

Loading…
Cancel
Save