diff options
author | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2015-01-06 09:59:33 +0100 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2015-01-06 09:59:33 +0100 |
commit | f53a7a21142e96cb9a2f807ba875179c7b3d266e (patch) | |
tree | dec2081eec1518c2f5be505a78f77fda948e1060 | |
parent | f1a141e5c247b706fb2022d50666d5f5a71bb6ff (diff) | |
download | gnutls-f53a7a21142e96cb9a2f807ba875179c7b3d266e.tar.gz |
Revert "in DTLS don't use writev() when multiple packets which exceed MTU are queued"
This reverts commit 43082a67c7514d65301d157fb567a133138a85ab.
-rw-r--r-- | lib/gnutls_buffers.c | 22 | ||||
-rw-r--r-- | lib/gnutls_state.c | 3 | ||||
-rw-r--r-- | lib/system.c | 11 | ||||
-rw-r--r-- | lib/system.h | 3 |
4 files changed, 12 insertions, 27 deletions
diff --git a/lib/gnutls_buffers.c b/lib/gnutls_buffers.c index ef2ad236b3..24e52b1b96 100644 --- a/lib/gnutls_buffers.c +++ b/lib/gnutls_buffers.c @@ -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; } diff --git a/lib/gnutls_state.c b/lib/gnutls_state.c index c964822bcb..623e9cfd5e 100644 --- a/lib/gnutls_state.c +++ b/lib/gnutls_state.c @@ -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; diff --git a/lib/system.c b/lib/system.c index 9504cfe8c6..d866e19aa3 100644 --- a/lib/system.c +++ b/lib/system.c @@ -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) { diff --git a/lib/system.h b/lib/system.h index f9b067538c..d94b1564ee 100644 --- a/lib/system.h +++ b/lib/system.h @@ -42,9 +42,10 @@ 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); |