From: Chuck Murcko Date: Sun, 11 Mar 2001 10:42:14 +0000 (+0000) Subject: Cache removed, with other spooge X-Git-Tag: 2.0.15~57 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1dcf2f77549c11b19d770979b0b90773a27ae2f8;p=apache Cache removed, with other spooge PR: Obtained from: Submitted by: Reviewed by: git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@88487 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/proxy/config.m4 b/modules/proxy/config.m4 index bea6a003bf..437f22b7e3 100644 --- a/modules/proxy/config.m4 +++ b/modules/proxy/config.m4 @@ -2,7 +2,7 @@ dnl modules enabled in this directory by default APACHE_MODPATH_INIT(proxy) -proxy_objs="mod_proxy.lo proxy_connect.lo proxy_cache.lo proxy_http.lo proxy_util.lo" +proxy_objs="mod_proxy.lo proxy_connect.lo proxy_http.lo proxy_util.lo" APACHE_MODULE(proxy, Apache proxy module, $proxy_objs, , no) diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index 4c651206bc..4fb5382dff 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -64,6 +64,7 @@ #include "http_vhost.h" #include "http_request.h" #include "util_date.h" +#include "mod_core.h" /* Some WWW schemes and their default ports; this is basically /etc/services */ /* This will become global when the protocol abstraction comes */ @@ -427,7 +428,6 @@ static void * create_proxy_config(apr_pool_t *p, server_rec *s) ps->recv_buffer_size = 0; /* this default was left unset for some reason */ ps->recv_buffer_size_set = 0; - ap_cache_init(&ps->cache, "mod_proxy cache", s); return ps; } diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index 2d7c7f04cb..0fb134291b 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -79,8 +79,6 @@ 2. HTTP/1.1 - 3. Cache issues - Chuck Murcko 02-06-01 */ @@ -108,7 +106,6 @@ #include "httpd.h" #include "http_config.h" #include "http_protocol.h" -#include "proxy_cache.h" extern module AP_MODULE_DECLARE_DATA proxy_module; @@ -195,7 +192,6 @@ typedef struct { char viaopt_set; size_t recv_buffer_size; char recv_buffer_size_set; - ap_cache_handle_t *cache; } proxy_server_conf; struct per_thread_data { @@ -219,8 +215,10 @@ int ap_proxy_connect_handler(request_rec *r, char *url, /* proxy_ftp.c */ +#if FTP int ap_proxy_ftp_canon(request_rec *r, char *url); int ap_proxy_ftp_handler(request_rec *r, ap_cache_el *c, char *url); +#endif /* proxy_http.c */ @@ -245,20 +243,13 @@ void ap_proxy_hash(const char *it, char *val, int ndepth, int nlength); int ap_proxy_hex2sec(const char *x); void ap_proxy_sec2hex(int t, char *y); const char *ap_proxy_host2addr(const char *host, struct hostent *reqhp); -int ap_proxy_cache_send(request_rec *r, ap_cache_el *c); -int ap_proxy_cache_should_cache(request_rec *r, apr_table_t *resp_hdrs, - const int is_HTTP1); -int ap_proxy_cache_update(ap_cache_el *c); -void ap_proxy_cache_error(ap_cache_el **r); int ap_proxyerror(request_rec *r, int statuscode, const char *message); int ap_proxy_is_ipaddr(struct dirconn_entry *This, apr_pool_t *p); int ap_proxy_is_domainname(struct dirconn_entry *This, apr_pool_t *p); int ap_proxy_is_hostname(struct dirconn_entry *This, apr_pool_t *p); int ap_proxy_is_word(struct dirconn_entry *This, apr_pool_t *p); apr_status_t ap_proxy_doconnect(apr_socket_t *sock, char *host, apr_uint32_t port, request_rec *r); -int ap_proxy_garbage_init(server_rec *, apr_pool_t *); /* This function is called by ap_table_do() for all header lines */ int ap_proxy_send_hdr_line(void *p, const char *key, const char *value); -unsigned ap_proxy_bputs2(const char *data, apr_socket_t *client, ap_cache_el *cache); #endif /*MOD_PROXY_H*/ diff --git a/modules/proxy/proxy_http.c b/modules/proxy/proxy_http.c index de1ef550a3..277fbb89dc 100644 --- a/modules/proxy/proxy_http.c +++ b/modules/proxy/proxy_http.c @@ -459,38 +459,6 @@ int ap_proxy_http_handler(request_rec *r, char *url, * one type */ -#if 0 - if (ap_cache_el_header(c, "Date", &datestr) == APR_SUCCESS) - ap_cache_el_header_set(c, "Date", ap_proxy_date_canon(p, datestr)); - if (ap_cache_el_header(c, "Last-Modified", &datestr) == APR_SUCCESS) - ap_cache_el_header_set(c, "Last-Modified", ap_proxy_date_canon(p, datestr)); - if (ap_cache_el_header(c, "Expires", &datestr) == APR_SUCCESS) - ap_cache_el_header_set(c, "Expires", ap_proxy_date_canon(p, datestr)); - - if (ap_cache_el_header(c, "Location", &datestr) == APR_SUCCESS) - ap_cache_el_header_set(c, "Location", proxy_location_reverse_map(r, datestr)); - if (ap_cache_el_header(c, "URI", &datestr) == APR_SUCCESS) - ap_cache_el_header_set(c, "URI", proxy_location_reverse_map(r, datestr)); -#endif - -/* write status line */ -#if 0 - if (!r->assbackwards) - ap_rvputs(r, "HTTP/1.0 ", r->status_line, CRLF, NULL); - - if (cachefp && apr_file_puts(apr_pstrcat(r->pool, "HTTP/1.0 ", - r->status_line, CRLF, NULL), cachefp) != APR_SUCCESS) { - ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, - "proxy: error writing status line to cache"); - ap_proxy_cache_error(&c); - cachefp = NULL; - } -#endif - -#if 0 -/* send headers */ - ap_cache_el_header_walk(c, ap_proxy_send_hdr_line, r, NULL); -#endif /* if (!r->assbackwards) ap_rputs(CRLF, r); diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index 18eb2c4e2c..6757722ea5 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -465,115 +465,6 @@ apr_table_t *ap_proxy_read_headers(request_rec *r, char *buffer, int size, conn_ return resp_hdrs; } -#if 0 -long int ap_proxy_send_fb(proxy_completion *completion, BUFF *f, request_rec *r, ap_cache_el *c) -{ - int ok; - char buf[IOBUFSIZE]; - long total_bytes_rcvd, in_buffer; - apr_ssize_t cntr; - register int n, o; - conn_rec *con = r->connection; - int alternate_timeouts = 1; /* 1 if we alternate between soft & hard timeouts */ - apr_file_t *cachefp = NULL; - int written = 0, wrote_to_cache; - - total_bytes_rcvd = 0; - if (c) ap_cache_el_data(c, &cachefp); - -#if APR_CHARSET_EBCDIC - /* The cache copy is ASCII, not EBCDIC, even for text/html) */ - ap_bsetflag(f, B_ASCII2EBCDIC|B_EBCDIC2ASCII, 0); - if (c != NULL && c->fp != NULL) - ap_bsetflag(c->fp, B_ASCII2EBCDIC|B_EBCDIC2ASCII, 0); - ap_bsetflag(con->client, B_ASCII2EBCDIC|B_EBCDIC2ASCII, 0); -#endif - - /* Since we are reading from one buffer and writing to another, - * it is unsafe to do a soft_timeout here, at least until the proxy - * has its own timeout handler which can set both buffers to EOUT. - */ - -#if defined(WIN32) || defined(TPF) || defined(NETWARE) - /* works fine under win32, so leave it */ - alternate_timeouts = 0; -#else - /* CHECKME! Since hard_timeout won't work in unix on sends with partial - * cache completion, we have to alternate between hard_timeout - * for reads, and soft_timeout for send. This is because we need - * to get a return from ap_bwrite to be able to continue caching. - * BUT, if we *can't* continue anyway, just use hard_timeout. - * (Also, if no cache file is written, use hard timeouts) - */ - - if (!completion || completion->content_length > 0 - || completion->cache_completion == 1.0) { - alternate_timeouts = 0; - } -#endif - - /* Loop and ap_bread() while we can successfully read and write, - * or (after the client aborted) while we can successfully - * read and finish the configured cache_completion. - */ - for (ok = 1; ok; cntr = 0) { - /* Read block from server */ - if (ap_bread(f, buf, IOBUFSIZE, &cntr) != APR_SUCCESS && !cntr) - { - if (c != NULL) { - ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, - "proxy: error reading from %s", c->name); - ap_proxy_cache_error(&c); - } - break; - } - else if(cntr == 0) break; - - /* Write to cache first. */ - /*@@@ XXX FIXME: Assuming that writing the cache file won't time out?!!? */ - wrote_to_cache = cntr; - if (cachefp && apr_file_write(cachefp, &buf[0], &wrote_to_cache) != APR_SUCCESS) { - ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, - "proxy: error writing to cache"); - ap_proxy_cache_error(&c); - } else { - written += n; - } - - o = 0; - total_bytes_rcvd += cntr; - in_buffer = cntr; - - /* Write the block to the client, detect aborted transfers */ - while (!con->aborted && in_buffer > 0) { - if ((cntr = ap_rwrite(&buf[o], in_buffer, r))) { - if (completion) { - /* when a send failure occurs, we need to decide - * whether to continue loading and caching the - * document, or to abort the whole thing - */ - ok = (completion->content_length > 0) && - (completion->cache_completion > 0) && - (completion->content_length * completion->cache_completion < total_bytes_rcvd); - - if (!ok) - ap_proxy_cache_error(&c); - } - con->aborted = 1; - break; - } - in_buffer -= cntr; - o += cntr; - } /* while client alive and more data to send */ - } /* loop and ap_bread while "ok" */ - - if (!con->aborted) - ap_rflush(r); - - return total_bytes_rcvd; -} -#endif /* 0, ap_proxy_send_fb */ - /* * Sends response line and headers. Uses the client fd and the * headers_out array from the passed request_rec to talk to the client @@ -680,17 +571,6 @@ void ap_proxy_sec2hex(int t, char *y) y[8] = '\0'; } - -void ap_proxy_cache_error(ap_cache_el **c) -{ - if (c && *c) { - const char *name = (*c)->name; - ap_cache_el_finalize((*c)); - ap_cache_remove((*c)->cache, name); - *c = NULL; - } -} - int ap_proxyerror(request_rec *r, int statuscode, const char *message) { apr_table_setn(r->notes, "error-notes", @@ -1091,14 +971,6 @@ int ap_proxy_is_hostname(struct dirconn_entry *This, apr_pool_t *p) /* rfc1035 says DNS names must consist of "[-a-zA-Z0-9]" and '.' */ for (i = 0; apr_isalnum(addr[i]) || addr[i] == '-' || addr[i] == '.'; ++i); -#if 0 - if (addr[i] == ':') { - ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, - "@@@@ handle optional port in proxy_is_hostname()"); - /* @@@@ handle optional port */ - } -#endif - if (addr[i] != '\0' || ap_proxy_host2addr(addr, &host) != NULL) return 0; @@ -1187,19 +1059,6 @@ int ap_proxy_send_hdr_line(void *p, const char *key, const char *value) return 1; /* tell ap_table_do() to continue calling us for more headers */ } -/* send a text line to one or two BUFF's; return line length */ -unsigned ap_proxy_bputs2(const char *data, apr_socket_t *client, ap_cache_el *cache) -{ - unsigned len = strlen(data); - apr_file_t *cachefp = NULL; - - apr_send(client, data, &len); - - if (ap_cache_el_data(cache, &cachefp) == APR_SUCCESS) - apr_file_puts(data, cachefp); - return len; -} - #if defined WIN32 static DWORD tls_index; @@ -1230,94 +1089,5 @@ BOOL WINAPI DllMain (HINSTANCE dllhandle, DWORD reason, LPVOID reserved) static struct per_thread_data *get_per_thread_data(void) { -#if 0 -#if defined(WIN32) - - return (struct per_thread_data *) TlsGetValue (tls_index); - -#else - - static APACHE_TLS struct per_thread_data sptd; - return &sptd; - -#endif -#endif return NULL; } - -/* This function is completely bogus. This should become a part of the - * cache filter when it is finished. RBB - */ -int ap_proxy_cache_send(request_rec *r, ap_cache_el *c) -{ - apr_file_t *cachefp = NULL; - apr_socket_t *fp = r->connection->client_socket; - char buffer[500]; - apr_size_t len; - apr_off_t offset = 0; - apr_finfo_t finfo; - - ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, NULL, - "Sending cache file for %s", c->name); - if(ap_cache_el_data(c, &cachefp) != APR_SUCCESS) - return HTTP_INTERNAL_SERVER_ERROR; - /* send the response */ - if(apr_file_gets(buffer, sizeof(buffer), cachefp)) { - len = strlen(buffer); - apr_send(fp, buffer, &len); - offset +=len; - } - /* send headers */ - ap_cache_el_header_walk(c, ap_proxy_send_hdr_line, r, NULL); - len = 2; - apr_send(fp, CRLF, &len); - /* send data */ - apr_file_info_get(&finfo, APR_FINFO_MIN, cachefp); - if(!r->header_only && ap_send_fd(cachefp, r, offset, finfo.size, &len)) - return HTTP_INTERNAL_SERVER_ERROR; - return OK; -} - -int ap_proxy_cache_should_cache(request_rec *r, apr_table_t *resp_hdrs, const int is_HTTP1) -{ - const char *expire = apr_table_get(resp_hdrs, "Expires"); - time_t expc; - if (expire != NULL) - expc = ap_parseHTTPdate(expire); - else - expc = BAD_DATE; - if((r->status != HTTP_OK && r->status != HTTP_MOVED_PERMANENTLY && r->status != HTTP_NOT_MODIFIED) || - (r->status == HTTP_NOT_MODIFIED) || - r->header_only || - apr_table_get(r->headers_in, "Authorization") != NULL || - (expire != NULL && expc == BAD_DATE) || - (r->status == HTTP_OK && !apr_table_get(resp_hdrs, "Last-Modified") && is_HTTP1)) - { - ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, NULL, - "proxy: Response is not cacheable: %s", r->unparsed_uri); - return 0; - } - return 1; -} - -/* - * what responses should we not cache? - * Unknown status responses and those known to be uncacheable - * 304 HTTP_NOT_MODIFIED response when we have no valid cache file, or - * 200 HTTP_OK response from HTTP/1.0 and up without a Last-Modified header, or - * HEAD requests, or - * requests with an Authorization header, or - * protocol requests nocache (e.g. ftp with user/password) - */ -/* @@@ XXX FIXME: is the test "r->status != HTTP_MOVED_PERMANENTLY" correct? - * or shouldn't it be "ap_is_HTTP_REDIRECT(r->status)" ? -MnKr */ -int ap_proxy_cache_update(ap_cache_el *c) -{ - ap_cache_handle_t *h = c ? c->cache : NULL; - if(!h) return DECLINED; - ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, NULL, - "proxy: Cache finalized: %s", c->name); - ap_cache_el_finalize(c); - ap_cache_garbage_collect(h); - return DECLINED; -}