From 8f9637d3f442a9713cc94dd6626697ebb016858f Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 6 Mar 2009 02:06:32 +0000 Subject: [PATCH] LIBDING-11 use svn update; make iks-reconf; make current git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12478 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- libs/iksemel/build/libgnutls.m4 | 2 +- libs/iksemel/src/stream.c | 53 ++++++++++++++++++- .../endpoints/mod_dingaling/mod_dingaling.c | 7 +-- 3 files changed, 56 insertions(+), 6 deletions(-) diff --git a/libs/iksemel/build/libgnutls.m4 b/libs/iksemel/build/libgnutls.m4 index 5d7dd2b9aa..01cea5a95d 100644 --- a/libs/iksemel/build/libgnutls.m4 +++ b/libs/iksemel/build/libgnutls.m4 @@ -31,7 +31,7 @@ AC_ARG_WITH(libgnutls-prefix, no_libgnutls=yes else LIBGNUTLS_CFLAGS=`$LIBGNUTLS_CONFIG $libgnutls_config_args --cflags` - LIBGNUTLS_LIBS=`$LIBGNUTLS_CONFIG $libgnutls_config_args --libs` + LIBGNUTLS_LIBS="`$LIBGNUTLS_CONFIG $libgnutls_config_args --libs` -lpthread" libgnutls_config_version=`$LIBGNUTLS_CONFIG $libgnutls_config_args --version` diff --git a/libs/iksemel/src/stream.c b/libs/iksemel/src/stream.c index 6bb316e89a..edbcf3047f 100644 --- a/libs/iksemel/src/stream.c +++ b/libs/iksemel/src/stream.c @@ -4,6 +4,14 @@ ** modify it under the terms of GNU Lesser General Public License. */ +#include "config.h" +#ifdef HAVE_GNUTLS +#define _XOPEN_SOURCE 500 +#define _GNU_SOURCE +#include +#endif + + #include "common.h" #include "iksemel.h" @@ -37,14 +45,17 @@ struct stream_data { }; #ifdef HAVE_GNUTLS +static pthread_mutex_t tls_send_mutex; +static pthread_mutex_t tls_recv_mutex; static size_t tls_push (iksparser *prs, const char *buffer, size_t len) { struct stream_data *data = iks_user_data (prs); int ret; - + pthread_mutex_lock(&tls_send_mutex); ret = data->trans->send (data->sock, buffer, len); + pthread_mutex_unlock(&tls_send_mutex); if (ret) return (size_t) -1; return len; } @@ -54,8 +65,9 @@ tls_pull (iksparser *prs, char *buffer, size_t len) { struct stream_data *data = iks_user_data (prs); int ret; - + pthread_mutex_lock(&tls_recv_mutex); ret = data->trans->recv (data->sock, buffer, len, -1); + pthread_mutex_unlock(&tls_recv_mutex); if (ret == -1) return (size_t) -1; return ret; } @@ -584,6 +596,43 @@ iks_is_secure (iksparser *prs) return 0; #endif } +#ifdef HAVE_GNUTLS + + +int +iks_init(void) +{ + int ok = 0; + pthread_mutexattr_t attr; + + if (pthread_mutexattr_init(&attr)) + return -1; + + if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE)) + ok = -1; + + if (ok == 0 && pthread_mutex_init(&tls_send_mutex, &attr)) + ok = -1; + + if (ok == 0 && pthread_mutex_init(&tls_recv_mutex, &attr)) { + pthread_mutex_destroy(&tls_send_mutex); + ok = -1; + } + + + pthread_mutexattr_destroy(&attr); + + return ok; + +} +#else +int +iks_init(void) +{ + return 0; +} +#endif + int iks_start_tls (iksparser *prs) diff --git a/src/mod/endpoints/mod_dingaling/mod_dingaling.c b/src/mod/endpoints/mod_dingaling/mod_dingaling.c index c9a5eed172..77b6cdb3c4 100644 --- a/src/mod/endpoints/mod_dingaling/mod_dingaling.c +++ b/src/mod/endpoints/mod_dingaling/mod_dingaling.c @@ -2495,9 +2495,10 @@ static ldl_status handle_signalling(ldl_handle_t *handle, ldl_session_t *dlsessi } from = ffrom; } - - - switch_core_chat_send(proto, MDL_CHAT_PROTO, from, to, subject, switch_str_nil(msg), NULL, hint); + + if (strcasecmp(proto, MDL_CHAT_PROTO)) { /* yes no ! on purpose */ + switch_core_chat_send(proto, MDL_CHAT_PROTO, from, to, subject, switch_str_nil(msg), NULL, hint); + } switch_safe_free(pproto); switch_safe_free(ffrom);