chuck 96/11/04 12:43:22
Modified: src/modules/proxy proxy_cache.c
Log:
Updated to use BAD_DATE with new date utilities; fixed last -Wall warning
Revision Changes Path
1.5 +29 -25 apache/src/modules/proxy/proxy_cache.c
Index: proxy_cache.c
===================================================================
RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_cache.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C3 -r1.4 -r1.5
*** proxy_cache.c 1996/10/27 18:29:56 1.4
--- proxy_cache.c 1996/11/04 20:43:20 1.5
***************
*** 60,65 ****
--- 60,67 ----
#include "util_date.h"
#include <utime.h>
+ #define abs(c) ((c) >= 0 ? (c) : -(c))
+
struct gc_ent
{
unsigned long int len;
***************
*** 97,103 ****
struct stat buf;
struct gc_ent *fent,**elts;
int i;
! static time_t lastcheck=-1; /* static data!!! */
cachedir = conf->root;
cachesize = conf->space;
--- 99,105 ----
struct stat buf;
struct gc_ent *fent,**elts;
int i;
! static time_t lastcheck=BAD_DATE; /* static data!!! */
cachedir = conf->root;
cachesize = conf->space;
***************
*** 105,111 ****
if (cachedir == NULL || every == -1) return;
now = time(NULL);
! if (now != -1 && lastcheck != -1 && now < lastcheck + every) return;
block_alarms(); /* avoid SIGALRM on big cache cleanup */
--- 107,113 ----
if (cachedir == NULL || every == -1) return;
now = time(NULL);
! if (now != -1 && lastcheck != BAD_DATE && now < lastcheck + every)
return;
block_alarms(); /* avoid SIGALRM on big cache cleanup */
***************
*** 124,130 ****
if (errno != EEXIST)
proxy_log_uerror("creat", filename, NULL, r->server);
else
! lastcheck = now; /* someone else got in there */
return;
}
} else
--- 126,132 ----
if (errno != EEXIST)
proxy_log_uerror("creat", filename, NULL, r->server);
else
! lastcheck = abs(now); /* someone else got in there */
return;
}
} else
***************
*** 274,280 ****
line[i] = '\0';
expire = proxy_hex2sec(line+18);
if (!checkmask(line, "&&&&&&&& &&&&&&&& &&&&&&&&") ||
! expire == -1)
{
/* bad file */
if (now != -1 && buf.st_atime > now + SEC_ONE_DAY &&
--- 276,282 ----
line[i] = '\0';
expire = proxy_hex2sec(line+18);
if (!checkmask(line, "&&&&&&&& &&&&&&&& &&&&&&&&") ||
! expire == BAD_DATE)
{
/* bad file */
if (now != -1 && buf.st_atime > now + SEC_ONE_DAY &&
***************
*** 423,436 ****
c->url = pstrdup(r->pool, url);
/* get the If-Modified-Since date of the request */
! c->ims = -1;
imstr = table_get(r->headers_in, "If-Modified-Since");
if (imstr != NULL)
{
/* this may modify the value in the original table */
imstr = proxy_date_canon(r->pool, imstr);
c->ims = parseHTTPdate(imstr);
! if (c->ims == -1) /* bad or out of range date; remove it */
table_set(r->headers_in, "If-Modified-Since", NULL);
}
--- 425,438 ----
c->url = pstrdup(r->pool, url);
/* get the If-Modified-Since date of the request */
! c->ims = BAD_DATE;
imstr = table_get(r->headers_in, "If-Modified-Since");
if (imstr != NULL)
{
/* this may modify the value in the original table */
imstr = proxy_date_canon(r->pool, imstr);
c->ims = parseHTTPdate(imstr);
! if (c->ims == BAD_DATE) /* bad or out of range date; remove it */
table_set(r->headers_in, "If-Modified-Since", NULL);
}
***************
*** 461,468 ****
--- 463,472 ----
} else if (errno != ENOENT)
proxy_log_uerror("open", c->filename,
"proxy: error opening cache file", r->server);
+ #ifdef EXPLAIN
else
Explain1("File %s not found",c->filename);
+ #endif
}
if (cachefp != NULL)
***************
*** 484,497 ****
/* FIXME: Shouldn't we check the URL somewhere? */
now = time(NULL);
/* Ok, have we got some un-expired data? */
! if (cachefp != NULL && c->expire != -1 && now < c->expire)
{
Explain0("Unexpired data available");
/* check IMS */
! if (c->lmod != -1 && c->ims != -1 && c->ims >= c->lmod)
{
/* has the cached file changed since this request? */
! if (c->date == -1 || c->date > c->ims)
{
/* No, but these header values may have changed, so we send them with the
* 304 response
--- 488,501 ----
/* FIXME: Shouldn't we check the URL somewhere? */
now = time(NULL);
/* Ok, have we got some un-expired data? */
! if (cachefp != NULL && c->expire != BAD_DATE && now < c->expire)
{
Explain0("Unexpired data available");
/* check IMS */
! if (c->lmod != BAD_DATE && c->ims != BAD_DATE && c->ims >= c->lmod)
{
/* has the cached file changed since this request? */
! if (c->date == BAD_DATE || c->date > c->ims)
{
/* No, but these header values may have changed, so we send them with the
* 304 response
***************
*** 525,537 ****
* request, then add an If-Modified-Since
*/
! if (cachefp != NULL && c->lmod != -1 && !r->header_only)
{
/*
* use the later of the one from the request and the last-modified date
* from the cache
*/
! if (c->ims == -1 || c->ims < c->lmod)
{
struct hdr_entry *q;
--- 529,541 ----
* request, then add an If-Modified-Since
*/
! if (cachefp != NULL && c->lmod != BAD_DATE && !r->header_only)
{
/*
* use the later of the one from the request and the last-modified date
* from the cache
*/
! if (c->ims == BAD_DATE || c->ims < c->lmod)
{
struct hdr_entry *q;
***************
*** 584,590 ****
*/
expire = proxy_get_header(resp_hdrs, "Expires");
if (expire != NULL) expc = parseHTTPdate(expire->value);
! else expc = -1;
/*
* read the last-modified date; if the date is bad, then delete it
--- 588,594 ----
*/
expire = proxy_get_header(resp_hdrs, "Expires");
if (expire != NULL) expc = parseHTTPdate(expire->value);
! else expc = BAD_DATE;
/*
* read the last-modified date; if the date is bad, then delete it
***************
*** 593,606 ****
if (lmods != NULL)
{
lmod = parseHTTPdate(lmods->value);
! if (lmod == -1)
{
/* kill last modified date */
lmods->value = NULL;
lmods = NULL;
}
} else
! lmod = -1;
/*
* what responses should we not cache?
--- 597,610 ----
if (lmods != NULL)
{
lmod = parseHTTPdate(lmods->value);
! if (lmod == BAD_DATE)
{
/* kill last modified date */
lmods->value = NULL;
lmods = NULL;
}
} else
! lmod = BAD_DATE;
/*
* what responses should we not cache?
***************
*** 612,618 ****
* protocol requests nocache (e.g. ftp with user/password)
*/
if ((r->status != 200 && r->status != 301 && r->status != 304) ||
! (expire != NULL && expc == -1) ||
(r->status == 304 && c->fp == NULL) ||
(r->status == 200 && lmods == NULL &&
strncmp(protocol, "HTTP/1.", 7) == 0) ||
--- 616,622 ----
* protocol requests nocache (e.g. ftp with user/password)
*/
if ((r->status != 200 && r->status != 301 && r->status != 304) ||
! (expire != NULL && expc == BAD_DATE) ||
(r->status == 304 && c->fp == NULL) ||
(r->status == 200 && lmods == NULL &&
strncmp(protocol, "HTTP/1.", 7) == 0) ||
***************
*** 638,660 ****
*/
dates = proxy_get_header(resp_hdrs, "Date");
if (dates != NULL) date = parseHTTPdate(dates->value);
! else date = -1;
now = time(NULL);
! if (date == -1) /* No, or bad date */
{
/* no date header! */
/* add one; N.B. use the time _now_ rather than when we were checking the
cache
*/
! date = now;
p = gm_timestr_822(r->pool, now);
dates = proxy_add_header(resp_hdrs, "Date", p, HDR_REP);
Explain0("Added date header");
}
/* check last-modified date */
! if (lmod != -1 && lmod > date)
/* if its in the future, then replace by date */
{
lmod = date;
--- 642,664 ----
*/
dates = proxy_get_header(resp_hdrs, "Date");
if (dates != NULL) date = parseHTTPdate(dates->value);
! else date = BAD_DATE;
now = time(NULL);
! if (date == BAD_DATE) /* No, or bad date */
{
/* no date header! */
/* add one; N.B. use the time _now_ rather than when we were checking the
cache
*/
! date = abs(now);
p = gm_timestr_822(r->pool, now);
dates = proxy_add_header(resp_hdrs, "Date", p, HDR_REP);
Explain0("Added date header");
}
/* check last-modified date */
! if (lmod != BAD_DATE && lmod > date)
/* if its in the future, then replace by date */
{
lmod = date;
***************
*** 662,668 ****
Explain0("Last modified is in the future, replacing with now");
}
/* if the response did not contain the header, then use the cached version
*/
! if (lmod == -1 && c->fp != NULL)
{
lmod = c->lmod;
Explain0("Reusing cached last modified");
--- 666,672 ----
Explain0("Last modified is in the future, replacing with now");
}
/* if the response did not contain the header, then use the cached version
*/
! if (lmod == BAD_DATE && c->fp != NULL)
{
lmod = c->lmod;
Explain0("Reusing cached last modified");
***************
*** 682,697 ****
* expire date = now + defaultexpire
*/
Explain1("Expiry date is %ld",expc);
! if (expc == -1)
{
! if (lmod != -1)
{
double x = (double)(date - lmod)*conf->cache.lmfactor;
double maxex=conf->cache.maxexpire;
if (x > maxex) x = maxex;
! expc = now + (int)x;
} else
! expc = now + conf->cache.defaultexpire;
Explain1("Expiry date calculated %ld",expc);
}
--- 686,701 ----
* expire date = now + defaultexpire
*/
Explain1("Expiry date is %ld",expc);
! if (expc == BAD_DATE)
{
! if (lmod != BAD_DATE)
{
double x = (double)(date - lmod)*conf->cache.lmfactor;
double maxex=conf->cache.maxexpire;
if (x > maxex) x = maxex;
! expc = abs(now) + (int)x;
} else
! expc = abs(now) + conf->cache.defaultexpire;
Explain1("Expiry date calculated %ld",expc);
}
***************
*** 715,721 ****
/* if file not modified */
if (r->status == 304)
{
! if (c->ims != -1 && lmod != -1 && lmod <= c->ims)
{
/* set any changed headers somehow */
/* update dates and version, but not content-length */
--- 719,725 ----
/* if file not modified */
if (r->status == 304)
{
! if (c->ims != BAD_DATE && lmod != BAD_DATE && lmod <= c->ims)
{
/* set any changed headers somehow */
/* update dates and version, but not content-length */