httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jerenkra...@apache.org
Subject cvs commit: httpd-2.0/modules/proxy mod_proxy.c proxy_http.c
Date Thu, 30 May 2002 07:34:00 GMT
jerenkrantz    02/05/30 00:34:00

  Modified:    .        CHANGES
               modules/proxy mod_proxy.c proxy_http.c
  Log:
  Switch mod_proxy to using the brigade/filter calls directly rather than
  the *_client_block calls.
  
  Revision  Changes    Path
  1.803     +2 -2      httpd-2.0/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/CHANGES,v
  retrieving revision 1.802
  retrieving revision 1.803
  diff -u -r1.802 -r1.803
  --- CHANGES	30 May 2002 05:43:35 -0000	1.802
  +++ CHANGES	30 May 2002 07:33:59 -0000	1.803
  @@ -9,8 +9,8 @@
        Elimiates possible gpfault or garbage title without the -t option.
        [William Rowe]
   
  -  *) Rewrite mod_cgi and mod_cgid's input handling to use brigades and input
  -     filters.  [Justin Erenkrantz]
  +  *) Rewrite mod_cgi, mod_cgid, and mod_proxy input handling to use
  +     brigades and input filters.  [Justin Erenkrantz]
   
     *) Allow ap_http_filter (HTTP_IN) to return EOS when there is no request
        body.  [Justin Erenkrantz]
  
  
  
  1.84      +0 -3      httpd-2.0/modules/proxy/mod_proxy.c
  
  Index: mod_proxy.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/proxy/mod_proxy.c,v
  retrieving revision 1.83
  retrieving revision 1.84
  diff -u -r1.83 -r1.84
  --- mod_proxy.c	17 May 2002 11:24:16 -0000	1.83
  +++ mod_proxy.c	30 May 2002 07:33:59 -0000	1.84
  @@ -394,9 +394,6 @@
       apr_table_set(r->headers_in, "Max-Forwards", 
                     apr_psprintf(r->pool, "%ld", (maxfwd > 0) ? maxfwd : 0));
   
  -    if ((rc = ap_setup_client_block(r, REQUEST_CHUNKED_ERROR)))
  -        return rc;
  -
       url = r->filename + 6;
       p = strchr(url, ':');
       if (p == NULL)
  
  
  
  1.151     +35 -16    httpd-2.0/modules/proxy/proxy_http.c
  
  Index: proxy_http.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/proxy/proxy_http.c,v
  retrieving revision 1.150
  retrieving revision 1.151
  diff -u -r1.150 -r1.151
  --- proxy_http.c	30 May 2002 07:04:45 -0000	1.150
  +++ proxy_http.c	30 May 2002 07:33:59 -0000	1.151
  @@ -419,12 +419,11 @@
                                      char *url, apr_bucket_brigade *bb,
                                      char *server_portstr) {
       conn_rec *c = r->connection;
  -    char buffer[HUGE_STRING_LEN];
       char *buf;
       apr_bucket *e;
       const apr_array_header_t *headers_in_array;
       const apr_table_entry_t *headers_in;
  -    int counter;
  +    int counter, seen_eos;
       apr_status_t status;
   
       /*
  @@ -620,22 +619,42 @@
       }
   
       /* send the request data, if any. */
  -    if (ap_should_client_block(r)) {
  -        while ((counter = ap_get_client_block(r, buffer, sizeof(buffer))) > 0) {
  -            e = apr_bucket_pool_create(buffer, counter, p, c->bucket_alloc);
  -            APR_BRIGADE_INSERT_TAIL(bb, e);
  -            e = apr_bucket_flush_create(c->bucket_alloc);
  -            APR_BRIGADE_INSERT_TAIL(bb, e);
  -            status = ap_pass_brigade(origin->output_filters, bb);
  -            if (status != APR_SUCCESS) {
  -                ap_log_error(APLOG_MARK, APLOG_ERR, status, r->server,
  -                             "proxy: pass request data failed to %pI (%s)",
  -                             p_conn->addr, p_conn->name);
  -                return status;
  +    seen_eos = 0;
  +    do {
  +        status = ap_get_brigade(r->input_filters, bb, AP_MODE_READBYTES,
  +                                APR_BLOCK_READ, HUGE_STRING_LEN);
  +
  +        if (status != APR_SUCCESS) {
  +            return status;
  +        }
  +
  +        /* If this brigade contain EOS, either stop or remove it. */
  +        if (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) {
  +            /* As a shortcut, if this brigade is simply an EOS bucket,
  +             * don't send anything down the filter chain.
  +             */
  +            if (APR_BUCKET_IS_EOS(APR_BRIGADE_FIRST(bb))) {
  +                break;
               }
  -            apr_brigade_cleanup(bb);
  +
  +            /* We can't pass this EOS to the output_filters. */
  +            APR_BUCKET_REMOVE(APR_BRIGADE_LAST(bb));
  +            seen_eos = 1;
           }
  -    }
  +
  +        e = apr_bucket_flush_create(c->bucket_alloc);
  +        APR_BRIGADE_INSERT_TAIL(bb, e);
  +
  +        status = ap_pass_brigade(origin->output_filters, bb);
  +        if (status != APR_SUCCESS) {
  +            ap_log_error(APLOG_MARK, APLOG_ERR, status, r->server,
  +                         "proxy: pass request data failed to %pI (%s)",
  +                         p_conn->addr, p_conn->name);
  +            return status;
  +        }
  +        apr_brigade_cleanup(bb);
  +    } while (!seen_eos);
  +
       return APR_SUCCESS;
   }
   
  
  
  

Mime
View raw message