Module: sip-router
Branch: master
Commit: 688f2902977ee52d0c3d89a1f6459ca0d8c624f9
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=688f290…
Author: Peter Dunkley <peter.dunkley(a)crocodile-rcs.com>
Committer: Peter Dunkley <peter.dunkley(a)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 */