]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
gnutls_record_check_pending functionality was divided to gnutls_record_check_pending...
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Mon, 9 Apr 2012 11:17:01 +0000 (13:17 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Mon, 9 Apr 2012 11:17:01 +0000 (13:17 +0200)
NEWS
lib/gnutls_buffers.c
lib/gnutls_handshake.c
lib/includes/gnutls/gnutls.h.in

diff --git a/NEWS b/NEWS
index dd64b59f6ecc56db289d89a1880c734a76c8d2ed..13b787b1919486b67ec53515c17e6d7ddc7fab0f 100644 (file)
--- 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)
 
index 2d4fdc34bac86b9f392e12d3fc9b9c6a82f1b4ca..a7c00cad9223897223b7a38f512f0292856b72f1 100644 (file)
@@ -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
index f2331d023a49ae96e979e3f6b33e02263ce55529..8dc3264ce219aeb8644537dcc8c5eab9df02c53f 100644 (file)
@@ -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)
index 035f63857aa8d8feda0f254986faa48022c7691b..be85dc96e9e567abb4a13c3845626c05d4759d9f 100644 (file)
@@ -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,