Author: rhuijben
Date: Wed Nov  4 00:55:46 2015
New Revision: 1712450

URL: http://svn.apache.org/viewvc?rev=1712450&view=rev
Log:
Following up on r1712447, remove write buffer but add a bit more logging
to the read buffer test.

* test/MockHTTPinC/MockHTTP_server.c
  (sslCtx_t): Add retry_len to exactly match arguments when needed.
  (initSSLCtx): Apply a few more mode flags.
  (sslSocketRead): Tweak a bit for debugging.

Modified:
    serf/trunk/test/MockHTTPinC/MockHTTP_server.c

Modified: serf/trunk/test/MockHTTPinC/MockHTTP_server.c
URL: 
http://svn.apache.org/viewvc/serf/trunk/test/MockHTTPinC/MockHTTP_server.c?rev=1712450&r1=1712449&r2=1712450&view=diff
==============================================================================
--- serf/trunk/test/MockHTTPinC/MockHTTP_server.c (original)
+++ serf/trunk/test/MockHTTPinC/MockHTTP_server.c Wed Nov  4 00:55:46 2015
@@ -2230,8 +2230,8 @@ struct sslCtx_t {
     SSL* ssl;
     BIO *bio;
 
+    apr_size_t retry_len;
     char read_buffer[8192];
-    char write_buffer[8192];
 };
 
 static int init_done = 0;
@@ -2699,7 +2699,9 @@ static apr_status_t initSSLCtx(_mhClient
         }
 #endif
 
-        SSL_CTX_set_mode(ssl_ctx->ctx, SSL_MODE_ENABLE_PARTIAL_WRITE);
+        SSL_CTX_set_mode(ssl_ctx->ctx, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER
+                                       | SSL_MODE_ENABLE_PARTIAL_WRITE
+                                       | SSL_MODE_AUTO_RETRY);
 
         ssl_ctx->bio = BIO_new(&bio_apr_socket_method);
         ssl_ctx->bio->ptr = cctx;
@@ -2720,15 +2722,11 @@ sslSocketWrite(_mhClientCtx_t *cctx, con
     sslCtx_t *ssl_ctx = cctx->ssl_ctx;
     int result, ssl_err;
 
-    if (*len > sizeof(ssl_ctx->write_buffer))
-      *len = sizeof(ssl_ctx->write_buffer);
-    memcpy(ssl_ctx->write_buffer, data, *len);
-
     if (*len == 0)
         return APR_SUCCESS;
 
     ssl_ctx->bio_status = APR_SUCCESS;
-    result = SSL_write(ssl_ctx->ssl, ssl_ctx->write_buffer, *len);
+    result = SSL_write(ssl_ctx->ssl, data, *len);
     if (result > 0) {
         *len = result;
         return APR_SUCCESS;
@@ -2784,12 +2782,15 @@ sslSocketRead(apr_socket_t *skt, void *b
 
     if (*len > sizeof(ssl_ctx->read_buffer))
       *len = sizeof(ssl_ctx->read_buffer);
+    if (ssl_ctx->retry_len)
+      *len = ssl_ctx->retry_len;
 
     ssl_ctx->bio_status = APR_SUCCESS;
     result = SSL_read(ssl_ctx->ssl, ssl_ctx->read_buffer, *len);
     if (result > 0) {
         *len = result;
         memcpy(data, ssl_ctx->read_buffer, *len);
+        ssl_ctx->retry_len = 0;
         return APR_SUCCESS;
     } else {
         int ssl_err;
@@ -2805,6 +2806,9 @@ sslSocketRead(apr_socket_t *skt, void *b
                 return ssl_ctx->bio_status;
             case SSL_ERROR_WANT_READ:
             case SSL_ERROR_WANT_WRITE:
+                ssl_ctx->retry_len = *len;
+                fprintf(stderr, "WANT %s\n", (ssl_err== SSL_ERROR_WANT_READ)
+                                               ? "read" : "write");
                 *len = 0;
                 return APR_EAGAIN;
             case SSL_ERROR_SSL:


Reply via email to