]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
LIBDING-11 use svn update; make iks-reconf; make current
authorAnthony Minessale <anthony.minessale@gmail.com>
Fri, 6 Mar 2009 02:06:32 +0000 (02:06 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Fri, 6 Mar 2009 02:06:32 +0000 (02:06 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12478 d0543943-73ff-0310-b7d9-9358b9ac24b2

libs/iksemel/build/libgnutls.m4
libs/iksemel/src/stream.c
src/mod/endpoints/mod_dingaling/mod_dingaling.c

index 5d7dd2b9aa66780e62612f5ab41d2b61705612c3..01cea5a95dd3b7545e7ae9e5bd3a52cd0a2497b8 100644 (file)
@@ -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`
 
 
index 6bb316e89a4d0e9cc8e8e36847a54f21850edbc7..edbcf3047fff899f93091d84aa296f62b6456a38 100644 (file)
@@ -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 <pthread.h>
+#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)
index c9a5eed172aabdc567c26aecf6b7e832c8301e53..77b6cdb3c4a46992ac398c21a4981f573cd568c5 100644 (file)
@@ -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);