You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by "Conti, Chris" <Ch...@xcellenet.com> on 2003/05/14 23:46:58 UTC

RE: [PATCH] Enable HTTP tunneling for streaming data where data i s less than the buffering size

Repost.
Should I submit this to the bug database as a problem with HTTP tunneling?

> -----Original Message-----
> From: Conti, Chris [mailto:Chris.Conti@xcellenet.com]
> Sent: Tuesday, 06 May, 2003 10:07
> To: dev@httpd.apache.org
> Subject: [PATCH] Enable HTTP tunneling for streaming data 
> where data is
> less than the buffering size
> 
> 
> Synopsis: Optionally disable buffering in mod_proxy
> 
> We ran into a situation where a command-response protocol was 
> being tunneled
> through HTTP (2 sockets 1 is an HTTP GET, the other an HTTP POST) that
> failed when passed through an Apache reverse proxy.  The HTTP 
> requests are
> marked with keep-alive, but when the data passing from the server <
> AP_MIN_BYTES_TO_WRITE (8000 decimal) then the bucket brigade 
> buffers the
> data instead of passing it on.
> 
> The guts of the patch are basically appending a flush bucket 
> after every
> read(unless there is already an EOS) if the ProxyWriteThrough 
> directive is
> set to On
> 
> 
> ---------------------------------------------------------
> Chris Conti
> cmconti@mindspring.com
> chris.conti@xcellenet.com
> 
> diff -u \ApacheSrc\httpd-2.0.45\modules\proxy\proxy_http.c
> \ApacheSrc-orig\httpd-2.0.45\modules\proxy\proxy_http.c
> --- \ApacheSrc\httpd-2.0.45\modules\proxy\proxy_http.c  2003-05-02
> 16:22:53.000000000 -0400
> +++ \ApacheSrc-orig\httpd-2.0.45\modules\proxy\proxy_http.c   
>   2003-02-03
> 10:31:50.000000000 -0500
> @@ -956,18 +956,6 @@
>                          /* signal that we must leave */
>                          finish = TRUE;
>                      }
> -
> -                    /* do we need to always send the data? */
> -                    if (conf->write_through  && !finish){
> -                        apr_off_t readbytes;
> -                        apr_brigade_length(bb, 0, &readbytes);
> -
> -
> -                        if(0 != readbytes){
> -                            apr_bucket *e =
> apr_bucket_flush_create(c->bucket_alloc);
> -                            APR_BRIGADE_INSERT_TAIL(bb, e);
> -                        }
> -                    }
> 
>                      /* try send what we read */
>                      if (ap_pass_brigade(r->output_filters, bb) !=
> APR_SUCCESS)
> {
> 
> 
> diff -u \ApacheSrc\httpd-2.0.45\modules\proxy\mod_proxy.h
> \ApacheSrc-orig\httpd-2.0.45\modules\proxy\mod_proxy.h
> --- \ApacheSrc\httpd-2.0.45\modules\proxy\mod_proxy.h   2003-04-29
> 09:20:12.000000000 -0400
> +++ \ApacheSrc-orig\httpd-2.0.45\modules\proxy\mod_proxy.h    
>   2003-02-03
> 10:31:50.000000000 -0500
> @@ -201,8 +201,6 @@
>        bad_body
>      } badopt;                   /* how to deal with bad headers */
>      char badopt_set;
> -    int  write_through;
> -    char write_through_set;
> 
>  } proxy_server_conf;
> 
> 
> 
> diff -u \ApacheSrc\httpd-2.0.45\modules\proxy\mod_proxy.c
> \ApacheSrc-orig\httpd-2.0.45\modules\proxy\mod_proxy.c
> --- \ApacheSrc\httpd-2.0.45\modules\proxy\mod_proxy.c   2003-04-29
> 09:20:12.000000000 -0400
> +++ \ApacheSrc-orig\httpd-2.0.45\modules\proxy\mod_proxy.c    
>   2003-02-22
> 11:38:14.000000000 -0500
> @@ -503,8 +503,6 @@
>      ps->timeout_set = 0;
>      ps->badopt = bad_error;
>      ps->badopt_set = 0;
> -    ps->write_through = 0;
> -    ps->write_through_set = 0;
>      return ps;
>  }
> 
> @@ -532,7 +530,6 @@
>      ps->preserve_host = (overrides->preserve_host_set == 0) ?
> base->preserve_host : overrides->preserve_host;
>      ps->timeout= (overrides->timeout_set == 0) ? base->timeout :
> overrides->timeout;
>      ps->badopt = (overrides->badopt_set == 0) ? base->badopt :
> overrides->badopt;
> -    ps->write_through = (overrides->write_through_set == 0) ?
> base->write_through : overrides->write_through;
> 
>      return ps;
>  }
> @@ -816,16 +813,6 @@
>      psf->req_set = 1;
>      return NULL;
>  }
> -static const char*
> -    set_proxy_writethrough(cmd_parms *parms, void *dummy, int flag)
> -{
> -    proxy_server_conf *psf =
> -    ap_get_module_config(parms->server->module_config, 
> &proxy_module);
> -
> -    psf->write_through = flag;
> -    psf->write_through_set = 1;
> -    return NULL;
> -}
>  static const char *
>      set_proxy_error_override(cmd_parms *parms, void *dummy, int flag)
>  {
> @@ -1079,8 +1066,6 @@
>       "This overrides the server timeout"),
>      AP_INIT_TAKE1("ProxyBadHeader", set_bad_opt, NULL, RSRC_CONF,
>       "How to handle bad header line in response: IsError | Ignore |
> StartBody"),
> -    AP_INIT_FLAG("ProxyWriteThrough", set_proxy_writethrough, NULL,
> RSRC_CONF,
> -     "on if the data should be not be buffered"),
> 
>      {NULL}
>  };
> 

Re: [PATCH] Enable HTTP tunneling for streaming data where data i s less than the buffering size

Posted by Graham Leggett <mi...@sharp.fm>.
Conti, Chris wrote:

> Should I submit this to the bug database as a problem with HTTP tunneling?

Yes please - drowning in work here, will only be able to look at this in 
a few days.

Regards,
Graham
-- 
-----------------------------------------
minfrin@sharp.fm		"There's a moon
					over Bourbon Street
						tonight..."