]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Revert "in DTLS don't use writev() when multiple packets which exceed MTU are queued"
authorNikos Mavrogiannopoulos <nmav@redhat.com>
Tue, 6 Jan 2015 08:59:33 +0000 (09:59 +0100)
committerNikos Mavrogiannopoulos <nmav@redhat.com>
Tue, 6 Jan 2015 08:59:33 +0000 (09:59 +0100)
This reverts commit 43082a67c7514d65301d157fb567a133138a85ab.

lib/gnutls_buffers.c
lib/gnutls_state.c
lib/system.c
lib/system.h

index ef2ad236b322ba883bba5c48ba091bed978bf383..24e52b1b96deabc2e4f84951345b00e8adcbee7a 100644 (file)
@@ -460,30 +460,14 @@ _gnutls_writev_emu(gnutls_session_t session, gnutls_transport_ptr_t fd,
 
 static ssize_t
 _gnutls_writev(gnutls_session_t session, const giovec_t * giovec,
-              unsigned giovec_cnt)
+              int giovec_cnt)
 {
        int i;
-       bool is_dtls = IS_DTLS(session);
-       bool no_writev = 0;
        gnutls_transport_ptr_t fd = session->internals.transport_send_ptr;
 
        reset_errno(session);
 
-       /* In DTLS we use writev() only when the total sum is less than
-        * the MTU. */
-
-       if (is_dtls && giovec_cnt > 1) {
-               unsigned sum = 0, j;
-               for (j = 0; j < giovec_cnt; j++) {
-                       sum += giovec[j].iov_len;
-               }
-
-               if (sum > session->internals.dtls.mtu) {
-                       no_writev = 1;
-               }
-       }
-
-       if (session->internals.push_func != NULL || no_writev != 0)
+       if (session->internals.push_func != NULL)
                i = _gnutls_writev_emu(session, fd, giovec, giovec_cnt);
        else
                i = session->internals.vec_push_func(fd, giovec,
@@ -493,7 +477,7 @@ _gnutls_writev(gnutls_session_t session, const giovec_t * giovec,
                int err = get_errno(session);
                _gnutls_debug_log("errno: %d\n", err);
 
-               return errno_to_gerr(err, is_dtls);
+               return errno_to_gerr(err, IS_DTLS(session));
        }
        return i;
 }
index c964822bcb9b2ec631560b123bc99882757d6f11..623e9cfd5e2aa6dbbad1bde21b8226e38cfb03aa 100644 (file)
@@ -376,8 +376,9 @@ int gnutls_init(gnutls_session_t * session, unsigned int flags)
 
 #ifdef HAVE_WRITEV
        gnutls_transport_set_vec_push_function(*session, system_writev);
-#endif
+#else
        gnutls_transport_set_push_function(*session, system_write);
+#endif
        (*session)->internals.pull_timeout_func = system_recv_timeout;
        (*session)->internals.pull_func = system_read;
        (*session)->internals.errno_func = system_errno;
index 9504cfe8c62ed19da21b00ddccc3aec8bac461d9..d866e19aa3dbfd2ff1cc4faebc801511a4544a85 100644 (file)
@@ -60,12 +60,6 @@ static HMODULE Crypt32_dll;
 /* System specific function wrappers.
  */
 
-ssize_t
-system_write(gnutls_transport_ptr ptr, const void *data, size_t data_size)
-{
-       return send(GNUTLS_POINTER_TO_INT(ptr), data, data_size, 0);
-}
-
 #ifdef _WIN32
 /* Do not use the gnulib functions for sending and receiving data.
  * Using them makes gnutls only working with gnulib applications.
@@ -100,6 +94,11 @@ int system_errno(gnutls_transport_ptr p)
        return ret;
 }
 
+ssize_t
+system_write(gnutls_transport_ptr ptr, const void *data, size_t data_size)
+{
+       return send(GNUTLS_POINTER_TO_INT(ptr), data, data_size, 0);
+}
 #else                          /* POSIX */
 int system_errno(gnutls_transport_ptr_t ptr)
 {
index f9b067538c4db8a7a928263b55a25745a24797b0..d94b1564ee2b34eb821393623482d7a6dc3e0082 100644 (file)
 int system_errno(gnutls_transport_ptr_t);
 int system_recv_timeout(gnutls_transport_ptr_t ptr, unsigned int ms);
 
+#ifdef _WIN32
 ssize_t system_write(gnutls_transport_ptr_t ptr, const void *data,
                     size_t data_size);
-#ifndef _WIN32
+#else
 #define HAVE_WRITEV
 ssize_t system_writev(gnutls_transport_ptr_t ptr, const giovec_t * iovec,
                      int iovec_cnt);