summaryrefslogtreecommitdiff
path: root/res/res_pjsip/config_global.c
diff options
context:
space:
mode:
authorMatthew Jordan <mjordan@digium.com>2014-12-24 13:25:04 +0000
committerMatthew Jordan <mjordan@digium.com>2014-12-24 13:25:04 +0000
commit915bb88d3e973f647eb9d9e560688d6a02af2c2a (patch)
treee2ac99936f03dd38508f749c04021f9cde043d90 /res/res_pjsip/config_global.c
parent006ffdcfb252c358f2831ef239cebe71a084467f (diff)
res_pjsip_keepalive: Add runtime configurable keepalive module for connection-oriented transports.
Note that this is backport from trunk of r425825. This change adds a module which is configurable using the keep_alive_interval setting in the global section that will send a CRLF keep alive to all active connection-oriented transports at the provided interval. This is useful because it can help keep connections open through NATs. This functionality also exists within PJSIP but can not be controlled at runtime and requires recompiling it. Review: https://reviewboard.asterisk.org/r/4084/ ASTERISK-24644 #close git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@430084 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res/res_pjsip/config_global.c')
-rw-r--r--res/res_pjsip/config_global.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/res/res_pjsip/config_global.c b/res/res_pjsip/config_global.c
index 8e2cb2a41..1779c535d 100644
--- a/res/res_pjsip/config_global.c
+++ b/res/res_pjsip/config_global.c
@@ -42,6 +42,8 @@ struct global_config {
);
/* Value to put in Max-Forwards header */
unsigned int max_forwards;
+ /* The interval at which to send keep alive messages to active connection-oriented transports */
+ unsigned int keep_alive_interval;
};
static void global_destructor(void *obj)
@@ -114,6 +116,21 @@ char *ast_sip_get_debug(void)
return res;
}
+unsigned int ast_sip_get_keep_alive_interval(void)
+{
+ unsigned int interval;
+ struct global_config *cfg = get_global_cfg();
+
+ if (!cfg) {
+ return 0;
+ }
+
+ interval = cfg->keep_alive_interval;
+ ao2_ref(cfg, -1);
+
+ return interval;
+}
+
int ast_sip_initialize_sorcery_global(void)
{
struct ast_sorcery *sorcery = ast_sip_get_sorcery();
@@ -135,6 +152,8 @@ int ast_sip_initialize_sorcery_global(void)
OPT_STRINGFIELD_T, 0, STRFLDSET(struct global_config, default_outbound_endpoint));
ast_sorcery_object_field_register(sorcery, "global", "debug", "no",
OPT_STRINGFIELD_T, 0, STRFLDSET(struct global_config, debug));
+ ast_sorcery_object_field_register(sorcery, "global", "keep_alive_interval", "",
+ OPT_UINT_T, 0, FLDSET(struct global_config, keep_alive_interval));
return 0;
}