From 115061a4da93f9c2c1730b3801ba3391480b4c24 Mon Sep 17 00:00:00 2001 From: Brian West Date: Thu, 25 Apr 2013 13:34:07 -0500 Subject: [PATCH] Add application layer keepalive options to sofia and expose config options Conflicts: src/mod/endpoints/mod_sofia/mod_sofia.h --- src/mod/endpoints/mod_sofia/mod_sofia.h | 6 ++++++ src/mod/endpoints/mod_sofia/sofia.c | 19 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index 269b5577e0..e0833e6b62 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -282,6 +282,9 @@ typedef enum { PFLAG_FIRE_MESSAGE_EVENTS, PFLAG_SEND_DISPLAY_UPDATE, PFLAG_RUNNING_TRANS, + PFLAG_TCP_KEEPALIVE, + PFLAG_TCP_PINGPONG, + PFLAG_TCP_PING2PONG, /* No new flags below this line */ PFLAG_MAX } PFLAGS; @@ -703,6 +706,9 @@ struct sofia_profile { uint32_t rtp_digit_delay; switch_queue_t *event_queue; switch_thread_t *thread; + int tcp_keepalive; + int tcp_pingpong; + int tcp_ping2pong; }; struct private_object { diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 3060308a54..b48b08bda1 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -2418,8 +2418,14 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void NTATAG_USE_SRV(0)), TAG_IF(sofia_test_pflag(profile, PFLAG_DISABLE_NAPTR), NTATAG_USE_NAPTR(0)), + TAG_IF(sofia_test_pflag(profile, PFLAG_TCP_PINGPONG), + TPTAG_PINGPONG(profile->tcp_pingpong)), + TAG_IF(sofia_test_pflag(profile, PFLAG_TCP_PING2PONG), + TPTAG_PINGPONG(profile->tcp_ping2pong)), TAG_IF(sofia_test_pflag(profile, PFLAG_DISABLE_SRV503), NTATAG_SRV_503(0)), + TAG_IF(sofia_test_pflag(profile, PFLAG_TCP_KEEPALIVE), + TPTAG_KEEPALIVE(profile->tcp_keepalive)), NTATAG_DEFAULT_PROXY(profile->outbound_proxy), NTATAG_SERVER_RPORT(profile->server_rport_level), NTATAG_CLIENT_RPORT(profile->client_rport_level), @@ -3641,8 +3647,17 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name) } else if (!strcasecmp(var, "sip-trace") && switch_true(val)) { sofia_set_flag(profile, TFLAG_TPORT_LOG); } else if (!strcasecmp(var, "sip-capture") && switch_true(val)) { - sofia_set_flag(profile, TFLAG_CAPTURE); - nua_set_params(profile->nua, TPTAG_CAPT(mod_sofia_globals.capture_server), TAG_END()); + sofia_set_flag(profile, TFLAG_CAPTURE); + nua_set_params(profile->nua, TPTAG_CAPT(mod_sofia_globals.capture_server), TAG_END()); + } else if (!strcasecmp(var, "tcp-keepalive") && !zstr(val)) { + profile->tcp_keepalive = atoi(val); + sofia_set_pflag(profile, PFLAG_TCP_KEEPALIVE); + } else if (!strcasecmp(var, "tcp-pingpong") && !zstr(val)) { + profile->tcp_pingpong = atoi(val); + sofia_set_pflag(profile, PFLAG_TCP_PINGPONG); + } else if (!strcasecmp(var, "tcp-ping2pong") && !zstr(val)) { + profile->tcp_ping2pong = atoi(val); + sofia_set_pflag(profile, PFLAG_TCP_PING2PONG); } else if (!strcasecmp(var, "odbc-dsn") && !zstr(val)) { profile->odbc_dsn = switch_core_strdup(profile->pool, val); } else if (!strcasecmp(var, "db-pre-trans-execute") && !zstr(val)) {