Remove the dual-callback scheme for numeric and pointer thread IDs,
[oweals/openssl.git] / ssl / s3_pkt.c
index 58f2845d6e024f070074921adb152a537f906b3d..07dd4b23d5204b6840c2b01e4af48d449ebafe76 100644 (file)
@@ -129,16 +129,21 @@ int ssl3_read_n(SSL *s, int n, int max, int extend)
         * (If s->read_ahead is set, 'max' bytes may be stored in rbuf
         * [plus s->packet_length bytes if extend == 1].)
         */
-       int i,len,left,align=0;
+       int i,len,left;
+       long align=0;
        unsigned char *pkt;
        SSL3_BUFFER *rb;
 
        if (n <= 0) return n;
 
        rb    = &(s->s3->rbuf);
+       if (rb->buf == NULL)
+               if (!ssl3_setup_read_buffer(s))
+                       return -1;
+
        left  = rb->left;
 #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0
-       align = (int)rb->buf + SSL3_RT_HEADER_LENGTH;
+       align = (long)rb->buf + SSL3_RT_HEADER_LENGTH;
        align = (-align)&(SSL3_ALIGN_PAYLOAD-1);
 #endif
 
@@ -233,6 +238,9 @@ int ssl3_read_n(SSL *s, int n, int max, int extend)
                if (i <= 0)
                        {
                        rb->left = left;
+                       if (s->mode & SSL_MODE_RELEASE_BUFFERS)
+                               if (len+left == 0)
+                                       ssl3_release_read_buffer(s);
                        return(i);
                        }
                left+=i;
@@ -602,11 +610,16 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
        {
        unsigned char *p,*plen;
        int i,mac_size,clear=0;
-       int prefix_len=0,align=0;
+       int prefix_len=0;
+       long align=0;
        SSL3_RECORD *wr;
        SSL3_BUFFER *wb=&(s->s3->wbuf);
        SSL_SESSION *sess;
 
+       if (wb->buf == NULL)
+               if (!ssl3_setup_write_buffer(s))
+                       return -1;
+
        /* first check if there is a SSL3_BUFFER still being written
         * out.  This will happen with non blocking IO */
        if (wb->left != 0)
@@ -672,7 +685,7 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
                 * which would be multiple of SSL3_ALIGN_PAYLOAD, so
                 * if we want to align the real payload, then we can
                 * just pretent we simply have two headers. */
-               align = (int)wb->buf + 2*SSL3_RT_HEADER_LENGTH;
+               align = (long)wb->buf + 2*SSL3_RT_HEADER_LENGTH;
                align = (-align)&(SSL3_ALIGN_PAYLOAD-1);
 #endif
                p = wb->buf + align;
@@ -685,7 +698,7 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
        else
                {
 #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0
-               align = (int)wb->buf + SSL3_RT_HEADER_LENGTH;
+               align = (long)wb->buf + SSL3_RT_HEADER_LENGTH;
                align = (-align)&(SSL3_ALIGN_PAYLOAD-1);
 #endif
                p = wb->buf + align;
@@ -810,6 +823,8 @@ int ssl3_write_pending(SSL *s, int type, const unsigned char *buf,
                        {
                        wb->left=0;
                        wb->offset+=i;
+                       if (s->mode & SSL_MODE_RELEASE_BUFFERS)
+                               ssl3_release_write_buffer(s);
                        s->rwstate=SSL_NOTHING;
                        return(s->s3->wpend_ret);
                        }
@@ -855,7 +870,7 @@ int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek)
        void (*cb)(const SSL *ssl,int type2,int val)=NULL;
 
        if (s->s3->rbuf.buf == NULL) /* Not initialized yet */
-               if (!ssl3_setup_buffers(s))
+               if (!ssl3_setup_read_buffer(s))
                        return(-1);
 
        if ((type && (type != SSL3_RT_APPLICATION_DATA) && (type != SSL3_RT_HANDSHAKE) && type) ||
@@ -964,6 +979,8 @@ start:
                                {
                                s->rstate=SSL_ST_READ_HEADER;
                                rr->off=0;
+                               if (s->mode & SSL_MODE_RELEASE_BUFFERS)
+                                       ssl3_release_read_buffer(s);
                                }
                        }
                return(n);
@@ -1307,8 +1324,6 @@ int ssl3_do_change_cipher_spec(SSL *s)
                }
 
        s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s,
-               &(s->s3->finish_dgst1),
-               &(s->s3->finish_dgst2),
                sender,slen,s->s3->tmp.peer_finish_md);
 
        return(1);