1
0
mirror of https://github.com/apache/httpd.git synced 2025-08-07 04:02:58 +03:00

Stopped the CORE filter from sending off an HTTP response when a

CONNECT tunnel was closed. Fixed some filter definition madness that
proves that I need some sleep.
PR:
Obtained from:
Reviewed by:


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@88770 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Graham Leggett
2001-04-08 22:18:31 +00:00
parent a3f6f6dd0a
commit e95ee6ea59
4 changed files with 29 additions and 20 deletions

View File

@@ -56,6 +56,8 @@
* University of Illinois, Urbana-Champaign. * University of Illinois, Urbana-Champaign.
*/ */
#define CORE_PRIVATE
#include "mod_proxy.h" #include "mod_proxy.h"
/* /*
@@ -717,10 +719,9 @@ static void register_hooks(apr_pool_t *p)
ap_hook_handler(proxy_handler, NULL, NULL, APR_HOOK_FIRST); ap_hook_handler(proxy_handler, NULL, NULL, APR_HOOK_FIRST);
/* filename-to-URI translation */ /* filename-to-URI translation */
ap_hook_translate_name(proxy_trans, NULL, NULL, APR_HOOK_FIRST); ap_hook_translate_name(proxy_trans, NULL, NULL, APR_HOOK_FIRST);
#ifdef FTP_FILTER
/* filters */ /* filters */
ap_register_output_filter("PROXY_SEND_DIR", ap_proxy_send_dir_filter, AP_FTYPE_CONNECTION); ap_register_output_filter("PROXY_SEND_DIR", ap_proxy_send_dir_filter, AP_FTYPE_CONNECTION);
#endif ap_register_output_filter("PROXY_NULL", ap_proxy_null_filter, AP_FTYPE_NETWORK);
/* fixups */ /* fixups */
ap_hook_fixups(proxy_fixup, NULL, NULL, APR_HOOK_FIRST); ap_hook_fixups(proxy_fixup, NULL, NULL, APR_HOOK_FIRST);
/* post read_request handling */ /* post read_request handling */

View File

@@ -90,19 +90,19 @@
#include "apr_pools.h" #include "apr_pools.h"
#include "apr_strings.h" #include "apr_strings.h"
#include "httpd.h"
#include "http_config.h"
#include "ap_config.h"
#include "http_core.h"
#include "http_protocol.h"
#include "http_request.h"
#include "http_vhost.h"
#include "http_main.h"
#include "http_log.h"
#include "http_connection.h"
#include "util_filter.h" #include "util_filter.h"
#include "util_date.h" #include "util_date.h"
#include "util_uri.h" #include "util_uri.h"
#include "httpd.h"
#include "http_config.h"
#include "http_protocol.h"
#include "ap_config.h"
#include "http_log.h"
#include "http_main.h"
#include "http_core.h"
#include "http_connection.h"
#include "http_vhost.h"
#include "http_request.h"
#include "mod_core.h" #include "mod_core.h"
@@ -223,12 +223,13 @@ typedef struct {
int ap_proxy_connect_handler(request_rec *r, char *url, int ap_proxy_connect_handler(request_rec *r, char *url,
const char *proxyhost, int proxyport); const char *proxyhost, int proxyport);
apr_status_t ap_proxy_null_filter(ap_filter_t *f, apr_bucket_brigade *bb);
/* proxy_ftp.c */ /* proxy_ftp.c */
int ap_proxy_ftp_canon(request_rec *r, char *url); int ap_proxy_ftp_canon(request_rec *r, char *url);
int ap_proxy_ftp_handler(request_rec *r, char *url); int ap_proxy_ftp_handler(request_rec *r, char *url);
apr_status_t ap_proxy_send_dir_filter(ap_filter_t *f, apr_bucket_brigade *bb, ap_input_mode_t mode); apr_status_t ap_proxy_send_dir_filter(ap_filter_t *f, apr_bucket_brigade *bb);
/* proxy_http.c */ /* proxy_http.c */

View File

@@ -58,6 +58,8 @@
/* CONNECT method for Apache proxy */ /* CONNECT method for Apache proxy */
#define CORE_PRIVATE
#include "mod_proxy.h" #include "mod_proxy.h"
#if 0 #if 0
@@ -102,6 +104,11 @@ allowed_port(proxy_server_conf *conf, int port)
return 0; return 0;
} }
/* a NULL filter for the connect tunnel */
apr_status_t ap_proxy_null_filter(ap_filter_t *f, apr_bucket_brigade *bb)
{
return APR_SUCCESS;
}
int ap_proxy_connect_handler(request_rec *r, char *url, int ap_proxy_connect_handler(request_rec *r, char *url,
const char *proxyname, int proxyport) const char *proxyname, int proxyport)
@@ -254,14 +261,14 @@ int ap_proxy_connect_handler(request_rec *r, char *url,
* Send the HTTP/1.1 CONNECT request to the remote server * Send the HTTP/1.1 CONNECT request to the remote server
*/ */
/* XXXX FIXME: we are acting as a tunnel - the output filter stack should ideally /* we are acting as a tunnel - the output filter stack should
* be completely empty, because when we are done here we are done completely. * be completely empty, because when we are done here we are done completely.
* Is there such a thing as a NULL filter? * We add the NULL filter to the stack to do this...
*/
/* r->output_filters = NULL;
* r->connection->output_filters = NULL;
* ap_add_output_filter("NULL", NULL, r, r->connection);
*/ */
r->output_filters = NULL;
r->connection->output_filters = NULL;
ap_add_output_filter("PROXY_NULL", NULL, r, r->connection);
/* If we are connecting through a remote proxy, we need to pass /* If we are connecting through a remote proxy, we need to pass
* the CONNECT request on to it. * the CONNECT request on to it.

View File

@@ -253,7 +253,7 @@ static int ftp_getrc_msg(conn_rec *c, apr_bucket_brigade *bb, char *msgbuf, int
* all in good time...! :) * all in good time...! :)
*/ */
apr_status_t ap_proxy_send_dir_filter(ap_filter_t *f, apr_bucket_brigade *bb, ap_input_mode_t mode) apr_status_t ap_proxy_send_dir_filter(ap_filter_t *f, apr_bucket_brigade *bb)
{ {
conn_rec *c = f->r->connection; conn_rec *c = f->r->connection;
apr_pool_t *p = f->r->pool; apr_pool_t *p = f->r->pool;