diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index b42a6bcdce..1e64bc981c 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -282,6 +282,7 @@ typedef enum { PFLAG_FIRE_MESSAGE_EVENTS, PFLAG_SEND_DISPLAY_UPDATE, PFLAG_RUNNING_TRANS, + PFLAG_SOCKET_TCP_KEEPALIVE, PFLAG_TCP_KEEPALIVE, PFLAG_TCP_PINGPONG, PFLAG_TCP_PING2PONG, @@ -719,6 +720,7 @@ struct sofia_profile { uint32_t rtp_digit_delay; switch_queue_t *event_queue; switch_thread_t *thread; + int socket_tcp_keepalive; int tcp_keepalive; int tcp_pingpong; int tcp_ping2pong; diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 11cd3fc0f8..0104840ca1 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -2478,6 +2478,8 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void 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_SOCKET_TCP_KEEPALIVE), + TPTAG_KEEPALIVE(profile->socket_tcp_keepalive)), TAG_IF(sofia_test_pflag(profile, PFLAG_TCP_KEEPALIVE), TPTAG_KEEPALIVE(profile->tcp_keepalive)), NTATAG_DEFAULT_PROXY(profile->outbound_proxy), @@ -3727,6 +3729,9 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name) } 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()); + } else if (!strcasecmp(var, "socket-tcp-keepalive") && !zstr(val)) { + profile->socket_tcp_keepalive = atoi(val); + sofia_set_pflag(profile, PFLAG_SOCKET_TCP_KEEPALIVE); } else if (!strcasecmp(var, "tcp-keepalive") && !zstr(val)) { profile->tcp_keepalive = atoi(val); sofia_set_pflag(profile, PFLAG_TCP_KEEPALIVE);