Module: sip-router Branch: master Commit: 688f2902977ee52d0c3d89a1f6459ca0d8c624f9 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=688f2902...
Author: Peter Dunkley peter.dunkley@crocodile-rcs.com Committer: Peter Dunkley peter.dunkley@crocodile-rcs.com Date: Sat Mar 30 20:28:03 2013 +0000
modules/websocket: moved some configuration across to the cfg framework
- As suggested by @oej
---
modules/websocket/ws_frame.c | 6 +--- modules/websocket/ws_frame.h | 3 -- modules/websocket/ws_handshake.c | 6 ++-- modules/websocket/ws_mod.c | 47 ++++++++++++++++++++++++++++--------- modules/websocket/ws_mod.h | 8 +++++- 5 files changed, 47 insertions(+), 23 deletions(-)
diff --git a/modules/websocket/ws_frame.c b/modules/websocket/ws_frame.c index 4e2b91f..4212158 100644 --- a/modules/websocket/ws_frame.c +++ b/modules/websocket/ws_frame.c @@ -93,9 +93,6 @@ typedef enum #define OPCODE_PONG (0xa) /* 0xb - 0xf are reserved for further control frames */
-/* Time (in seconds) after which to send a keepalive on an idle connection */ -int ws_keepalive_timeout = DEFAULT_KEEPALIVE_TIMEOUT; -int ws_keepalive_mechanism = DEFAULT_KEEPALIVE_MECHANISM; str ws_ping_application_data = {0, 0};
stat_var *ws_failed_connections; @@ -812,7 +809,8 @@ struct mi_root *ws_mi_pong(struct mi_root *cmd, void *param)
void ws_keepalive(unsigned int ticks, void *param) { - int check_time = (int) time(NULL) - ws_keepalive_timeout; + int check_time = (int) time(NULL) + - cfg_get(websocket, ws_cfg, keepalive_timeout); ws_connection_t *wsc = wsconn_used_list->head;
while (wsc && wsc->last_used < check_time) diff --git a/modules/websocket/ws_frame.h b/modules/websocket/ws_frame.h index b674d07..2a6942e 100644 --- a/modules/websocket/ws_frame.h +++ b/modules/websocket/ws_frame.h @@ -36,9 +36,6 @@ typedef enum REMOTE_CLOSE } ws_close_type_t;
-#define DEFAULT_KEEPALIVE_TIMEOUT 180 /* seconds */ -extern int ws_keepalive_timeout; - enum { KEEPALIVE_MECHANISM_NONE = 0, diff --git a/modules/websocket/ws_handshake.c b/modules/websocket/ws_handshake.c index 15d3181..739e7cf 100644 --- a/modules/websocket/ws_handshake.c +++ b/modules/websocket/ws_handshake.c @@ -128,7 +128,7 @@ int ws_handle_handshake(struct sip_msg *msg) msg->rpl_send_flags.f |= SND_F_CON_CLOSE; msg->rpl_send_flags.f |= SND_F_FORCE_CON_REUSE;
- if (*ws_enabled == 0) + if (cfg_get(websocket, ws_cfg, enabled) == 0) { LM_INFO("disabled: bouncing handshake\n"); ws_send_reply(msg, 503, &str_status_service_unavailable, @@ -396,14 +396,14 @@ int ws_handle_handshake(struct sip_msg *msg)
struct mi_root *ws_mi_disable(struct mi_root *cmd, void *param) { - *ws_enabled = 0; + cfg_get(websocket, ws_cfg, enabled) = 0; LM_WARN("disabling websockets - new connections will be dropped\n"); return init_mi_tree(200, MI_OK_S, MI_OK_LEN); }
struct mi_root *ws_mi_enable(struct mi_root *cmd, void *param) { - *ws_enabled = 1; + cfg_get(websocket, ws_cfg, enabled) = 1; LM_WARN("enabling websockets\n"); return init_mi_tree(200, MI_OK_S, MI_OK_LEN); } diff --git a/modules/websocket/ws_mod.c b/modules/websocket/ws_mod.c index d7262c9..54ea209 100644 --- a/modules/websocket/ws_mod.c +++ b/modules/websocket/ws_mod.c @@ -28,6 +28,7 @@ #include "../../sr_module.h" #include "../../tcp_conn.h" #include "../../timer_proc.h" +#include "../../cfg/cfg.h" #include "../../lib/kcore/kstats_wrapper.h" #include "../../lib/kmi/mi.h" #include "../../mem/mem.h" @@ -47,11 +48,13 @@ static int child_init(int rank); static void destroy(void);
sl_api_t ws_slb; -int *ws_enabled;
#define DEFAULT_KEEPALIVE_INTERVAL 1 static int ws_keepalive_interval = DEFAULT_KEEPALIVE_INTERVAL;
+#define DEFAULT_KEEPALIVE_TIMEOUT 180 /* seconds */ +static int ws_keepalive_timeout = DEFAULT_KEEPALIVE_TIMEOUT; + #define DEFAULT_KEEPALIVE_PROCESSES 1 static int ws_keepalive_processes = DEFAULT_KEEPALIVE_PROCESSES;
@@ -151,6 +154,30 @@ struct module_exports exports= child_init /* per-child initialization function */ };
+static cfg_def_t ws_cfg_def[] = +{ + /* ws_frame.c */ + { "keepalive_timeout", CFG_VAR_INT | CFG_ATOMIC, + 0, 0, 0, 0, + "Time (in seconds) after which to send a keep-alive on idle" + " WebSocket connections." }, + + /* ws_handshake.c */ + { "enabled", CFG_VAR_INT | CFG_ATOMIC, + 0, 0, 0, 0, + "Shows whether WebSockets are enabled or not." }, + + { 0, 0, 0, 0, 0, 0 } +}; + +struct cfg_group_websocket default_ws_cfg = +{ + DEFAULT_KEEPALIVE_TIMEOUT, /* keepalive_timeout */ + 1 /* enabled */ +}; +void *ws_cfg = &default_ws_cfg; + + static int mod_init(void) { if (sl_load_api(&ws_slb) != 0) @@ -189,14 +216,6 @@ static int mod_init(void) goto error; }
- if ((ws_enabled = (int *) shm_malloc(sizeof(int))) == NULL) - { - LM_ERR("allocating shared memory\n"); - goto error; - } - *ws_enabled = 1; - - if (ws_ping_application_data.s != 0) ws_ping_application_data.len = strlen(ws_ping_application_data.s); @@ -249,12 +268,17 @@ static int mod_init(void) goto error; }
+ if (cfg_declare("websocket", ws_cfg_def, &default_ws_cfg, + cfg_sizeof(websocket), &ws_cfg)) { + LM_ERR("declaring configuration\n"); + return -1; + } + cfg_get(websocket, ws_cfg, keepalive_timeout) = ws_keepalive_timeout; + return 0;
error: wsconn_destroy(); - shm_free(ws_enabled); - return -1; }
@@ -287,5 +311,4 @@ static int child_init(int rank) static void destroy(void) { wsconn_destroy(); - shm_free(ws_enabled); } diff --git a/modules/websocket/ws_mod.h b/modules/websocket/ws_mod.h index fb96212..fa47b3b 100644 --- a/modules/websocket/ws_mod.h +++ b/modules/websocket/ws_mod.h @@ -35,9 +35,15 @@ enum };
extern sl_api_t ws_slb; -extern int *ws_enabled; extern gen_lock_t *ws_stats_lock;
extern int ws_ping_interval; /* time (in seconds) between sending Pings */
+struct cfg_group_websocket +{ + int keepalive_timeout; + int enabled; +}; +extern void *ws_cfg; /* module configuration structure */ + #endif /* _WS_MOD_H */