From: Ghislain MARY Date: Mon, 21 Jan 2013 10:25:38 +0000 (+0100) Subject: Add tcp_tls_keepalive configuration option to (de)activate SIP keepalive for TCP... X-Git-Url: http://sjero.net/git/?p=linphone;a=commitdiff_plain;h=622af47cb2f519b832a72049ddd2fdc4ea32cce4 Add tcp_tls_keepalive configuration option to (de)activate SIP keepalive for TCP/TLS. --- diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 28488e1d..3904afc9 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -635,7 +635,8 @@ static void sip_config_read(LinphoneCore *lc) lc->sip_conf.ping_with_options=lp_config_get_int(lc->config,"sip","ping_with_options",1); lc->sip_conf.auto_net_state_mon=lp_config_get_int(lc->config,"sip","auto_net_state_mon",1); lc->sip_conf.keepalive_period=lp_config_get_int(lc->config,"sip","keepalive_period",10000); - sal_set_keepalive_period(lc->sal,lc->sip_conf.keepalive_period); + lc->sip_conf.tcp_tls_keepalive=lp_config_get_int(lc->config,"sip","tcp_tls_keepalive",0); + linphone_core_enable_keep_alive(lc, (lc->sip_conf.keepalive_period > 0)); sal_use_one_matching_codec_policy(lc->sal,lp_config_get_int(lc->config,"sip","only_one_codec",0)); sal_use_double_registrations(lc->sal,lp_config_get_int(lc->config,"sip","use_double_registrations",1)); sal_use_dates(lc->sal,lp_config_get_int(lc->config,"sip","put_date",0)); @@ -5170,6 +5171,7 @@ const char *linphone_error_to_string(LinphoneReason err){ */ void linphone_core_enable_keep_alive(LinphoneCore* lc,bool_t enable) { if (enable > 0) { + sal_use_tcp_tls_keepalive(lc->sal,lc->sip_conf.tcp_tls_keepalive); sal_set_keepalive_period(lc->sal,lc->sip_conf.keepalive_period); } else { sal_set_keepalive_period(lc->sal,0); diff --git a/coreapi/private.h b/coreapi/private.h index 5c09974b..edb717ae 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -399,6 +399,7 @@ typedef struct sip_config bool_t register_only_when_network_is_up; bool_t ping_with_options; bool_t auto_net_state_mon; + bool_t tcp_tls_keepalive; } sip_config_t; typedef struct rtp_config diff --git a/coreapi/sal.h b/coreapi/sal.h index 9c0ceca7..ba6daa22 100644 --- a/coreapi/sal.h +++ b/coreapi/sal.h @@ -343,6 +343,7 @@ ortp_socket_t sal_get_socket(Sal *ctx); void sal_set_user_agent(Sal *ctx, const char *user_agent); /*keepalive period in ms*/ void sal_set_keepalive_period(Sal *ctx,unsigned int value); +void sal_use_tcp_tls_keepalive(Sal *ctx, bool_t enabled); /** * returns keepalive period in ms * 0 desactiaved diff --git a/coreapi/sal_eXosip2.c b/coreapi/sal_eXosip2.c index 93686a75..d8332621 100644 --- a/coreapi/sal_eXosip2.c +++ b/coreapi/sal_eXosip2.c @@ -397,7 +397,8 @@ int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int i bool_t ipv6; int proto=IPPROTO_UDP; int keepalive = ctx->keepalive_period; - + + ctx->transport = tr; switch (tr) { case SalTransportUDP: proto=IPPROTO_UDP; @@ -406,7 +407,7 @@ int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int i case SalTransportTCP: case SalTransportTLS: proto= IPPROTO_TCP; - keepalive=-1; + if (!ctx->tcp_tls_keepalive) keepalive=-1; eXosip_set_option (EXOSIP_OPT_UDP_KEEP_ALIVE,&keepalive); set_tls_options(ctx); break; @@ -2512,9 +2513,24 @@ void sal_address_destroy(SalAddress *u){ osip_from_free((osip_from_t*)u); } +void sal_use_tcp_tls_keepalive(Sal *ctx, bool_t enabled) { + ctx->tcp_tls_keepalive = enabled; +} + void sal_set_keepalive_period(Sal *ctx,unsigned int value) { - ctx->keepalive_period=value; - eXosip_set_option (EXOSIP_OPT_UDP_KEEP_ALIVE, &value); + switch (ctx->transport) { + case SalTransportUDP: + ctx->keepalive_period = value; + break; + case SalTransportTCP: + case SalTransportTLS: + if (ctx->tcp_tls_keepalive) ctx->keepalive_period = value; + else ctx->keepalive_period = -1; + break; + default: + break; + } + eXosip_set_option (EXOSIP_OPT_UDP_KEEP_ALIVE, &ctx->keepalive_period); } unsigned int sal_get_keepalive_period(Sal *ctx) { return ctx->keepalive_period; diff --git a/coreapi/sal_eXosip2.h b/coreapi/sal_eXosip2.h index 89ac93ab..81e3ed9a 100644 --- a/coreapi/sal_eXosip2.h +++ b/coreapi/sal_eXosip2.h @@ -30,6 +30,7 @@ int sdp_to_media_description(sdp_message_t *sdp, SalMediaDescription *desc); struct Sal{ SalCallbacks callbacks; + SalTransport transport; MSList *calls; /*MSList of SalOp */ MSList *registers;/*MSList of SalOp */ MSList *out_subscribes;/*MSList of SalOp */ @@ -51,6 +52,7 @@ struct Sal{ bool_t verify_server_cn; bool_t expire_old_contact; bool_t add_dates; + bool_t tcp_tls_keepalive; }; struct SalOp{