Corresponding patch attached...

On Wed, Mar 18, 2015 at 10:57 AM, Yann Ylavic <[email protected]> wrote:
> On Wed, Mar 18, 2015 at 10:44 AM, Yann Ylavic <[email protected]> wrote:
>>
> []
>> Index: modules/proxy/mod_proxy_wstunnel.c
>> ===================================================================
>> --- modules/proxy/mod_proxy_wstunnel.c    (revision 1665828)
>> +++ modules/proxy/mod_proxy_wstunnel.c    (working copy)
> []
>> @@ -292,7 +299,15 @@ static int proxy_wstunnel_request(apr_pool_t *p, r
>>      ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r,
>>                    "finished with poll() - cleaning up");
>>
>> -    return OK;
>> +    if (!response_sent) {
>> +        return HTTP_BAD_GATEWAY;
>> +    }
>> +    else if (!request_sent) {
>> +        return HTTP_BAD_REQUEST;
>
> This case is probably not a good idea, so we'd better not handle
> request_sent at all (only response_sent), and use NULL instead for
> proxy_wstunnel_transfer().
>
>> +    }
>> +    else {
>> +        return OK;
>> +    }
>>  }
>>
>>  /*
>> --
Index: modules/proxy/mod_proxy_wstunnel.c
===================================================================
--- modules/proxy/mod_proxy_wstunnel.c	(revision 1665828)
+++ modules/proxy/mod_proxy_wstunnel.c	(working copy)
@@ -91,7 +91,8 @@ static int proxy_wstunnel_canon(request_rec *r, ch
 
 
 static int proxy_wstunnel_transfer(request_rec *r, conn_rec *c_i, conn_rec *c_o,
-                                     apr_bucket_brigade *bb, char *name)
+                                     apr_bucket_brigade *bb, char *name,
+                                     int *sent)
 {
     int rv;
 #ifdef DEBUGGING
@@ -125,6 +126,9 @@ static int proxy_wstunnel_transfer(request_rec *r,
                               "error on %s - ap_pass_brigade",
                               name);
             }
+            if (sent) {
+                *sent = 1;
+            }
         } else if (!APR_STATUS_IS_EAGAIN(rv) && !APR_STATUS_IS_EOF(rv)) {
             ap_log_rerror(APLOG_MARK, APLOG_DEBUG, rv, r, APLOGNO(02442)
                           "error on %s - ap_get_brigade",
@@ -167,6 +171,7 @@ static int proxy_wstunnel_request(apr_pool_t *p, r
     char *old_te_val = NULL;
     apr_bucket_brigade *bb = apr_brigade_create(p, c->bucket_alloc);
     apr_socket_t *client_socket = ap_get_conn_socket(c);
+    int response_sent = 0;
 
     header_brigade = apr_brigade_create(p, backconn->bucket_alloc);
 
@@ -244,7 +249,8 @@ static int proxy_wstunnel_request(apr_pool_t *p, r
                 if (pollevent & (APR_POLLIN | APR_POLLHUP)) {
                     ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(02446)
                                   "sock was readable");
-                    rv = proxy_wstunnel_transfer(r, backconn, c, bb, "sock");
+                    rv = proxy_wstunnel_transfer(r, backconn, c, bb, "sock",
+                                                 &response_sent);
                 }
                 else if (pollevent & APR_POLLERR) {
                     rv = APR_EPIPE;
@@ -263,7 +269,8 @@ static int proxy_wstunnel_request(apr_pool_t *p, r
                 if (pollevent & (APR_POLLIN | APR_POLLHUP)) {
                     ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(02448)
                                   "client was readable");
-                    rv = proxy_wstunnel_transfer(r, c, backconn, bb, "client");
+                    rv = proxy_wstunnel_transfer(r, c, backconn, bb, "client",
+                                                 NULL);
                 }
                 else if (pollevent & APR_POLLERR) {
                     rv = APR_EPIPE;
@@ -292,7 +299,12 @@ static int proxy_wstunnel_request(apr_pool_t *p, r
     ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r,
                   "finished with poll() - cleaning up");
 
-    return OK;
+    if (!response_sent) {
+        return HTTP_BAD_GATEWAY;
+    }
+    else {
+        return OK;
+    }
 }
 
 /*

Reply via email to