]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Add mod_sofia support for setting socket TCP keepalive
authorTravis Cross <tc@traviscross.com>
Tue, 11 Feb 2014 06:02:54 +0000 (06:02 +0000)
committerTravis Cross <tc@traviscross.com>
Tue, 11 Feb 2014 06:27:29 +0000 (06:27 +0000)
Some OSes like linux provide a mechanism for sending TCP keepalive
pings.  Sofia provides its own mechanism for doing this in userspace.
We shouldn't conflate these two mechanisms.

FS-6104

src/mod/endpoints/mod_sofia/mod_sofia.h
src/mod/endpoints/mod_sofia/sofia.c

index 1a457b24214070a6ef719806196d99387eb3f2f7..0aac47ec6e192031447759c3a5295c52dc3ff033 100644 (file)
@@ -266,6 +266,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,
@@ -695,6 +696,7 @@ struct sofia_profile {
        switch_port_t ws_port;
        char *wss_ip;
        switch_port_t wss_port;
+       int socket_tcp_keepalive;
        int tcp_keepalive;
        int tcp_pingpong;
        int tcp_ping2pong;
index ccceababb03f97f3fdf72450beca889c99b5e737..c870ef7b6c3c0d1cdbd4b01aa96b7bd0671f535e 100644 (file)
@@ -2551,6 +2551,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),
@@ -3833,6 +3835,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);