+Changes to squid-1.1.alpha16:
+
- Fixed ipcache TTL bug from new ipcache_parsebuffer().
- Copied recent ipcache.c changes to fqdncache.c
- Copied icpHandleIcpV2() fix to icpHandleIcpV3().
==============================================================================
+Changes to squid-1.0.12 (September 3, 1996):
+
+ - Fixed urlCheckRequest() to allow CONNECT/SSL requests.
+ - Change default socket send/receive buffers to 16k (in
+ configure) instead of 8k, mainly for Solaris.
+ - Fixed urlParse() to remove trailing dots from hostnames.
+ - Added 'ttl_pattern/i' config tag for case-insensitive
+ regular expressions.
+ - Fixed swapin_complete_handler FMW bug in storeSwapInHandle().
+ - Removed 'Invalid object detected' trap in storeValidToSend().
+
Changes to squid-1.0.11 (August 30, 1996):
- Fixed ENTRY_DISPATCHED bug. Now set ENTRY_DISPATCHED
-# From configure.in Revision: 1.30
+# From configure.in Revision: 1.31
ac_aux_dir=
for ac_dir in aux $srcdir/aux; do
if test -f $ac_dir/install-sh; then
echo $ac_n "checking Default UDP send buffer size""... $ac_c" 1>&6
if test "$cross_compiling" = yes; then
- SQUID_UDP_SO_SNDBUF=8192
+ SQUID_UDP_SO_SNDBUF=16384
else
cat > conftest.$ac_ext <<EOF
#line 2316 "configure"
if test -s conftest && (./conftest; exit) 2>/dev/null; then
SQUID_UDP_SO_SNDBUF=`cat conftestval`
else
- SQUID_UDP_SO_SNDBUF=8192
+ SQUID_UDP_SO_SNDBUF=16384
fi
fi
rm -fr conftest*
echo $ac_n "checking Default UDP receive buffer size""... $ac_c" 1>&6
if test "$cross_compiling" = yes; then
- SQUID_UDP_SO_RCVBUF=8192
+ SQUID_UDP_SO_RCVBUF=16384
else
cat > conftest.$ac_ext <<EOF
#line 2352 "configure"
if test -s conftest && (./conftest; exit) 2>/dev/null; then
SQUID_UDP_SO_RCVBUF=`cat conftestval`
else
- SQUID_UDP_SO_RCVBUF=8192
+ SQUID_UDP_SO_RCVBUF=16384
fi
fi
rm -fr conftest*
echo $ac_n "checking Default TCP send buffer size""... $ac_c" 1>&6
if test "$cross_compiling" = yes; then
- SQUID_TCP_SO_SNDBUF=8192
+ SQUID_TCP_SO_SNDBUF=16384
else
cat > conftest.$ac_ext <<EOF
#line 2388 "configure"
if test -s conftest && (./conftest; exit) 2>/dev/null; then
SQUID_TCP_SO_SNDBUF=`cat conftestval`
else
- SQUID_TCP_SO_SNDBUF=8192
+ SQUID_TCP_SO_SNDBUF=16384
fi
fi
rm -fr conftest*
echo $ac_n "checking Default TCP receive buffer size""... $ac_c" 1>&6
if test "$cross_compiling" = yes; then
- SQUID_TCP_SO_RCVBUF=8192
+ SQUID_TCP_SO_RCVBUF=16384
else
cat > conftest.$ac_ext <<EOF
#line 2424 "configure"
if test -s conftest && (./conftest; exit) 2>/dev/null; then
SQUID_TCP_SO_RCVBUF=`cat conftestval`
else
- SQUID_TCP_SO_RCVBUF=8192
+ SQUID_TCP_SO_RCVBUF=16384
fi
fi
rm -fr conftest*
dnl
dnl Duane Wessels, wessels@nlanr.net, February 1996 (autoconf v2.9)
dnl
-dnl $Id: configure.in,v 1.31 1996/08/31 06:41:53 wessels Exp $
+dnl $Id: configure.in,v 1.32 1996/09/03 19:24:00 wessels Exp $
dnl
dnl
dnl
AC_INIT(src/main.c)
AC_CONFIG_HEADER(include/autoconf.h)
-AC_REVISION($Revision: 1.31 $)dnl
+AC_REVISION($Revision: 1.32 $)dnl
AC_PREFIX_DEFAULT(/usr/local/squid)
AC_CONFIG_AUX_DIR(aux)
}
],
SQUID_UDP_SO_SNDBUF=`cat conftestval`,
-SQUID_UDP_SO_SNDBUF=8192,
-SQUID_UDP_SO_SNDBUF=8192)
+SQUID_UDP_SO_SNDBUF=16384,
+SQUID_UDP_SO_SNDBUF=16384)
AC_MSG_RESULT($SQUID_UDP_SO_SNDBUF)
AC_DEFINE_UNQUOTED(SQUID_UDP_SO_SNDBUF, $SQUID_UDP_SO_SNDBUF)
}
],
SQUID_UDP_SO_RCVBUF=`cat conftestval`,
-SQUID_UDP_SO_RCVBUF=8192,
-SQUID_UDP_SO_RCVBUF=8192)
+SQUID_UDP_SO_RCVBUF=16384,
+SQUID_UDP_SO_RCVBUF=16384)
AC_MSG_RESULT($SQUID_UDP_SO_RCVBUF)
AC_DEFINE_UNQUOTED(SQUID_UDP_SO_RCVBUF, $SQUID_UDP_SO_RCVBUF)
}
],
SQUID_TCP_SO_SNDBUF=`cat conftestval`,
-SQUID_TCP_SO_SNDBUF=8192,
-SQUID_TCP_SO_SNDBUF=8192)
+SQUID_TCP_SO_SNDBUF=16384,
+SQUID_TCP_SO_SNDBUF=16384)
AC_MSG_RESULT($SQUID_TCP_SO_SNDBUF)
AC_DEFINE_UNQUOTED(SQUID_TCP_SO_SNDBUF, $SQUID_TCP_SO_SNDBUF)
}
],
SQUID_TCP_SO_RCVBUF=`cat conftestval`,
-SQUID_TCP_SO_RCVBUF=8192,
-SQUID_TCP_SO_RCVBUF=8192)
+SQUID_TCP_SO_RCVBUF=16384,
+SQUID_TCP_SO_RCVBUF=16384)
AC_MSG_RESULT($SQUID_TCP_SO_RCVBUF)
AC_DEFINE_UNQUOTED(SQUID_TCP_SO_RCVBUF, $SQUID_TCP_SO_RCVBUF)
/*
- * $Id: cache_cf.cc,v 1.80 1996/08/29 17:57:37 wessels Exp $
+ * $Id: cache_cf.cc,v 1.81 1996/09/03 19:24:01 wessels Exp $
*
* DEBUG: section 3 Configuration File Parsing
* AUTHOR: Harvest Derived
char config_input_line[BUFSIZ];
int config_lineno = 0;
-static void configSetFactoryDefaults _PARAMS((void));
-static void configFreeMemory _PARAMS((void));
-static void configDoConfigure _PARAMS((void));
static char *safe_xstrdup _PARAMS((char *p));
static void parseOnOff _PARAMS((int *));
static void parseIntegerValue _PARAMS((int *));
static char fatal_str[BUFSIZ];
+static void configDoConfigure _PARAMS((void));
+static void configFreeMemory _PARAMS((void));
+static void configSetFactoryDefaults _PARAMS((void));
+static void parseAccessLogLine _PARAMS((void));
+static void parseAddressLine _PARAMS((struct in_addr *));
+static void parseAnnounceToLine _PARAMS((void));
+static void parseAppendDomainLine _PARAMS((void));
+static void parseCacheAnnounceLine _PARAMS((void));
+static void parseCacheHostLine _PARAMS((void));
+static void parseCleanRateLine _PARAMS((void));
+static void parseDebugOptionsLine _PARAMS((void));
+static void parseDirLine _PARAMS((void));
+static void parseDnsProgramLine _PARAMS((void));
+static void parseDnsTestnameLine _PARAMS((void));
+static void parseEffectiveUserLine _PARAMS((void));
+static void parseErrHtmlLine _PARAMS((void));
+static void parseFtpLine _PARAMS((void));
+static void parseFtpOptionsLine _PARAMS((void));
+static void parseFtpProgramLine _PARAMS((void));
+static void parseFtpUserLine _PARAMS((void));
+static void parseGopherLine _PARAMS((void));
+static void parseHierarchyStoplistLine _PARAMS((void));
+static void parseHostAclLine _PARAMS((void));
+static void parseHostDomainLine _PARAMS((void));
+static void parseHotVmFactorLine _PARAMS((void));
+static void parseHttpLine _PARAMS((void));
+static void parseHttpPortLine _PARAMS((void));
+static void parseHttpdAccelLine _PARAMS((void));
+static void parseIPLine _PARAMS((ip_acl ** list));
+static void parseIcpPortLine _PARAMS((void));
+static void parseInsideFirewallLine _PARAMS((void));
+static void parseLifetimeLine _PARAMS((void));
+static void parseLocalDomainFile _PARAMS((char *fname));
+static void parseLocalDomainLine _PARAMS((void));
+static void parseLogLine _PARAMS((void));
+static void parseMemLine _PARAMS((void));
+static void parseMgrLine _PARAMS((void));
+static void parseNegativeDnsLine _PARAMS((void));
+static void parseNegativeLine _PARAMS((void));
+static void parsePidFilenameLine _PARAMS((void));
+static void parsePositiveDnsLine _PARAMS((void));
+static void parseReadTimeoutLine _PARAMS((void));
+static void parseRequestSizeLine _PARAMS((void));
+static void parseStoreLogLine _PARAMS((void));
+static void parseSwapLine _PARAMS((void));
+static void parseTTLPattern _PARAMS((int icase, int force));
+static void parseVisibleHostnameLine _PARAMS((void));
+static void parseWAISRelayLine _PARAMS((void));
void self_destruct()
{
Config.Ftp.defaultTtl = i * 60;
}
-static void parseTTLPattern()
+static void parseTTLPattern(icase, force)
+ int icase;
+ int force;
{
char *token;
char *pattern;
age_max = (time_t) (i * 60); /* convert minutes to seconds */
}
}
- ttlAddToList(pattern, abs_ttl, pct_age, age_max);
-
- safe_free(pattern);
-}
-
-static void parseTTLForcePattern()
-{
- char *token;
- char *pattern;
- time_t abs_ttl = 0;
- time_t age_max = Config.ageMaxDefault;
- int i;
-
- token = strtok(NULL, w_space); /* token: regex pattern */
- if (token == NULL)
- self_destruct();
- pattern = xstrdup(token);
-
- GetInteger(i); /* token: abs_ttl */
- abs_ttl = (time_t) (i * 60); /* convert minutes to seconds */
-
- GetInteger(i);
- age_max = (time_t) (i * 60); /* convert minutes to seconds */
- ttlAddToForceList(pattern, abs_ttl, age_max);
-
+ ttlAddToList(pattern, icase, force, abs_ttl, pct_age, age_max);
safe_free(pattern);
}
parseFtpLine();
else if (!strcmp(token, "ttl_pattern"))
- parseTTLPattern();
-
+ parseTTLPattern(0, 0);
+ else if (!strcmp(token, "ttl_pattern/i"))
+ parseTTLPattern(1, 0);
else if (!strcmp(token, "ttl_force_pattern"))
- parseTTLForcePattern();
+ parseTTLPattern(0, 1);
+ else if (!strcmp(token, "ttl_force_pattern/i"))
+ parseTTLPattern(1, 1);
else if (!strcmp(token, "quick_abort"))
parseQuickAbort();
/*
- * $Id: ftp.cc,v 1.51 1996/08/30 22:39:08 wessels Exp $
+ * $Id: ftp.cc,v 1.52 1996/09/03 19:24:02 wessels Exp $
*
* DEBUG: section 9 File Transfer Protocol (FTP)
* AUTHOR: Harvest Derived
case 410: /* Gone */
/* These can be cached for a long time, make the key public */
ttlSet(entry);
- if (BIT_TEST(entry->flag, CACHABLE))
+ if (BIT_TEST(entry->flag, ENTRY_CACHABLE))
storeSetPublicKey(entry);
break;
case 302: /* Moved Temporarily */
/* These should never be cached at all */
storeSetPrivateKey(entry);
storeExpireNow(entry);
- BIT_RESET(entry->flag, CACHABLE);
+ BIT_RESET(entry->flag, ENTRY_CACHABLE);
storeReleaseRequest(entry);
break;
default:
/* These can be negative cached, make key public */
entry->expires = squid_curtime + Config.negativeTtl;
- if (BIT_TEST(entry->flag, CACHABLE))
+ if (BIT_TEST(entry->flag, ENTRY_CACHABLE))
storeSetPublicKey(entry);
break;
}
/* note there is no ftpReadReplyTimeout. Timeouts are handled
* by `ftpget'. */
} else {
- BIT_RESET(entry->flag, CACHABLE);
+ BIT_RESET(entry->flag, ENTRY_CACHABLE);
storeReleaseRequest(entry);
squid_error_entry(entry, ERR_READ_ERROR, xstrerror());
comm_close(fd);
* never gets to disk. */
debug(9, 1, "ftpReadReply: Purging '%s'\n", entry->url);
entry->expires = squid_curtime + Config.negativeTtl;
- BIT_RESET(entry->flag, CACHABLE);
+ BIT_RESET(entry->flag, ENTRY_CACHABLE);
storeReleaseRequest(entry);
} else if (!(entry->flag & DELETE_BEHIND)) {
ttlSet(entry);
/*
- * $Id: gopher.cc,v 1.40 1996/08/30 23:23:31 wessels Exp $
+ * $Id: gopher.cc,v 1.41 1996/09/03 19:24:02 wessels Exp $
*
* DEBUG: section 10 Gopher
* AUTHOR: Harvest Derived
comm_set_select_handler_plus_timeout(fd, COMM_SELECT_TIMEOUT,
(PF) gopherReadReplyTimeout, (void *) data, Config.readTimeout);
} else {
- BIT_RESET(entry->flag, CACHABLE);
+ BIT_RESET(entry->flag, ENTRY_CACHABLE);
storeReleaseRequest(entry);
squid_error_entry(entry, ERR_READ_ERROR, xstrerror());
comm_close(fd);
gopherSendComplete,
(void *) data,
put_free_4k_page);
- if (BIT_TEST(data->entry->flag, CACHABLE))
+ if (BIT_TEST(data->entry->flag, ENTRY_CACHABLE))
storeSetPublicKey(data->entry); /* Make it public */
}
/*
- * $Id: http.cc,v 1.69 1996/08/26 19:57:05 wessels Exp $
+ * $Id: http.cc,v 1.70 1996/09/03 19:24:03 wessels Exp $
*
* DEBUG: section 11 Hypertext Transfer Protocol (HTTP)
* AUTHOR: Harvest Derived
StoreEntry *entry;
{
ttlSet(entry);
- if (BIT_TEST(entry->flag, CACHABLE))
+ if (BIT_TEST(entry->flag, ENTRY_CACHABLE))
storeSetPublicKey(entry);
}
{
storeSetPrivateKey(entry);
storeExpireNow(entry);
- BIT_RESET(entry->flag, CACHABLE);
+ BIT_RESET(entry->flag, ENTRY_CACHABLE);
storeReleaseRequest(entry); /* delete object when not used */
}
StoreEntry *entry;
{
entry->expires = squid_curtime + Config.negativeTtl;
- if (BIT_TEST(entry->flag, CACHABLE))
+ if (BIT_TEST(entry->flag, ENTRY_CACHABLE))
storeSetPublicKey(entry);
/* XXX: mark object "not to store on disk"? */
}
}
t = strtok(NULL, "\n");
}
+#if LOG_TIMESTAMPS
+ fprintf(timestamp_log, "T %9d D %9d L %9d E %9d\n",
+ squid_curtime,
+ parse_rfc850(reply->date),
+ parse_rfc850(reply->last_modified),
+ parse_rfc850(reply->expires));
+#endif /* LOG_TIMESTAMPS */
safe_free(headers);
}
comm_set_select_handler_plus_timeout(fd, COMM_SELECT_TIMEOUT,
(PF) httpReadReplyTimeout, (void *) httpState, Config.readTimeout);
} else {
- BIT_RESET(entry->flag, CACHABLE);
+ BIT_RESET(entry->flag, ENTRY_CACHABLE);
storeReleaseRequest(entry);
squid_error_entry(entry, ERR_READ_ERROR, xstrerror());
comm_close(fd);
/*
- * $Id: squid.h,v 1.43 1996/09/03 18:54:09 wessels Exp $
+ * $Id: squid.h,v 1.44 1996/09/03 19:24:04 wessels Exp $
*
* AUTHOR: Duane Wessels
*
extern char *storeToString _PARAMS((StoreEntry *));
extern void ttlSet _PARAMS((StoreEntry *));
extern void ttlFreeList _PARAMS((void));
-extern void ttlAddToList _PARAMS((char *, time_t, int, time_t));
+extern void ttlAddToList _PARAMS((char *, int, int, time_t, int, time_t));
extern void ttlAddToForceList _PARAMS((char *, time_t, time_t));
extern int waisStart _PARAMS((int, char *, method_t, char *, StoreEntry *));
extern void storeDirClean _PARAMS((void));
/*
- * $Id: stat.cc,v 1.57 1996/08/30 22:44:12 wessels Exp $
+ * $Id: stat.cc,v 1.58 1996/09/03 19:24:05 wessels Exp $
*
* DEBUG: section 18 Cache Manager Statistics
* AUTHOR: Harvest Derived
strcpy(FLAGS, "F:");
if (BIT_TEST(entry->flag, KEY_CHANGE))
strncat(FLAGS, "K", sizeof(FLAGS) - 1);
- if (BIT_TEST(~entry->flag, CACHABLE))
+ if (BIT_TEST(entry->flag, ENTRY_CACHABLE))
strncat(FLAGS, "C", sizeof(FLAGS) - 1);
if (BIT_TEST(entry->flag, REFRESH_REQUEST))
strncat(FLAGS, "R", sizeof(FLAGS) - 1);
/*
- * $Id: store.cc,v 1.93 1996/08/30 23:23:35 wessels Exp $
+ * $Id: store.cc,v 1.94 1996/09/03 19:24:06 wessels Exp $
*
* DEBUG: section 20 Storeage Manager
* AUTHOR: Harvest Derived
if (BIT_TEST(flags, REQ_NOCACHE))
BIT_SET(e->flag, REFRESH_REQUEST);
if (BIT_TEST(flags, REQ_CACHABLE)) {
- BIT_SET(e->flag, CACHABLE);
+ BIT_SET(e->flag, ENTRY_CACHABLE);
BIT_RESET(e->flag, RELEASE_REQUEST);
} else {
- BIT_RESET(e->flag, CACHABLE);
+ BIT_RESET(e->flag, ENTRY_CACHABLE);
storeReleaseRequest(e);
}
if (BIT_TEST(flags, REQ_HIERARCHICAL))
e->url = xstrdup(url);
e->method = METHOD_GET;
storeSetPublicKey(e);
- BIT_SET(e->flag, CACHABLE);
+ BIT_SET(e->flag, ENTRY_CACHABLE);
BIT_RESET(e->flag, RELEASE_REQUEST);
BIT_SET(e->flag, ENTRY_HTML);
e->store_status = STORE_OK;
storeSetPrivateKey(e);
BIT_SET(e->flag, DELETE_BEHIND);
storeReleaseRequest(e);
- BIT_RESET(e->flag, CACHABLE);
+ BIT_RESET(e->flag, ENTRY_CACHABLE);
storeExpireNow(e);
}
int offset_notused;
{
MemObject *mem = e->mem_obj;
+ SIH handler = NULL;
+ void *data = NULL;
debug(20, 2, "storeSwapInHandle: '%s'\n", e->key);
if (mem == NULL) /* XXX remove later */
storeSetMemStatus(e, NOT_IN_MEMORY);
file_close(mem->swapin_fd);
swapInError(-1, e); /* Invokes storeAbort() and completes the I/O */
- if (mem->swapin_complete_handler) {
- (*mem->swapin_complete_handler) (2, mem->swapin_complete_data);
+ if ((handler = mem->swapin_complete_handler)) {
+ data = mem->swapin_complete_data;
mem->swapin_complete_handler = NULL;
mem->swapin_complete_data = NULL;
+ handler(2, data);
}
return -1;
}
debug(20, 0, " --> Only read %d bytes\n",
mem->e_current_len);
}
- if (mem->swapin_complete_handler) {
- (*mem->swapin_complete_handler) (0, mem->swapin_complete_data);
+ if ((handler = mem->swapin_complete_handler)) {
+ data = mem->swapin_complete_data;
mem->swapin_complete_handler = NULL;
mem->swapin_complete_data = NULL;
+ handler(0, data);
}
if (e->flag & RELEASE_REQUEST)
storeRelease(e);
debug(20, 2, "storeCheckSwapable: NO: expires now\n");
} else if (e->method != METHOD_GET) {
debug(20, 2, "storeCheckSwapable: NO: non-GET method\n");
- } else if (!BIT_TEST(e->flag, CACHABLE)) {
+ } else if (!BIT_TEST(e->flag, ENTRY_CACHABLE)) {
debug(20, 2, "storeCheckSwapable: NO: not cachable\n");
} else if (BIT_TEST(e->flag, RELEASE_REQUEST)) {
debug(20, 2, "storeCheckSwapable: NO: release requested\n");
return 1;
storeReleaseRequest(e);
- BIT_RESET(e->flag, CACHABLE);
+ BIT_RESET(e->flag, ENTRY_CACHABLE);
return 0;
}
int storeEntryValidToSend(e)
StoreEntry *e;
{
- /* XXX I think this is not needed since storeCheckPurgeMem() has
- * been added. If we never see output from this, lets delete it
- * in a future version -DW */
- if ((e->mem_status == NOT_IN_MEMORY) && /* Not in memory */
- (e->swap_status != SWAP_OK) && /* Not on disk */
- (e->store_status != STORE_PENDING) /* Not being fetched */
- ) {
- debug(20, 0, "storeEntryValidToSend: Invalid object detected!\n");
- debug(20, 0, "storeEntryValidToSend: Entry Dump:\n%s\n", storeToString(e));
- return 0;
- }
if (squid_curtime < e->expires)
return 1;
- if (e->expires == 0 && e->store_status == STORE_PENDING && e->mem_status != NOT_IN_MEMORY)
- return 1;
- return 0;
+ if (e->expires != 0)
+ return 0; /* Expired! */
+ if (e->store_status != STORE_PENDING)
+ return 0;
+ if (e->mem_status != IN_MEMORY)
+ return 0;
+ return 1; /* STORE_PENDING, IN_MEMORY, exp=0 */
}
int storeEntryValidLength(e)
/*
- * $Id: url.cc,v 1.31 1996/08/30 23:23:36 wessels Exp $
+ * $Id: url.cc,v 1.32 1996/09/03 19:24:08 wessels Exp $
*
* DEBUG: section 23 URL Parsing
* AUTHOR: Duane Wessels
}
for (t = host; *t; t++)
*t = tolower(*t);
+ /* remove trailing dots from hostnames */
+ while ((l = strlen(host)) && host[--l] == '.')
+ host[l] = '\0';
if (port == 0) {
debug(23, 0, "urlParse: Invalid port == 0\n");
return NULL;
request_t *r;
{
int rc = 0;
+ if (r->method == METHOD_CONNECT)
+ return 1;
switch (r->protocol) {
case PROTO_HTTP:
case PROTO_CACHEOBJ:
/*
- * $Id: wais.cc,v 1.36 1996/08/26 19:16:08 wessels Exp $
+ * $Id: wais.cc,v 1.37 1996/09/03 19:24:09 wessels Exp $
*
* DEBUG: section 24 WAIS Relay
* AUTHOR: Harvest Derived
comm_set_select_handler_plus_timeout(fd, COMM_SELECT_TIMEOUT,
(PF) waisReadReplyTimeout, (void *) waisState, Config.readTimeout);
} else {
- BIT_RESET(entry->flag, CACHABLE);
+ BIT_RESET(entry->flag, ENTRY_CACHABLE);
storeReleaseRequest(entry);
squid_error_entry(entry, ERR_READ_ERROR, xstrerror());
comm_close(fd);
waisSendComplete,
(void *) waisState,
xfree);
- if (BIT_TEST(waisState->entry->flag, CACHABLE))
+ if (BIT_TEST(waisState->entry->flag, ENTRY_CACHABLE))
storeSetPublicKey(waisState->entry); /* Make it public */
}