2 * $Id: protos.h,v 1.557 2008/02/26 21:49:35 amosjeffries Exp $
5 * SQUID Web Proxy Cache http://www.squid-cache.org/
6 * ----------------------------------------------------------
8 * Squid is the result of efforts by numerous individuals from
9 * the Internet community; see the CONTRIBUTORS file for full
10 * details. Many organizations have provided support for Squid's
11 * development; see the SPONSORS file for full details. Squid is
12 * Copyrighted (C) 2001 by the Regents of the University of
13 * California; see the COPYRIGHT file for full details. Squid
14 * incorporates software developed and/or copyrighted by other
15 * sources; see the CREDITS file for full details.
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation; either version 2 of the License, or
20 * (at your option) any later version.
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
32 #ifndef SQUID_PROTOS_H
33 #define SQUID_PROTOS_H
35 /* included for routines that have not moved out to their proper homes
39 /* for routines still in this file that take CacheManager parameters */
40 #include "IPAddress.h"
41 /* for parameters that still need these */
43 /* some parameters stil need this */
46 class HttpRequestMethod
;
50 SQUIDCEXTERN
void fvdbCountVia(const char *key
);
51 SQUIDCEXTERN
void fvdbCountForw(const char *key
);
54 SQUIDCEXTERN
void headersLog(int cs
, int pq
, const HttpRequestMethod
& m
, void *data
);
56 SQUIDCEXTERN
char *log_quote(const char *header
);
57 SQUIDCEXTERN
int logTypeIsATcpHit(log_type
);
62 SQUIDCEXTERN
void configFreeMemory(void);
64 SQUIDCEXTERN
void wordlistCat(const wordlist
*, MemBuf
* mb
);
65 SQUIDCEXTERN
void self_destruct(void);
66 SQUIDCEXTERN
void add_http_port(char *portspec
);
67 extern int xatoi(const char *token
);
68 extern long xatol(const char *token
);
71 /* extra functions from cache_cf.c useful for lib modules */
72 SQUIDCEXTERN
void parse_int(int *var
);
73 SQUIDCEXTERN
void parse_onoff(int *var
);
74 SQUIDCEXTERN
void parse_eol(char *volatile *var
);
75 SQUIDCEXTERN
void parse_wordlist(wordlist
** list
);
76 SQUIDCEXTERN
void requirePathnameExists(const char *name
, const char *path
);
77 SQUIDCEXTERN
void parse_time_t(time_t * var
);
79 SQUIDCEXTERN
void parse_IPAddress_list_token(IPAddress_list
**, char *);
82 /* client_side.c - FD related client side routines */
84 SQUIDCEXTERN
void clientdbInit(void);
86 SQUIDCEXTERN
void clientdbUpdate(const IPAddress
&, log_type
, protocol_t
, size_t);
88 SQUIDCEXTERN
int clientdbCutoffDenied(const IPAddress
&);
89 SQUIDCEXTERN
void clientdbDump(StoreEntry
*);
90 SQUIDCEXTERN
void clientdbFreeMemory(void);
92 SQUIDCEXTERN
int clientdbEstablished(const IPAddress
&, int);
93 SQUIDCEXTERN
void clientOpenListenSockets(void);
94 SQUIDCEXTERN
void clientHttpConnectionsClose(void);
95 SQUIDCEXTERN
void httpRequestFree(void *);
97 extern void clientAccessCheck(void *);
99 /* see debug.c for info on context-based debugging */
100 SQUIDCEXTERN Ctx
ctx_enter(const char *descr
);
101 SQUIDCEXTERN
void ctx_exit(Ctx ctx
);
103 SQUIDCEXTERN
void _db_set_syslog(const char *facility
);
104 SQUIDCEXTERN
void _db_init(const char *logfile
, const char *options
);
105 SQUIDCEXTERN
void _db_rotate_log(void);
108 SQUIDCEXTERN
void _db_print(const char *,...) PRINTF_FORMAT_ARG1
;
110 SQUIDCEXTERN
void _db_print();
113 /* packs, then prints an object using debug() */
114 SQUIDCEXTERN
void debugObj(int section
, int level
, const char *label
, void *obj
, ObjPackMethod pm
);
117 SQUIDCEXTERN
int file_open(const char *path
, int mode
);
118 SQUIDCEXTERN
void file_close(int fd
);
119 /* Adapter file_write for object callbacks */
123 FreeObject(void *address
)
125 O
*anObject
= static_cast <O
*>(address
);
129 SQUIDCEXTERN
void file_write(int, off_t
, void const *, int len
, DWCB
*, void *, FREE
*);
130 SQUIDCEXTERN
void file_write_mbuf(int fd
, off_t
, MemBuf mb
, DWCB
* handler
, void *handler_data
);
131 SQUIDCEXTERN
void file_read(int, char *, int, off_t
, DRCB
*, void *);
132 SQUIDCEXTERN
void disk_init(void);
134 SQUIDCEXTERN
void dnsShutdown(void);
135 SQUIDCEXTERN
void dnsInit(void);
136 SQUIDCEXTERN
void dnsSubmit(const char *lookup
, HLPCB
* callback
, void *data
);
137 /// XXX: a temporary hack to work around the missing DNS error info
138 const char *dns_error_message_safe();
141 SQUIDCEXTERN
void idnsInit(void);
142 SQUIDCEXTERN
void idnsShutdown(void);
143 SQUIDCEXTERN
void idnsALookup(const char *, IDNSCB
*, void *);
145 SQUIDCEXTERN
void idnsPTRLookup(const IPAddress
&, IDNSCB
*, void *);
147 SQUIDCEXTERN
void fd_close(int fd
);
148 SQUIDCEXTERN
void fd_open(int fd
, unsigned int type
, const char *);
149 SQUIDCEXTERN
void fd_note(int fd
, const char *);
150 SQUIDCEXTERN
void fd_bytes(int fd
, int len
, unsigned int type
);
151 SQUIDCEXTERN
void fdDumpOpen(void);
152 SQUIDCEXTERN
int fdNFree(void);
153 SQUIDCEXTERN
int fdUsageHigh(void);
154 SQUIDCEXTERN
void fdAdjustReserved(void);
156 SQUIDCEXTERN fileMap
*file_map_create(void);
157 SQUIDCEXTERN
int file_map_allocate(fileMap
*, int);
158 SQUIDCEXTERN
int file_map_bit_set(fileMap
*, int);
159 SQUIDCEXTERN
int file_map_bit_test(fileMap
*, int);
160 SQUIDCEXTERN
void file_map_bit_reset(fileMap
*, int);
161 SQUIDCEXTERN
void filemapFreeMemory(fileMap
*);
164 SQUIDCEXTERN
void fqdncache_nbgethostbyaddr(IPAddress
&, FQDNH
*, void *);
166 SQUIDCEXTERN
const char *fqdncache_gethostbyaddr(IPAddress
&, int flags
);
167 SQUIDCEXTERN
void fqdncache_init(void);
168 SQUIDCEXTERN
void fqdnStats(StoreEntry
*);
169 SQUIDCEXTERN
void fqdncacheReleaseInvalid(const char *);
171 SQUIDCEXTERN
const char *fqdnFromAddr(IPAddress
&);
172 SQUIDCEXTERN
int fqdncacheQueueDrain(void);
173 SQUIDCEXTERN
void fqdncacheFreeMemory(void);
174 SQUIDCEXTERN
void fqdncache_restart(void);
175 SQUIDCEXTERN
void fqdncache_purgelru(void *);
176 SQUIDCEXTERN
void fqdncacheAddEntryFromHosts(char *addr
, wordlist
* hostnames
);
181 \defgroup ServerProtocolFTPAPI Server-Side FTP API
182 \ingroup ServerProtocol
185 /// \ingroup ServerProtocolFTPAPI
186 SQUIDCEXTERN
void ftpStart(FwdState
*);
190 /// \ingroup ServerProtocolFTPAPI
191 SQUIDCEXTERN
const char *ftpUrlWith2f(HttpRequest
*);
195 \defgroup ServerProtocolGopherAPI Server-Side Gopher API
196 \ingroup ServerProtocol
199 /// \ingroup ServerProtocolGopherAPI
200 SQUIDCEXTERN
void gopherStart(FwdState
*);
202 /// \ingroup ServerProtocolGopherAPI
203 SQUIDCEXTERN
int gopherCachable(const HttpRequest
*);
207 \defgroup ServerProtocolWhoisAPI Server-Side WHOIS API
208 \ingroup ServerProtocol
211 /// \ingroup ServerProtocolWhoisAPI
212 SQUIDCEXTERN
void whoisStart(FwdState
*);
216 /* for http_hdr_type field */
217 #include "HttpHeader.h"
218 SQUIDCEXTERN
int httpCachable(const HttpRequestMethod
&);
219 SQUIDCEXTERN
void httpStart(FwdState
*);
220 SQUIDCEXTERN mb_size_t
httpBuildRequestPrefix(HttpRequest
* request
,
221 HttpRequest
* orig_request
,
225 SQUIDCEXTERN
void httpAnonInitModule(void);
226 SQUIDCEXTERN
int httpAnonHdrAllowed(http_hdr_type hdr_id
);
227 SQUIDCEXTERN
int httpAnonHdrDenied(http_hdr_type hdr_id
);
228 SQUIDCEXTERN
const char *httpMakeVaryMark(HttpRequest
* request
, HttpReply
const * reply
);
231 SQUIDCEXTERN
int etagParseInit(ETag
* etag
, const char *str
);
232 SQUIDCEXTERN
int etagIsEqual(const ETag
* tag1
, const ETag
* tag2
);
234 SQUIDCEXTERN
const char *httpStatusString(http_status status
);
238 SQUIDCEXTERN
void httpBodyInit(HttpBody
* body
);
239 SQUIDCEXTERN
void httpBodyClean(HttpBody
* body
);
240 /* get body ptr (always use this) */
241 SQUIDCEXTERN
const char *httpBodyPtr(const HttpBody
* body
);
242 /* set body, does not clone mb so you should not reuse it */
243 SQUIDCEXTERN
void httpBodySet(HttpBody
* body
, MemBuf
* mb
);
246 SQUIDCEXTERN
void httpBodyPackInto(const HttpBody
* body
, Packer
* p
);
248 /* Http Cache Control Header Field */
249 SQUIDCEXTERN
void httpHdrCcInitModule(void);
250 SQUIDCEXTERN
void httpHdrCcCleanModule(void);
251 SQUIDCEXTERN HttpHdrCc
*httpHdrCcCreate(void);
252 SQUIDCEXTERN HttpHdrCc
*httpHdrCcParseCreate(const String
* str
);
253 SQUIDCEXTERN
void httpHdrCcDestroy(HttpHdrCc
* cc
);
254 SQUIDCEXTERN HttpHdrCc
*httpHdrCcDup(const HttpHdrCc
* cc
);
255 SQUIDCEXTERN
void httpHdrCcPackInto(const HttpHdrCc
* cc
, Packer
* p
);
256 SQUIDCEXTERN
void httpHdrCcSetMaxAge(HttpHdrCc
* cc
, int max_age
);
257 SQUIDCEXTERN
void httpHdrCcSetSMaxAge(HttpHdrCc
* cc
, int s_maxage
);
258 SQUIDCEXTERN
void httpHdrCcUpdateStats(const HttpHdrCc
* cc
, StatHist
* hist
);
259 SQUIDCEXTERN
void httpHdrCcStatDumper(StoreEntry
* sentry
, int idx
, double val
, double size
, int count
);
261 /* Http Header Tools */
262 class HttpHeaderFieldInfo
;
263 SQUIDCEXTERN HttpHeaderFieldInfo
*httpHeaderBuildFieldsInfo(const HttpHeaderFieldAttrs
* attrs
, int count
);
264 SQUIDCEXTERN
void httpHeaderDestroyFieldsInfo(HttpHeaderFieldInfo
* info
, int count
);
265 SQUIDCEXTERN http_hdr_type
httpHeaderIdByName(const char *name
, int name_len
, const HttpHeaderFieldInfo
* attrs
, int end
);
266 SQUIDCEXTERN http_hdr_type
httpHeaderIdByNameDef(const char *name
, int name_len
);
267 SQUIDCEXTERN
const char *httpHeaderNameById(int id
);
268 SQUIDCEXTERN
int httpHeaderHasConnDir(const HttpHeader
* hdr
, const char *directive
);
269 SQUIDCEXTERN
void strListAdd(String
* str
, const char *item
, char del
);
270 SQUIDCEXTERN
int strListIsMember(const String
* str
, const char *item
, char del
);
271 SQUIDCEXTERN
int strListIsSubstr(const String
* list
, const char *s
, char del
);
272 SQUIDCEXTERN
int strListGetItem(const String
* str
, char del
, const char **item
, int *ilen
, const char **pos
);
273 SQUIDCEXTERN
const char *getStringPrefix(const char *str
, const char *end
);
274 SQUIDCEXTERN
int httpHeaderParseInt(const char *start
, int *val
);
275 SQUIDCEXTERN
int httpHeaderParseOffset(const char *start
, int64_t * off
);
278 httpHeaderPutStrf(HttpHeader
* hdr
, http_hdr_type id
, const char *fmt
,...) PRINTF_FORMAT_ARG3
;
280 SQUIDCEXTERN
void httpHeaderPutStrf();
285 SQUIDCEXTERN
void httpHeaderInitModule(void);
286 SQUIDCEXTERN
void httpHeaderCleanModule(void);
288 /* store report about current header usage and other stats */
289 SQUIDCEXTERN
void httpHeaderStoreReport(StoreEntry
* e
);
290 SQUIDCEXTERN
void httpHdrMangleList(HttpHeader
*, HttpRequest
*, int req_or_rep
);
291 SQUIDCEXTERN
int httpReqHdrManglersConfigured();
294 SQUIDCEXTERN PF snmpHandleUdp
;
295 SQUIDCEXTERN
void snmpInit(void);
296 SQUIDCEXTERN
void snmpConnectionOpen(void);
297 SQUIDCEXTERN
void snmpConnectionShutdown(void);
298 SQUIDCEXTERN
void snmpConnectionClose(void);
299 SQUIDCEXTERN
void snmpDebugOid(int lvl
, oid
* Name
, snint Len
);
301 SQUIDCEXTERN
void addr2oid(IPAddress
&addr
, oid
*Dest
);
302 SQUIDCEXTERN
void oid2addr(oid
*Dest
, IPAddress
&addr
, u_int code
);
304 SQUIDCEXTERN IPAddress
*client_entry(IPAddress
*current
);
305 SQUIDCEXTERN variable_list
*snmp_basicFn(variable_list
*, snint
*);
306 SQUIDCEXTERN variable_list
*snmp_confFn(variable_list
*, snint
*);
307 SQUIDCEXTERN variable_list
*snmp_sysFn(variable_list
*, snint
*);
308 SQUIDCEXTERN variable_list
*snmp_prfSysFn(variable_list
*, snint
*);
309 SQUIDCEXTERN variable_list
*snmp_prfProtoFn(variable_list
*, snint
*);
310 SQUIDCEXTERN variable_list
*snmp_prfPeerFn(variable_list
*, snint
*);
311 SQUIDCEXTERN variable_list
*snmp_netIpFn(variable_list
*, snint
*);
312 SQUIDCEXTERN variable_list
*snmp_netFqdnFn(variable_list
*, snint
*);
314 SQUIDCEXTERN variable_list
*snmp_netDnsFn(variable_list
*, snint
*);
316 SQUIDCEXTERN variable_list
*snmp_netIdnsFn(variable_list
*, snint
*);
318 SQUIDCEXTERN variable_list
*snmp_meshPtblFn(variable_list
*, snint
*);
319 SQUIDCEXTERN variable_list
*snmp_meshCtblFn(variable_list
*, snint
*);
320 #endif /* SQUID_SNMP */
323 SQUIDCEXTERN
void wccpInit(void);
324 SQUIDCEXTERN
void wccpConnectionOpen(void);
325 SQUIDCEXTERN
void wccpConnectionClose(void);
326 #endif /* USE_WCCP */
329 extern void wccp2Init(void);
330 extern void wccp2ConnectionOpen(void);
331 extern void wccp2ConnectionClose(void);
332 #endif /* USE_WCCPv2 */
334 SQUIDCEXTERN
void ipcache_nbgethostbyname(const char *name
,
337 SQUIDCEXTERN
void ipcache_purgelru(void *);
338 SQUIDCEXTERN
const ipcache_addrs
*ipcache_gethostbyname(const char *, int flags
);
339 SQUIDCEXTERN
void ipcacheInvalidate(const char *);
340 SQUIDCEXTERN
void ipcacheInvalidateNegative(const char *);
341 SQUIDCEXTERN
void ipcache_init(void);
342 SQUIDCEXTERN
void stat_ipcache_get(StoreEntry
*);
343 SQUIDCEXTERN
void ipcacheCycleAddr(const char *name
, ipcache_addrs
*);
345 SQUIDCEXTERN
void ipcacheMarkBadAddr(const char *name
, IPAddress
&);
347 SQUIDCEXTERN
void ipcacheMarkGoodAddr(const char *name
, IPAddress
&);
348 SQUIDCEXTERN
void ipcacheFreeMemory(void);
349 SQUIDCEXTERN ipcache_addrs
*ipcacheCheckNumeric(const char *name
);
350 SQUIDCEXTERN
void ipcache_restart(void);
351 SQUIDCEXTERN
int ipcacheAddEntryFromHosts(const char *name
, const char *ipaddr
);
353 SQUIDCEXTERN
char *mime_get_header(const char *mime
, const char *header
);
354 SQUIDCEXTERN
char *mime_get_header_field(const char *mime
, const char *name
, const char *prefix
);
355 SQUIDCEXTERN
size_t headersEnd(const char *, size_t);
357 SQUIDCEXTERN
void mimeInit(char *filename
);
358 SQUIDCEXTERN
void mimeFreeMemory(void);
359 SQUIDCEXTERN
char *mimeGetContentEncoding(const char *fn
);
360 SQUIDCEXTERN
char *mimeGetContentType(const char *fn
);
361 SQUIDCEXTERN
char const *mimeGetIcon(const char *fn
);
362 SQUIDCEXTERN
const char *mimeGetIconURL(const char *fn
);
363 SQUIDCEXTERN
char mimeGetTransferMode(const char *fn
);
364 SQUIDCEXTERN
int mimeGetDownloadOption(const char *fn
);
365 SQUIDCEXTERN
int mimeGetViewOption(const char *fn
);
367 SQUIDCEXTERN
int mcastSetTtl(int, int);
368 SQUIDCEXTERN IPH mcastJoinGroups
;
370 /* Labels for hierachical log file */
371 /* put them all here for easier reference when writing a logfile analyzer */
374 SQUIDCEXTERN peer
*getFirstPeer(void);
375 SQUIDCEXTERN peer
*getFirstUpParent(HttpRequest
*);
376 SQUIDCEXTERN peer
*getNextPeer(peer
*);
377 SQUIDCEXTERN peer
*getSingleParent(HttpRequest
*);
378 SQUIDCEXTERN
int neighborsCount(HttpRequest
*);
379 SQUIDCEXTERN
int neighborsUdpPing(HttpRequest
*,
385 SQUIDCEXTERN
void neighborAddAcl(const char *, const char *);
387 SQUIDCEXTERN
void neighborsUdpAck(const cache_key
*, icp_common_t
*, const IPAddress
&);
388 SQUIDCEXTERN
void neighborAdd(const char *, const char *, int, int, int, int, int);
389 SQUIDCEXTERN
void neighbors_init(void);
391 SQUIDCEXTERN
void neighborsHtcpClear(StoreEntry
*, const char *, HttpRequest
*, const HttpRequestMethod
&, htcp_clr_reason
);
393 SQUIDCEXTERN peer
*peerFindByName(const char *);
394 SQUIDCEXTERN peer
*peerFindByNameAndPort(const char *, unsigned short);
395 SQUIDCEXTERN peer
*getDefaultParent(HttpRequest
* request
);
396 SQUIDCEXTERN peer
*getRoundRobinParent(HttpRequest
* request
);
397 SQUIDCEXTERN peer
*getWeightedRoundRobinParent(HttpRequest
* request
);
398 SQUIDCEXTERN
void peerClearRRStart(void);
399 SQUIDCEXTERN
void peerClearRR(void);
400 SQUIDCEXTERN peer
*getAnyParent(HttpRequest
* request
);
401 SQUIDCEXTERN lookup_t
peerDigestLookup(peer
* p
, HttpRequest
* request
);
402 SQUIDCEXTERN peer
*neighborsDigestSelect(HttpRequest
* request
);
403 SQUIDCEXTERN
void peerNoteDigestLookup(HttpRequest
* request
, peer
* p
, lookup_t lookup
);
404 SQUIDCEXTERN
void peerNoteDigestGone(peer
* p
);
405 SQUIDCEXTERN
int neighborUp(const peer
* e
);
406 SQUIDCEXTERN CBDUNL peerDestroy
;
407 SQUIDCEXTERN
const char *neighborTypeStr(const peer
* e
);
408 SQUIDCEXTERN peer_t
neighborType(const peer
*, const HttpRequest
*);
409 SQUIDCEXTERN
void peerConnectFailed(peer
*);
410 SQUIDCEXTERN
void peerConnectSucceded(peer
*);
411 SQUIDCEXTERN
void dump_peer_options(StoreEntry
*, peer
*);
412 SQUIDCEXTERN
int peerHTTPOkay(const peer
*, HttpRequest
*);
414 SQUIDCEXTERN peer
*whichPeer(const IPAddress
&from
);
416 SQUIDCEXTERN
void netdbInit(void);
418 SQUIDCEXTERN
void netdbHandlePingReply(const IPAddress
&from
, int hops
, int rtt
);
419 SQUIDCEXTERN
void netdbPingSite(const char *hostname
);
420 SQUIDCEXTERN
void netdbDump(StoreEntry
*);
422 #if 0 // AYJ: Looks to be unused now.
423 SQUIDCEXTERN
int netdbHops(IPAddress
&);
425 SQUIDCEXTERN
void netdbFreeMemory(void);
426 SQUIDCEXTERN
int netdbHostHops(const char *host
);
427 SQUIDCEXTERN
int netdbHostRtt(const char *host
);
428 SQUIDCEXTERN
void netdbUpdatePeer(HttpRequest
*, peer
* e
, int rtt
, int hops
);
430 SQUIDCEXTERN
void netdbDeleteAddrNetwork(IPAddress
&addr
);
431 SQUIDCEXTERN
void netdbBinaryExchange(StoreEntry
*);
432 SQUIDCEXTERN
void netdbExchangeStart(void *);
434 SQUIDCEXTERN
void netdbExchangeUpdatePeer(IPAddress
&, peer
*, double, double);
435 SQUIDCEXTERN peer
*netdbClosestParent(HttpRequest
*);
436 SQUIDCEXTERN
void netdbHostData(const char *host
, int *samp
, int *rtt
, int *hops
);
438 SQUIDCEXTERN
void peerSelect(HttpRequest
*, StoreEntry
*, PSC
*, void *data
);
439 SQUIDCEXTERN
void peerSelectInit(void);
443 SQUIDCEXTERN PeerDigest
*peerDigestCreate(peer
* p
);
444 SQUIDCEXTERN
void peerDigestNeeded(PeerDigest
* pd
);
445 SQUIDCEXTERN
void peerDigestNotePeerGone(PeerDigest
* pd
);
446 SQUIDCEXTERN
void peerDigestStatsReport(const PeerDigest
* pd
, StoreEntry
* e
);
448 extern IPAddress
getOutgoingAddr(HttpRequest
* request
);
449 unsigned long getOutgoingTOS(HttpRequest
* request
);
451 SQUIDCEXTERN
void urnStart(HttpRequest
*, StoreEntry
*);
453 SQUIDCEXTERN
void redirectInit(void);
454 SQUIDCEXTERN
void redirectShutdown(void);
456 extern void refreshAddToList(const char *, int, time_t, int, time_t);
457 extern int refreshIsCachable(const StoreEntry
*);
458 extern int refreshCheckHTTP(const StoreEntry
*, HttpRequest
*);
459 extern int refreshCheckICP(const StoreEntry
*, HttpRequest
*);
460 extern int refreshCheckHTCP(const StoreEntry
*, HttpRequest
*);
461 extern int refreshCheckDigest(const StoreEntry
*, time_t delta
);
462 extern time_t getMaxAge(const char *url
);
463 extern void refreshInit(void);
464 extern const refresh_t
*refreshLimits(const char *url
);
466 extern void shut_down(int);
467 extern void rotate_logs(int);
468 extern void reconfigure(int);
471 extern void start_announce(void *unused
);
472 extern void waisStart(FwdState
*);
474 SQUIDCEXTERN
void statInit(void);
475 SQUIDCEXTERN
void statFreeMemory(void);
476 SQUIDCEXTERN
double median_svc_get(int, int);
477 SQUIDCEXTERN
void pconnHistCount(int, int);
478 SQUIDCEXTERN
int stat5minClientRequests(void);
479 SQUIDCEXTERN
double stat5minCPUUsage(void);
480 SQUIDCEXTERN
double statRequestHitRatio(int minutes
);
481 SQUIDCEXTERN
double statRequestHitMemoryRatio(int minutes
);
482 SQUIDCEXTERN
double statRequestHitDiskRatio(int minutes
);
483 SQUIDCEXTERN
double statByteHitRatio(int minutes
);
486 SQUIDCEXTERN
void statHistClean(StatHist
* H
);
487 SQUIDCEXTERN
void statHistCount(StatHist
* H
, double val
);
488 SQUIDCEXTERN
void statHistCopy(StatHist
* Dest
, const StatHist
* Orig
);
489 SQUIDCEXTERN
void statHistSafeCopy(StatHist
* Dest
, const StatHist
* Orig
);
490 SQUIDCEXTERN
double statHistDeltaMedian(const StatHist
* A
, const StatHist
* B
);
491 SQUIDCEXTERN
double statHistDeltaPctile(const StatHist
* A
, const StatHist
* B
, double pctile
);
492 SQUIDCEXTERN
void statHistDump(const StatHist
* H
, StoreEntry
* sentry
, StatHistBinDumper
* bd
);
493 SQUIDCEXTERN
void statHistLogInit(StatHist
* H
, int capacity
, double min
, double max
);
494 SQUIDCEXTERN
void statHistEnumInit(StatHist
* H
, int last_enum
);
495 SQUIDCEXTERN
void statHistIntInit(StatHist
* H
, int n
);
496 SQUIDCEXTERN StatHistBinDumper statHistEnumDumper
;
497 SQUIDCEXTERN StatHistBinDumper statHistIntDumper
;
501 SQUIDCEXTERN
void memClean(void);
502 SQUIDCEXTERN
void memInitModule(void);
503 SQUIDCEXTERN
void memCleanModule(void);
504 SQUIDCEXTERN
void memConfigure(void);
505 SQUIDCEXTERN
void *memAllocate(mem_type
);
506 SQUIDCEXTERN
void *memAllocString(size_t net_size
, size_t * gross_size
);
507 SQUIDCEXTERN
void *memAllocBuf(size_t net_size
, size_t * gross_size
);
508 SQUIDCEXTERN
void *memReallocBuf(void *buf
, size_t net_size
, size_t * gross_size
);
509 SQUIDCEXTERN
void memFree(void *, int type
);
510 SQUIDCEXTERN
void memFree4K(void *);
511 SQUIDCEXTERN
void memFree8K(void *);
512 SQUIDCEXTERN
void memFreeString(size_t size
, void *);
513 SQUIDCEXTERN
void memFreeBuf(size_t size
, void *);
514 SQUIDCEXTERN FREE
*memFreeBufFunc(size_t size
);
515 SQUIDCEXTERN
int memInUse(mem_type
);
516 SQUIDCEXTERN
void memDataInit(mem_type
, const char *, size_t, int, bool zeroOnPush
= true);
517 SQUIDCEXTERN
void memCheckInit(void);
521 SQUIDCEXTERN
void memConfigure(void);
523 /* ----------------------------------------------------------------- */
526 SQUIDCEXTERN
void storeReplSetup(void);
531 SQUIDCEXTERN
void storeLog(int tag
, const StoreEntry
* e
);
532 SQUIDCEXTERN
void storeLogRotate(void);
533 SQUIDCEXTERN
void storeLogClose(void);
534 SQUIDCEXTERN
void storeLogOpen(void);
540 SQUIDCEXTERN cache_key
*storeKeyDup(const cache_key
*);
541 SQUIDCEXTERN cache_key
*storeKeyCopy(cache_key
*, const cache_key
*);
542 SQUIDCEXTERN
void storeKeyFree(const cache_key
*);
543 SQUIDCEXTERN
const cache_key
*storeKeyScan(const char *);
544 SQUIDCEXTERN
const char *storeKeyText(const cache_key
*);
545 SQUIDCEXTERN
const cache_key
*storeKeyPublic(const char *, const HttpRequestMethod
&);
546 SQUIDCEXTERN
const cache_key
*storeKeyPublicByRequest(HttpRequest
*);
547 SQUIDCEXTERN
const cache_key
*storeKeyPublicByRequestMethod(HttpRequest
*, const HttpRequestMethod
&);
548 SQUIDCEXTERN
const cache_key
*storeKeyPrivate(const char *, const HttpRequestMethod
&, int);
549 SQUIDCEXTERN
int storeKeyHashBuckets(int);
550 SQUIDCEXTERN
int storeKeyNull(const cache_key
*);
551 SQUIDCEXTERN
void storeKeyInit(void);
552 SQUIDCEXTERN HASHHASH storeKeyHashHash
;
553 SQUIDCEXTERN HASHCMP storeKeyHashCmp
;
558 SQUIDCEXTERN
void storeDigestInit(void);
559 SQUIDCEXTERN
void storeDigestNoteStoreReady(void);
560 SQUIDCEXTERN
void storeDigestScheduleRebuild(void);
561 SQUIDCEXTERN
void storeDigestDel(const StoreEntry
* entry
);
562 SQUIDCEXTERN
void storeDigestReport(StoreEntry
*);
567 SQUIDCEXTERN
void storeRebuildStart(void);
569 SQUIDCEXTERN
void storeRebuildComplete(struct _store_rebuild_data
*);
570 SQUIDCEXTERN
void storeRebuildProgress(int sd_index
, int total
, int sofar
);
576 SQUIDCEXTERN
void storeSwapInStart(store_client
*);
581 SQUIDCEXTERN store_client
*storeClientListAdd(StoreEntry
* e
, void *data
);
582 SQUIDCEXTERN
int storeClientCopyPending(store_client
*, StoreEntry
* e
, void *data
);
583 SQUIDCEXTERN
int storeUnregister(store_client
* sc
, StoreEntry
* e
, void *data
)
585 SQUIDCEXTERN
int storePendingNClients(const StoreEntry
* e
);
586 SQUIDCEXTERN
int storeClientIsThisAClient(store_client
* sc
, void *someClient
);
589 SQUIDCEXTERN
const char *getMyHostname(void);
590 SQUIDCEXTERN
const char *uniqueHostname(void);
591 SQUIDCEXTERN
void safeunlink(const char *path
, int quiet
);
592 SQUIDCEXTERN
void death(int sig
);
593 SQUIDCEXTERN
void fatal(const char *message
);
596 fatalf(const char *fmt
,...) PRINTF_FORMAT_ARG1
;
598 SQUIDCEXTERN
void fatalf();
600 SQUIDCEXTERN
void fatal_dump(const char *message
);
601 SQUIDCEXTERN
void sigusr2_handle(int sig
);
602 SQUIDCEXTERN
void sig_child(int sig
);
603 SQUIDCEXTERN
void leave_suid(void);
604 SQUIDCEXTERN
void enter_suid(void);
605 SQUIDCEXTERN
void no_suid(void);
606 SQUIDCEXTERN
void writePidFile(void);
607 SQUIDCEXTERN
void setSocketShutdownLifetimes(int);
608 SQUIDCEXTERN
void setMaxFD(void);
609 SQUIDCEXTERN
int percent(int, int);
610 SQUIDCEXTERN
double dpercent(double, double);
611 SQUIDCEXTERN
void squid_signal(int sig
, SIGHDLR
*, int flags
);
612 SQUIDCEXTERN pid_t
readPidFile(void);
613 SQUIDCEXTERN
void keepCapabilities(void);
615 /* AYJ debugs function to show locations being reset with memset() */
616 SQUIDCEXTERN
void *xmemset(void *dst
, int, size_t);
618 SQUIDCEXTERN
int intAverage(int, int, int, int);
619 SQUIDCEXTERN
double doubleAverage(double, double, int, int);
620 SQUIDCEXTERN
void debug_trap(const char *);
621 SQUIDCEXTERN
void logsFlush(void);
622 SQUIDCEXTERN
const char *checkNullString(const char *p
);
624 SQUIDCEXTERN
void squid_getrusage(struct rusage
*r
);
626 SQUIDCEXTERN
double rusage_cputime(struct rusage
*r
);
628 SQUIDCEXTERN
int rusage_maxrss(struct rusage
*r
);
630 SQUIDCEXTERN
int rusage_pagefaults(struct rusage
*r
);
631 SQUIDCEXTERN
void releaseServerSockets(void);
632 SQUIDCEXTERN
void PrintRusage(void);
633 SQUIDCEXTERN
void dumpMallocStats(void);
636 SQUIDCEXTERN
void unlinkdInit(void);
637 SQUIDCEXTERN
void unlinkdClose(void);
638 SQUIDCEXTERN
void unlinkdUnlink(const char *);
641 SQUIDCEXTERN protocol_t
urlParseProtocol(const char *, const char *e
= NULL
);
642 SQUIDCEXTERN
void urlInitialize(void);
643 SQUIDCEXTERN HttpRequest
*urlParse(const HttpRequestMethod
&, char *, HttpRequest
*request
= NULL
);
644 SQUIDCEXTERN
const char *urlCanonical(HttpRequest
*);
645 SQUIDCEXTERN
bool urlIsRelative(const char *);
646 SQUIDCEXTERN
char *urlMakeAbsolute(const HttpRequest
*, const char *);
647 SQUIDCEXTERN
char *urlRInternal(const char *host
, u_short port
, const char *dir
, const char *name
);
648 SQUIDCEXTERN
char *urlInternal(const char *dir
, const char *name
);
649 SQUIDCEXTERN
int matchDomainName(const char *host
, const char *domain
);
650 SQUIDCEXTERN
int urlCheckRequest(const HttpRequest
*);
651 SQUIDCEXTERN
int urlDefaultPort(protocol_t p
);
652 SQUIDCEXTERN
char *urlCanonicalClean(const HttpRequest
*);
653 SQUIDCEXTERN
char *urlHostname(const char *url
);
654 SQUIDCEXTERN
void urlExtMethodConfigure(void);
656 SQUIDCEXTERN
void useragentOpenLog(void);
657 SQUIDCEXTERN
void useragentRotateLog(void);
658 SQUIDCEXTERN
void logUserAgent(const char *, const char *);
659 SQUIDCEXTERN
void useragentLogClose(void);
660 SQUIDCEXTERN
void refererOpenLog(void);
661 SQUIDCEXTERN
void refererRotateLog(void);
662 SQUIDCEXTERN
void logReferer(const char *, const char *, const char *);
663 SQUIDCEXTERN
void refererCloseLog(void);
664 SQUIDCEXTERN peer_t
parseNeighborType(const char *s
);
667 //UNUSED #include "dlink.h"
668 //UNUSED SQUIDCEXTERN void dlinkAdd(void *data, dlink_node *, dlink_list *);
669 //UNUSED SQUIDCEXTERN void dlinkAddAfter(void *, dlink_node *, dlink_node *, dlink_list *);
670 //UNUSED SQUIDCEXTERN void dlinkAddTail(void *data, dlink_node *, dlink_list *);
671 //UNUSED SQUIDCEXTERN void dlinkDelete(dlink_node * m, dlink_list * list);
672 //UNUSED SQUIDCEXTERN void dlinkNodeDelete(dlink_node * m);
673 //UNUSED SQUIDCEXTERN dlink_node *dlinkNodeNew(void);
675 SQUIDCEXTERN
void kb_incr(kb_t
*, size_t);
676 SQUIDCEXTERN
int stringHasWhitespace(const char *);
677 SQUIDCEXTERN
int stringHasCntl(const char *);
678 SQUIDCEXTERN
void linklistPush(link_list
**, void *);
679 SQUIDCEXTERN
void *linklistShift(link_list
**);
680 SQUIDCEXTERN
int xrename(const char *from
, const char *to
);
681 SQUIDCEXTERN
int isPowTen(int);
682 SQUIDCEXTERN
void parseEtcHosts(void);
683 SQUIDCEXTERN
int getMyPort(void);
684 SQUIDCEXTERN
void setUmask(mode_t mask
);
686 SQUIDCEXTERN
char *strwordtok(char *buf
, char **t
);
687 SQUIDCEXTERN
void strwordquote(MemBuf
* mb
, const char *str
);
693 SQUIDCEXTERN pid_t
ipcCreate(int type
,
695 const char *const args
[],
697 IPAddress
&local_addr
,
704 SQUIDCEXTERN CacheDigest
*cacheDigestCreate(int capacity
, int bpe
);
705 SQUIDCEXTERN
void cacheDigestDestroy(CacheDigest
* cd
);
706 SQUIDCEXTERN CacheDigest
*cacheDigestClone(const CacheDigest
* cd
);
707 SQUIDCEXTERN
void cacheDigestClear(CacheDigest
* cd
);
708 SQUIDCEXTERN
void cacheDigestChangeCap(CacheDigest
* cd
, int new_cap
);
709 SQUIDCEXTERN
int cacheDigestTest(const CacheDigest
* cd
, const cache_key
* key
);
710 SQUIDCEXTERN
void cacheDigestAdd(CacheDigest
* cd
, const cache_key
* key
);
711 SQUIDCEXTERN
void cacheDigestDel(CacheDigest
* cd
, const cache_key
* key
);
712 SQUIDCEXTERN
size_t cacheDigestCalcMaskSize(int cap
, int bpe
);
713 SQUIDCEXTERN
int cacheDigestBitUtil(const CacheDigest
* cd
);
714 SQUIDCEXTERN
void cacheDigestGuessStatsUpdate(cd_guess_stats
* stats
, int real_hit
, int guess_hit
);
715 SQUIDCEXTERN
void cacheDigestGuessStatsReport(const cd_guess_stats
* stats
, StoreEntry
* sentry
, const char *label
);
716 SQUIDCEXTERN
void cacheDigestReport(CacheDigest
* cd
, const char *label
, StoreEntry
* e
);
718 SQUIDCEXTERN
void internalStart(HttpRequest
*, StoreEntry
*);
719 SQUIDCEXTERN
int internalCheck(const char *urlpath
);
720 SQUIDCEXTERN
int internalStaticCheck(const char *urlpath
);
721 SQUIDCEXTERN
char *internalLocalUri(const char *dir
, const char *name
);
722 SQUIDCEXTERN
char *internalRemoteUri(const char *, u_short
, const char *, const char *);
723 SQUIDCEXTERN
const char *internalHostname(void);
724 SQUIDCEXTERN
int internalHostnameIs(const char *);
726 SQUIDCEXTERN
void carpInit(void);
727 SQUIDCEXTERN peer
*carpSelectParent(HttpRequest
*);
729 SQUIDCEXTERN
void peerUserHashInit(void);
730 SQUIDCEXTERN peer
* peerUserHashSelectParent(HttpRequest
* request
);
732 SQUIDCEXTERN
void peerSourceHashInit(void);
733 SQUIDCEXTERN peer
* peerSourceHashSelectParent(HttpRequest
* request
);
736 SQUIDCEXTERN
void leakInit(void);
737 SQUIDCEXTERN
void *leakAddFL(void *, const char *, int);
738 SQUIDCEXTERN
void *leakTouchFL(void *, const char *, int);
739 SQUIDCEXTERN
void *leakFreeFL(void *, const char *, int);
743 SQUIDCEXTERN Logfile
*logfileOpen(const char *path
, size_t bufsz
, int);
744 SQUIDCEXTERN
void logfileClose(Logfile
* lf
);
745 SQUIDCEXTERN
void logfileRotate(Logfile
* lf
);
746 SQUIDCEXTERN
void logfileWrite(Logfile
* lf
, void *buf
, size_t len
);
747 SQUIDCEXTERN
void logfileFlush(Logfile
* lf
);
750 logfilePrintf(Logfile
* lf
, const char *fmt
,...) PRINTF_FORMAT_ARG2
;
752 SQUIDCEXTERN
void logfilePrintf(va_alist
);
756 * prototypes for system functions missing from system includes
759 #ifdef _SQUID_SOLARIS_
761 SQUIDCEXTERN
int getrusage(int, struct rusage
*);
762 SQUIDCEXTERN
int getpagesize(void);
763 #if !defined(_XPG4_2) && !(defined(__EXTENSIONS__) || \
764 (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)))
765 SQUIDCEXTERN
int gethostname(char *, int);
770 * hack to allow snmp access to the statistics counters
772 SQUIDCEXTERN StatCounters
*snmpStatGet(int);
774 /* Vary support functions */
775 SQUIDCEXTERN
int varyEvaluateMatch(StoreEntry
* entry
, HttpRequest
* req
);
777 /* CygWin & Windows NT Port */
780 SQUIDCEXTERN
int WIN32_Subsystem_Init(int *, char ***);
781 SQUIDCEXTERN
void WIN32_sendSignal(int);
782 SQUIDCEXTERN
void WIN32_Abort(int);
783 SQUIDCEXTERN
void WIN32_Exit(void);
784 SQUIDCEXTERN
void WIN32_SetServiceCommandLine(void);
785 SQUIDCEXTERN
void WIN32_InstallService(void);
786 SQUIDCEXTERN
void WIN32_RemoveService(void);
787 SQUIDCEXTERN
int SquidMain(int, char **);
788 #endif /* _SQUID_WIN32_ */
791 SQUIDCEXTERN
int WIN32_pipe(int[2]);
793 SQUIDCEXTERN
int WIN32_getrusage(int, struct rusage
*);
794 SQUIDCEXTERN
void WIN32_ExceptionHandlerInit(void);
796 SQUIDCEXTERN
int Win32__WSAFDIsSet(int fd
, fd_set
* set
);
797 SQUIDCEXTERN DWORD
WIN32_IpAddrChangeMonitorInit();
803 SQUIDCEXTERN
void parse_externalAclHelper(external_acl
**);
805 SQUIDCEXTERN
void dump_externalAclHelper(StoreEntry
* sentry
, const char *name
, const external_acl
*);
807 SQUIDCEXTERN
void free_externalAclHelper(external_acl
**);
809 typedef void EAH(void *data
, void *result
);
811 SQUIDCEXTERN
void externalAclLookup(ACLChecklist
* ch
, void *acl_data
, EAH
* handler
, void *data
);
813 SQUIDCEXTERN
void externalAclInit(void);
815 SQUIDCEXTERN
void externalAclShutdown(void);
817 SQUIDCEXTERN
char *strtokFile(void);
821 SQUIDCEXTERN
void parse_wccp2_method(int *v
);
822 SQUIDCEXTERN
void free_wccp2_method(int *v
);
823 SQUIDCEXTERN
void dump_wccp2_method(StoreEntry
* e
, const char *label
, int v
);
824 SQUIDCEXTERN
void parse_wccp2_amethod(int *v
);
825 SQUIDCEXTERN
void free_wccp2_amethod(int *v
);
826 SQUIDCEXTERN
void dump_wccp2_amethod(StoreEntry
* e
, const char *label
, int v
);
828 SQUIDCEXTERN
void parse_wccp2_service(void *v
);
829 SQUIDCEXTERN
void free_wccp2_service(void *v
);
830 SQUIDCEXTERN
void dump_wccp2_service(StoreEntry
* e
, const char *label
, void *v
);
832 SQUIDCEXTERN
int check_null_wccp2_service(void *v
);
834 SQUIDCEXTERN
void parse_wccp2_service_info(void *v
);
836 SQUIDCEXTERN
void free_wccp2_service_info(void *v
);
838 SQUIDCEXTERN
void dump_wccp2_service_info(StoreEntry
* e
, const char *label
, void *v
);
842 #endif /* SQUID_PROTOS_H */