From bd6a9737485893b0bc08ffe75dfea6f71115b73c Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Tue, 28 Aug 2012 15:37:48 +0200 Subject: [PATCH] use exosip_reset_transport when possible --- coreapi/linphonecore.c | 5 +---- coreapi/sal.h | 1 + coreapi/sal_eXosip2.c | 37 +++++++++++++++++++++++++++---------- m4/exosip.m4 | 4 ++++ 4 files changed, 33 insertions(+), 14 deletions(-) diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 76b823d0f..de91532c9 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -4678,11 +4678,8 @@ static void set_network_reachable(LinphoneCore* lc,bool_t isReachable, time_t cu lc->netup_time=curtime; lc->network_reachable=isReachable; if(!isReachable) { - sal_unlisten_ports (lc->sal); - } else { - apply_transports(lc); + sal_reset_transports(lc->sal); } - } void linphone_core_refresh_registers(LinphoneCore* lc) { diff --git a/coreapi/sal.h b/coreapi/sal.h index 0d2b631d8..616b0aba9 100644 --- a/coreapi/sal.h +++ b/coreapi/sal.h @@ -321,6 +321,7 @@ void sal_auth_info_delete(const SalAuthInfo* auth_info); void sal_set_callbacks(Sal *ctx, const SalCallbacks *cbs); int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int is_secure); int sal_unlisten_ports(Sal *ctx); +int sal_reset_transports(Sal *ctx); ortp_socket_t sal_get_socket(Sal *ctx); void sal_set_user_agent(Sal *ctx, const char *user_agent); /*keepalive period in ms*/ diff --git a/coreapi/sal_eXosip2.c b/coreapi/sal_eXosip2.c index 76d7973d9..aa9116aa5 100644 --- a/coreapi/sal_eXosip2.c +++ b/coreapi/sal_eXosip2.c @@ -353,6 +353,32 @@ int sal_unlisten_ports(Sal *ctx){ return 0; } +int sal_reset_transports(Sal *ctx){ +#ifdef HAVE_EXOSIP_RESET_TRANSPORTS + if (ctx->running){ + ms_message("Exosip transports reset."); + eXosip_reset_transports(); + } + return 0; +#else + ms_warning("sal_reset_transports() not implemented in this version."); + return -1; +#endif +} + + +static void set_tls_options(Sal *ctx){ + if (ctx->rootCa) { + eXosip_tls_ctx_t tlsCtx; + memset(&tlsCtx, 0, sizeof(tlsCtx)); + snprintf(tlsCtx.root_ca_cert, sizeof(tlsCtx.client.cert), "%s", ctx->rootCa); + eXosip_set_tls_ctx(&tlsCtx); + } +#ifdef HAVE_EXOSIP_TLS_VERIFY_CERTIFICATE + eXosip_tls_verify_certificate(ctx->verify_server_certs); +#endif +} + int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int is_secure){ int err; bool_t ipv6; @@ -369,16 +395,7 @@ int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int i proto= IPPROTO_TCP; keepalive=-1; eXosip_set_option (EXOSIP_OPT_UDP_KEEP_ALIVE,&keepalive); - - if (ctx->rootCa) { - eXosip_tls_ctx_t tlsCtx; - memset(&tlsCtx, 0, sizeof(tlsCtx)); - snprintf(tlsCtx.root_ca_cert, sizeof(tlsCtx.client.cert), "%s", ctx->rootCa); - eXosip_set_tls_ctx(&tlsCtx); - } -#ifdef HAVE_EXOSIP_TLS_VERIFY_CERTIFICATE - eXosip_tls_verify_certificate(ctx->verify_server_certs); -#endif + set_tls_options(ctx); break; default: ms_warning("unexpected proto, using datagram"); diff --git a/m4/exosip.m4 b/m4/exosip.m4 index 51419d48a..129b28570 100644 --- a/m4/exosip.m4 +++ b/m4/exosip.m4 @@ -50,6 +50,10 @@ AC_CHECK_LIB([eXosip2],[eXosip_trylock], [AC_DEFINE([HAVE_EXOSIP_TRYLOCK],[1],[Defined when eXosip_get_socket is available])], [], [-losipparser2 -losip2 ]) +AC_CHECK_LIB([eXosip2],[eXosip_reset_transports], + [AC_DEFINE([HAVE_EXOSIP_RESET_TRANSPORTS],[1],[Defined when eXosip_reset_transports is available])], + [], + [-losipparser2 -losip2 ]) dnl AC_CHECK_LIB([eXosip2],[eXosip_get_naptr], dnl [AC_DEFINE([HAVE_EXOSIP_NAPTR_SUPPORT],[1],[Defined when eXosip_get_naptr is available])], dnl [],