]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
improved peek data handling - now keeps only 1 byte in kernel buffer
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Mon, 11 Dec 2000 23:43:19 +0000 (23:43 +0000)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Mon, 11 Dec 2000 23:43:19 +0000 (23:43 +0000)
lib/gnutls.c
lib/gnutls_int.h

index 00cee2321c36e9104b4d3e646496d61063fa1faf..5253c1ec6138d735a2a2f1bade694a21cda9e42e 100644 (file)
@@ -117,7 +117,6 @@ int gnutls_init(GNUTLS_STATE * state, ConnectionEnd con_end)
        (*state)->gnutls_internals.resumed_security_parameters.session_id_size = 0;
        (*state)->gnutls_internals.resumed = RESUME_FALSE;
 
-       (*state)->gnutls_internals.peek_data_size = 0;
        return 0;
 }
 
@@ -495,15 +494,10 @@ ssize_t _gnutls_send_change_cipher_spec(int cd, GNUTLS_STATE state)
 }
 
 static int _gnutls_clear_peeked_data( int cd, GNUTLS_STATE state) {
-int sizeofdata;
-char* peekdata;
+char peekdata;
 
-       sizeofdata = state->gnutls_internals.peek_data_size;
-       peekdata = gnutls_malloc(sizeofdata);
-       /* these were already read by using MSG_PEEK - so it shouldn't fail */
-       _gnutls_Read( cd, peekdata, sizeofdata, 0); 
-       gnutls_free(peekdata);
-       state->gnutls_internals.peek_data_size = 0;
+       /* this was already read by using MSG_PEEK - so it shouldn't fail */
+       _gnutls_Read( cd, &peekdata, 1, 0); 
 
        return 0;
 }
@@ -612,7 +606,9 @@ ssize_t gnutls_recv_int(int cd, GNUTLS_STATE state, ContentType type, char *data
 
        if ( type==GNUTLS_APPLICATION_DATA) {
                /* get the data - but do not free the buffer in the kernel */
-               ret = state->gnutls_internals.peek_data_size = _gnutls_Read(cd, ciphertext, length, MSG_PEEK);
+               ret = _gnutls_Read(cd, ciphertext, length-1, 0);
+               if (ret>=0)
+                       ret += _gnutls_Read(cd, &ciphertext[length-1], 1, MSG_PEEK);
        } else {
                ret = _gnutls_Read(cd, ciphertext, length, 0);
        }
index 5e15bd8a31ddee4711179fd133f6de1e2020fe97..597a10b2b3d51ac33b8721128056886eca4234b1 100644 (file)
@@ -193,8 +193,6 @@ typedef struct {
        /* resumed session */
        ResumableSession        resumed; /* TRUE or FALSE - if we are resuming a session */
        SecurityParameters  resumed_security_parameters;
-       /* to keep IO buffers ok */
-       int                             peek_data_size;
        /* For DH KX */
        MPI                             KEY;
        MPI                             client_Y;