From: Nikos Mavrogiannopoulos Date: Mon, 9 Apr 2012 11:17:01 +0000 (+0200) Subject: gnutls_record_check_pending functionality was divided to gnutls_record_check_pending... X-Git-Tag: gnutls_3_0_19~20 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=56df68691364f1bc0b0809710d575fa285210ece;p=thirdparty%2Fgnutls.git gnutls_record_check_pending functionality was divided to gnutls_record_check_pending and gnutls_record_check_unprocessed. --- diff --git a/NEWS b/NEWS index dd64b59f6e..13b787b191 100644 --- a/NEWS +++ b/NEWS @@ -4,12 +4,17 @@ See the end for copying conditions. * Version 3.0.19 (unreleased) +** libgnutls: gnutls_record_check_pending() no longer +returns unprocessed data, and thus ensure the non-blocking +of the next call to gnutls_record_recv(). To compensate +for unprocessed data, the gnutls_record_check_unprocessed() +was added. + ** tests: Disabled floating point test, and corrections in pkcs12 decoding tests. ** API and ABI modifications: -No changes since last version. - +gnutls_record_check_unprocessed: Added * Version 3.0.18 (released 2012-04-02) diff --git a/lib/gnutls_buffers.c b/lib/gnutls_buffers.c index 2d4fdc34ba..a7c00cad92 100644 --- a/lib/gnutls_buffers.c +++ b/lib/gnutls_buffers.c @@ -93,7 +93,23 @@ _gnutls_record_buffer_put (gnutls_session_t session, size_t gnutls_record_check_pending (gnutls_session_t session) { - return _gnutls_record_buffer_get_size (session) + session->internals.record_recv_buffer.byte_length; + return _gnutls_record_buffer_get_size (session); +} + +/** + * gnutls_record_check_unprocessed: + * @session: is a #gnutls_session_t structure. + * + * This function checks if there are unprocessed data + * in the gnutls record buffers. Those data might not + * be complete records. + * + * Returns: Returns the size of the data or zero. + **/ +size_t +gnutls_record_check_unprocessed (gnutls_session_t session) +{ + return session->internals.record_recv_buffer.byte_length; } int diff --git a/lib/gnutls_handshake.c b/lib/gnutls_handshake.c index f2331d023a..8dc3264ce2 100644 --- a/lib/gnutls_handshake.c +++ b/lib/gnutls_handshake.c @@ -2681,7 +2681,8 @@ _gnutls_recv_handshake_final (gnutls_session_t session, int init) * we have received it unless we notify him. So we * wait for a message and retransmit if needed. */ if (IS_DTLS(session) && !_dtls_is_async(session) && - gnutls_record_check_pending (session) == 0) + (gnutls_record_check_pending (session) + + gnutls_record_check_unprocessed (session)) == 0) { ret = _dtls_wait_and_retransmit(session); if (ret < 0) @@ -2718,7 +2719,8 @@ _gnutls_recv_handshake_final (gnutls_session_t session, int init) STATE = STATE31; if (IS_DTLS(session) && !_dtls_is_async(session) && - gnutls_record_check_pending( session) == 0) + (gnutls_record_check_pending( session) + + gnutls_record_check_unprocessed (session)) == 0) { ret = _dtls_wait_and_retransmit(session); if (ret < 0) diff --git a/lib/includes/gnutls/gnutls.h.in b/lib/includes/gnutls/gnutls.h.in index 035f63857a..be85dc96e9 100644 --- a/lib/includes/gnutls/gnutls.h.in +++ b/lib/includes/gnutls/gnutls.h.in @@ -857,6 +857,7 @@ gnutls_ecc_curve_t gnutls_ecc_curve_get(gnutls_session_t session); ssize_t gnutls_record_set_max_size (gnutls_session_t session, size_t size); size_t gnutls_record_check_pending (gnutls_session_t session); + size_t gnutls_record_check_unprocessed (gnutls_session_t session); int gnutls_prf (gnutls_session_t session, size_t label_size, const char *label,