Группа :: Система/Серверы
Пакет: squid
Главная Изменения Спек Патчи Загрузить Bugs and FR
Патч: squid-2.5.STABLE10-internal_date.patch
Index: squid/include/Array.h
diff -c squid/include/Array.h:1.6 squid/include/Array.h:1.6.2.1
*** squid/include/Array.h:1.6 Mon Oct 8 10:18:31 2001
--- squid/include/Array.h Thu Jun 9 01:51:46 2005
***************
*** 48,53 ****
--- 48,54 ----
extern void arrayClean(Array * s);
extern void arrayDestroy(Array * s);
extern void arrayAppend(Array * s, void *obj);
+ extern void arrayInsert(Array * s, void *obj, int position);
extern void arrayPreAppend(Array * s, int app_count);
Index: squid/lib/Array.c
diff -c squid/lib/Array.c:1.7 squid/lib/Array.c:1.7.2.1
*** squid/lib/Array.c:1.7 Wed Feb 7 11:56:50 2001
--- squid/lib/Array.c Thu Jun 9 01:51:46 2005
***************
*** 95,100 ****
--- 95,113 ----
a->items[a->count++] = obj;
}
+ void arrayInsert(Array *a, void *obj, int position)
+ {
+ assert(a);
+ if (a->count >= a->capacity)
+ arrayGrow(a, a->count + 1);
+ if (position > a->count)
+ position = a->count;
+ if (position < a->count)
+ memmove(&a->items[position + 1], &a->items[position], (a->count - position) * sizeof(void *));
+ a->items[position] = obj;
+ a->count++;
+ }
+
/* if you are going to append a known and large number of items, call this first */
void
arrayPreAppend(Array * a, int app_count)
Index: squid/src/HttpHeader.c
diff -c squid/src/HttpHeader.c:1.74.2.29 squid/src/HttpHeader.c:1.74.2.30
*** squid/src/HttpHeader.c:1.74.2.29 Wed May 25 16:57:33 2005
--- squid/src/HttpHeader.c Thu Jun 9 01:51:46 2005
***************
*** 680,685 ****
--- 680,705 ----
hdr->len += strLen(e->name) + 2 + strLen(e->value) + 2;
}
+ /* inserts an entry at the given position;
+ * does not call httpHeaderEntryClone() so one should not reuse "*e"
+ */
+ void
+ httpHeaderInsertEntry(HttpHeader * hdr, HttpHeaderEntry * e, int pos)
+ {
+ assert(hdr && e);
+ assert_eid(e->id);
+
+ debug(55, 7) ("%p adding entry: %d at %d\n",
+ hdr, e->id, hdr->entries.count);
+ if (CBIT_TEST(hdr->mask, e->id))
+ Headers[e->id].stat.repCount++;
+ else
+ CBIT_SET(hdr->mask, e->id);
+ arrayInsert(&hdr->entries, e, pos);
+ /* increment header length, allow for ": " and crlf */
+ hdr->len += strLen(e->name) + 2 + strLen(e->value) + 2;
+ }
+
/* return a list of entries with the same id separated by ',' and ws */
String
httpHeaderGetList(const HttpHeader * hdr, http_hdr_type id)
***************
*** 850,855 ****
--- 870,884 ----
}
void
+ httpHeaderInsertTime(HttpHeader * hdr, int pos, http_hdr_type id, time_t htime)
+ {
+ assert_eid(id);
+ assert(Headers[id].type == ftDate_1123); /* must be of an appropriate type */
+ assert(htime >= 0);
+ httpHeaderInsertEntry(hdr, httpHeaderEntryCreate(id, NULL, mkrfc1123(htime)), pos);
+ }
+
+ void
httpHeaderPutStr(HttpHeader * hdr, http_hdr_type id, const char *str)
{
assert_eid(id);
Index: squid/src/cf.data.pre
diff -c squid/src/cf.data.pre:1.245.2.94 squid/src/cf.data.pre:1.245.2.95
*** squid/src/cf.data.pre:1.245.2.94 Tue May 10 17:08:40 2005
--- squid/src/cf.data.pre Thu Jun 9 01:51:46 2005
***************
*** 3241,3246 ****
--- 3241,3260 ----
@DEFAULT_ICON_DIR@
DOC_END
+ NAME: global_internal_static
+ TYPE: onoff
+ LOC: Config.onoff.global_internal_static
+ DEFAULT: on
+ DOC_START
+ This directive controls is Squid should intercept all requests for
+ /squid-internal-static/ no matter which host the URL is requesting
+ (default on setting), or if nothing special should be done for
+ such URLs (off setting). The purpose of this directive is to make
+ icons etc work better in complex cache hierarchies where it may
+ not always be possible for all corners in the cache mesh to reach
+ the server generating a directory listing.
+ DOC_END
+
NAME: short_icon_urls
TYPE: onoff
LOC: Config.icons.use_short_names
Index: squid/src/client_side.c
diff -c squid/src/client_side.c:1.561.2.76 squid/src/client_side.c:1.561.2.77
*** squid/src/client_side.c:1.561.2.76 Wed Apr 20 15:46:06 2005
--- squid/src/client_side.c Thu Jun 9 01:51:47 2005
***************
*** 1404,1410 ****
(void) 0;
else if (http->entry->timestamp < 0)
(void) 0;
! else if (http->entry->timestamp < squid_curtime)
httpHeaderPutInt(hdr, HDR_AGE,
squid_curtime - http->entry->timestamp);
}
--- 1404,1413 ----
(void) 0;
else if (http->entry->timestamp < 0)
(void) 0;
! if (EBIT_TEST(http->entry->flags, ENTRY_SPECIAL)) {
! httpHeaderDelById(hdr, HDR_DATE);
! httpHeaderInsertTime(hdr, 0, HDR_DATE, squid_curtime);
! } else if (http->entry->timestamp < squid_curtime)
httpHeaderPutInt(hdr, HDR_AGE,
squid_curtime - http->entry->timestamp);
}
***************
*** 2719,2729 ****
*t = '\0';
#endif
! /* handle internal objects */
! if (internalCheck(url)) {
/* prepend our name & port */
http->uri = xstrdup(internalLocalUri(NULL, url));
- http->flags.internal = 1;
http->flags.accel = 1;
}
/* see if we running in Config2.Accel.on, if so got to convert it to URL */
--- 2722,2731 ----
*t = '\0';
#endif
! /* handle direct internal objects */
! if (!Config2.Accel.on && internalCheck(url)) {
/* prepend our name & port */
http->uri = xstrdup(internalLocalUri(NULL, url));
http->flags.accel = 1;
}
/* see if we running in Config2.Accel.on, if so got to convert it to URL */
***************
*** 3099,3105 ****
if (internalHostnameIs(request->host) &&
request->port == ntohs(Config.Sockaddr.http->s.sin_port)) {
http->flags.internal = 1;
! } else if (internalStaticCheck(strBuf(request->urlpath))) {
xstrncpy(request->host, internalHostname(), SQUIDHOSTNAMELEN);
request->port = ntohs(Config.Sockaddr.http->s.sin_port);
http->flags.internal = 1;
--- 3101,3107 ----
if (internalHostnameIs(request->host) &&
request->port == ntohs(Config.Sockaddr.http->s.sin_port)) {
http->flags.internal = 1;
! } else if (Config.onoff.global_internal_static && internalStaticCheck(strBuf(request->urlpath))) {
xstrncpy(request->host, internalHostname(), SQUIDHOSTNAMELEN);
request->port = ntohs(Config.Sockaddr.http->s.sin_port);
http->flags.internal = 1;
Index: squid/src/protos.h
diff -c squid/src/protos.h:1.420.2.35 squid/src/protos.h:1.420.2.36
*** squid/src/protos.h:1.420.2.35 Wed May 18 09:28:32 2005
--- squid/src/protos.h Thu Jun 9 01:51:47 2005
***************
*** 424,429 ****
--- 424,430 ----
extern void httpHeaderPutInt(HttpHeader * hdr, http_hdr_type type, int number);
extern void httpHeaderPutSize(HttpHeader * hdr, http_hdr_type type, squid_off_t number);
extern void httpHeaderPutTime(HttpHeader * hdr, http_hdr_type type, time_t htime);
+ extern void httpHeaderInsertTime(HttpHeader * hdr, int pos, http_hdr_type type, time_t htime);
extern void httpHeaderPutStr(HttpHeader * hdr, http_hdr_type type, const char *str);
extern void httpHeaderPutAuth(HttpHeader * hdr, const char *auth_scheme, const char *realm);
extern void httpHeaderPutCc(HttpHeader * hdr, const HttpHdrCc * cc);
***************
*** 453,458 ****
--- 454,460 ----
extern HttpHeaderEntry *httpHeaderGetEntry(const HttpHeader * hdr, HttpHeaderPos * pos);
extern HttpHeaderEntry *httpHeaderFindEntry(const HttpHeader * hdr, http_hdr_type id);
extern void httpHeaderAddEntry(HttpHeader * hdr, HttpHeaderEntry * e);
+ extern void httpHeaderInsertEntry(HttpHeader * hdr, HttpHeaderEntry * e, int pos);
extern HttpHeaderEntry *httpHeaderEntryClone(const HttpHeaderEntry * e);
extern void httpHeaderEntryPackInto(const HttpHeaderEntry * e, Packer * p);
/* store report about current header usage and other stats */
Index: squid/src/structs.h
diff -c squid/src/structs.h:1.408.2.43 squid/src/structs.h:1.408.2.44
*** squid/src/structs.h:1.408.2.43 Wed May 4 12:03:47 2005
--- squid/src/structs.h Thu Jun 9 01:51:47 2005
***************
*** 609,614 ****
--- 609,615 ----
int relaxed_header_parser;
int accel_uses_host_header;
int accel_no_pmtu_disc;
+ int global_internal_static;
} onoff;
acl *aclList;
struct {