]> git.ipfire.org Git - thirdparty/squid.git/blob - src/protos.h
Merged from trunk.
[thirdparty/squid.git] / src / protos.h
1 /*
2 * $Id: protos.h,v 1.557 2008/02/26 21:49:35 amosjeffries Exp $
3 *
4 *
5 * SQUID Web Proxy Cache http://www.squid-cache.org/
6 * ----------------------------------------------------------
7 *
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.
16 *
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.
21 *
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.
26 *
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.
30 *
31 */
32 #ifndef SQUID_PROTOS_H
33 #define SQUID_PROTOS_H
34
35 /* included for routines that have not moved out to their proper homes
36 * yet.
37 */
38 #include "Packer.h"
39 /* for routines still in this file that take CacheManager parameters */
40 #include "IPAddress.h"
41 /* for parameters that still need these */
42 #include "enums.h"
43 /* some parameters stil need this */
44 #include "wordlist.h"
45
46 class HttpRequestMethod;
47
48
49 #if FORW_VIA_DB
50 SQUIDCEXTERN void fvdbCountVia(const char *key);
51 SQUIDCEXTERN void fvdbCountForw(const char *key);
52 #endif
53 #if HEADERS_LOG
54 SQUIDCEXTERN void headersLog(int cs, int pq, const HttpRequestMethod& m, void *data);
55 #endif
56 SQUIDCEXTERN char *log_quote(const char *header);
57 SQUIDCEXTERN int logTypeIsATcpHit(log_type);
58
59 /*
60 * cache_cf.c
61 */
62 SQUIDCEXTERN void configFreeMemory(void);
63 class MemBuf;
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);
69
70
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);
78
79 SQUIDCEXTERN void parse_IPAddress_list_token(IPAddress_list **, char *);
80
81
82 /* client_side.c - FD related client side routines */
83
84 SQUIDCEXTERN void clientdbInit(void);
85
86 SQUIDCEXTERN void clientdbUpdate(const IPAddress &, log_type, protocol_t, size_t);
87
88 SQUIDCEXTERN int clientdbCutoffDenied(const IPAddress &);
89 SQUIDCEXTERN void clientdbDump(StoreEntry *);
90 SQUIDCEXTERN void clientdbFreeMemory(void);
91
92 SQUIDCEXTERN int clientdbEstablished(const IPAddress &, int);
93 SQUIDCEXTERN void clientOpenListenSockets(void);
94 SQUIDCEXTERN void clientHttpConnectionsClose(void);
95 SQUIDCEXTERN void httpRequestFree(void *);
96
97 extern void clientAccessCheck(void *);
98
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);
102
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);
106
107 #if STDC_HEADERS
108 SQUIDCEXTERN void _db_print(const char *,...) PRINTF_FORMAT_ARG1;
109 #else
110 SQUIDCEXTERN void _db_print();
111 #endif
112
113 /* packs, then prints an object using debug() */
114 SQUIDCEXTERN void debugObj(int section, int level, const char *label, void *obj, ObjPackMethod pm);
115
116 /* disk.c */
117 SQUIDCEXTERN int file_open(const char *path, int mode);
118 SQUIDCEXTERN void file_close(int fd);
119 /* Adapter file_write for object callbacks */
120
121 template <class O>
122 void
123 FreeObject(void *address)
124 {
125 O *anObject = static_cast <O *>(address);
126 delete anObject;
127 }
128
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);
133
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();
139
140 /* dns_internal.c */
141 SQUIDCEXTERN void idnsInit(void);
142 SQUIDCEXTERN void idnsShutdown(void);
143 SQUIDCEXTERN void idnsALookup(const char *, IDNSCB *, void *);
144
145 SQUIDCEXTERN void idnsPTRLookup(const IPAddress &, IDNSCB *, void *);
146
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);
155
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 *);
162
163
164 SQUIDCEXTERN void fqdncache_nbgethostbyaddr(IPAddress &, FQDNH *, void *);
165
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 *);
170
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);
177
178 class FwdState;
179
180 /**
181 \defgroup ServerProtocolFTPAPI Server-Side FTP API
182 \ingroup ServerProtocol
183 */
184
185 /// \ingroup ServerProtocolFTPAPI
186 SQUIDCEXTERN void ftpStart(FwdState *);
187
188 class HttpRequest;
189
190 /// \ingroup ServerProtocolFTPAPI
191 SQUIDCEXTERN const char *ftpUrlWith2f(HttpRequest *);
192
193
194 /**
195 \defgroup ServerProtocolGopherAPI Server-Side Gopher API
196 \ingroup ServerProtocol
197 */
198
199 /// \ingroup ServerProtocolGopherAPI
200 SQUIDCEXTERN void gopherStart(FwdState *);
201
202 /// \ingroup ServerProtocolGopherAPI
203 SQUIDCEXTERN int gopherCachable(const HttpRequest *);
204
205
206 /**
207 \defgroup ServerProtocolWhoisAPI Server-Side WHOIS API
208 \ingroup ServerProtocol
209 */
210
211 /// \ingroup ServerProtocolWhoisAPI
212 SQUIDCEXTERN void whoisStart(FwdState *);
213
214
215 /* http.c */
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,
222 StoreEntry * entry,
223 MemBuf * mb,
224 http_state_flags);
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);
229
230 /* ETag */
231 SQUIDCEXTERN int etagParseInit(ETag * etag, const char *str);
232 SQUIDCEXTERN int etagIsEqual(const ETag * tag1, const ETag * tag2);
233
234 SQUIDCEXTERN const char *httpStatusString(http_status status);
235
236 /* Http Body */
237 /* init/clean */
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);
244
245 /* pack */
246 SQUIDCEXTERN void httpBodyPackInto(const HttpBody * body, Packer * p);
247
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);
260
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);
276 #if STDC_HEADERS
277 SQUIDCEXTERN void
278 httpHeaderPutStrf(HttpHeader * hdr, http_hdr_type id, const char *fmt,...) PRINTF_FORMAT_ARG3;
279 #else
280 SQUIDCEXTERN void httpHeaderPutStrf();
281 #endif
282
283
284 /* Http Header */
285 SQUIDCEXTERN void httpHeaderInitModule(void);
286 SQUIDCEXTERN void httpHeaderCleanModule(void);
287
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();
292
293 #ifdef SQUID_SNMP
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);
300
301 SQUIDCEXTERN void addr2oid(IPAddress &addr, oid *Dest);
302 SQUIDCEXTERN void oid2addr(oid *Dest, IPAddress &addr, u_int code);
303
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 *);
313 #if USE_DNSSERVERS
314 SQUIDCEXTERN variable_list *snmp_netDnsFn(variable_list *, snint *);
315 #else
316 SQUIDCEXTERN variable_list *snmp_netIdnsFn(variable_list *, snint *);
317 #endif
318 SQUIDCEXTERN variable_list *snmp_meshPtblFn(variable_list *, snint *);
319 SQUIDCEXTERN variable_list *snmp_meshCtblFn(variable_list *, snint *);
320 #endif /* SQUID_SNMP */
321
322 #if USE_WCCP
323 SQUIDCEXTERN void wccpInit(void);
324 SQUIDCEXTERN void wccpConnectionOpen(void);
325 SQUIDCEXTERN void wccpConnectionClose(void);
326 #endif /* USE_WCCP */
327
328 #if USE_WCCPv2
329 extern void wccp2Init(void);
330 extern void wccp2ConnectionOpen(void);
331 extern void wccp2ConnectionClose(void);
332 #endif /* USE_WCCPv2 */
333
334 SQUIDCEXTERN void ipcache_nbgethostbyname(const char *name,
335 IPH * handler,
336 void *handlerData);
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 *);
344
345 SQUIDCEXTERN void ipcacheMarkBadAddr(const char *name, IPAddress &);
346
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);
352
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);
356
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);
366
367 SQUIDCEXTERN int mcastSetTtl(int, int);
368 SQUIDCEXTERN IPH mcastJoinGroups;
369
370 /* Labels for hierachical log file */
371 /* put them all here for easier reference when writing a logfile analyzer */
372
373
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 *,
380 StoreEntry *,
381 IRCB * callback,
382 void *data,
383 int *exprep,
384 int *timeout);
385 SQUIDCEXTERN void neighborAddAcl(const char *, const char *);
386
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);
390 #if USE_HTCP
391 SQUIDCEXTERN void neighborsHtcpClear(StoreEntry *, const char *, HttpRequest *, const HttpRequestMethod &, htcp_clr_reason);
392 #endif
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 *);
413
414 SQUIDCEXTERN peer *whichPeer(const IPAddress &from);
415
416 SQUIDCEXTERN void netdbInit(void);
417
418 SQUIDCEXTERN void netdbHandlePingReply(const IPAddress &from, int hops, int rtt);
419 SQUIDCEXTERN void netdbPingSite(const char *hostname);
420 SQUIDCEXTERN void netdbDump(StoreEntry *);
421
422 #if 0 // AYJ: Looks to be unused now.
423 SQUIDCEXTERN int netdbHops(IPAddress &);
424 #endif
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);
429
430 SQUIDCEXTERN void netdbDeleteAddrNetwork(IPAddress &addr);
431 SQUIDCEXTERN void netdbBinaryExchange(StoreEntry *);
432 SQUIDCEXTERN void netdbExchangeStart(void *);
433
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);
437
438 SQUIDCEXTERN void peerSelect(HttpRequest *, StoreEntry *, PSC *, void *data);
439 SQUIDCEXTERN void peerSelectInit(void);
440
441 /* peer_digest.c */
442 class PeerDigest;
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);
447
448 extern IPAddress getOutgoingAddr(HttpRequest * request);
449 unsigned long getOutgoingTOS(HttpRequest * request);
450
451 SQUIDCEXTERN void urnStart(HttpRequest *, StoreEntry *);
452
453 SQUIDCEXTERN void redirectInit(void);
454 SQUIDCEXTERN void redirectShutdown(void);
455
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);
465
466 extern void shut_down(int);
467 extern void rotate_logs(int);
468 extern void reconfigure(int);
469
470
471 extern void start_announce(void *unused);
472 extern void waisStart(FwdState *);
473
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);
484
485 /* StatHist */
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;
498
499
500 /* mem */
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);
518
519
520 /* Mem */
521 SQUIDCEXTERN void memConfigure(void);
522
523 /* ----------------------------------------------------------------- */
524
525 /* repl_modules.c */
526 SQUIDCEXTERN void storeReplSetup(void);
527
528 /*
529 * store_log.c
530 */
531 SQUIDCEXTERN void storeLog(int tag, const StoreEntry * e);
532 SQUIDCEXTERN void storeLogRotate(void);
533 SQUIDCEXTERN void storeLogClose(void);
534 SQUIDCEXTERN void storeLogOpen(void);
535
536
537 /*
538 * store_key_*.c
539 */
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;
554
555 /*
556 * store_digest.c
557 */
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 *);
563
564 /*
565 * store_rebuild.c
566 */
567 SQUIDCEXTERN void storeRebuildStart(void);
568
569 SQUIDCEXTERN void storeRebuildComplete(struct _store_rebuild_data *);
570 SQUIDCEXTERN void storeRebuildProgress(int sd_index, int total, int sofar);
571
572 /*
573 * store_swapin.c
574 */
575 class store_client;
576 SQUIDCEXTERN void storeSwapInStart(store_client *);
577
578 /*
579 * store_client.c
580 */
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)
584 ;
585 SQUIDCEXTERN int storePendingNClients(const StoreEntry * e);
586 SQUIDCEXTERN int storeClientIsThisAClient(store_client * sc, void *someClient);
587
588
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);
594 #if STDC_HEADERS
595 SQUIDCEXTERN void
596 fatalf(const char *fmt,...) PRINTF_FORMAT_ARG1;
597 #else
598 SQUIDCEXTERN void fatalf();
599 #endif
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);
614
615 /* AYJ debugs function to show locations being reset with memset() */
616 SQUIDCEXTERN void *xmemset(void *dst, int, size_t);
617
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);
623
624 SQUIDCEXTERN void squid_getrusage(struct rusage *r);
625
626 SQUIDCEXTERN double rusage_cputime(struct rusage *r);
627
628 SQUIDCEXTERN int rusage_maxrss(struct rusage *r);
629
630 SQUIDCEXTERN int rusage_pagefaults(struct rusage *r);
631 SQUIDCEXTERN void releaseServerSockets(void);
632 SQUIDCEXTERN void PrintRusage(void);
633 SQUIDCEXTERN void dumpMallocStats(void);
634
635 #if USE_UNLINKD
636 SQUIDCEXTERN void unlinkdInit(void);
637 SQUIDCEXTERN void unlinkdClose(void);
638 SQUIDCEXTERN void unlinkdUnlink(const char *);
639 #endif
640
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);
655
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);
665
666 /* tools.c */
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);
674
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);
685
686 SQUIDCEXTERN char *strwordtok(char *buf, char **t);
687 SQUIDCEXTERN void strwordquote(MemBuf * mb, const char *str);
688
689
690 /*
691 * ipc.c
692 */
693 SQUIDCEXTERN pid_t ipcCreate(int type,
694 const char *prog,
695 const char *const args[],
696 const char *name,
697 IPAddress &local_addr,
698 int *rfd,
699 int *wfd,
700 void **hIpc);
701
702
703 /* CacheDigest */
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);
717
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 *);
725
726 SQUIDCEXTERN void carpInit(void);
727 SQUIDCEXTERN peer *carpSelectParent(HttpRequest *);
728
729 SQUIDCEXTERN void peerUserHashInit(void);
730 SQUIDCEXTERN peer * peerUserHashSelectParent(HttpRequest * request);
731
732 SQUIDCEXTERN void peerSourceHashInit(void);
733 SQUIDCEXTERN peer * peerSourceHashSelectParent(HttpRequest * request);
734
735 #if USE_LEAKFINDER
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);
740 #endif
741
742 /* logfile.c */
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);
748 #if STDC_HEADERS
749 SQUIDCEXTERN void
750 logfilePrintf(Logfile * lf, const char *fmt,...) PRINTF_FORMAT_ARG2;
751 #else
752 SQUIDCEXTERN void logfilePrintf(va_alist);
753 #endif
754
755 /*
756 * prototypes for system functions missing from system includes
757 */
758
759 #ifdef _SQUID_SOLARIS_
760
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);
766 #endif
767 #endif
768
769 /*
770 * hack to allow snmp access to the statistics counters
771 */
772 SQUIDCEXTERN StatCounters *snmpStatGet(int);
773
774 /* Vary support functions */
775 SQUIDCEXTERN int varyEvaluateMatch(StoreEntry * entry, HttpRequest * req);
776
777 /* CygWin & Windows NT Port */
778 /* win32.c */
779 #ifdef _SQUID_WIN32_
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_ */
789 #ifdef _SQUID_MSWIN_
790
791 SQUIDCEXTERN int WIN32_pipe(int[2]);
792
793 SQUIDCEXTERN int WIN32_getrusage(int, struct rusage *);
794 SQUIDCEXTERN void WIN32_ExceptionHandlerInit(void);
795
796 SQUIDCEXTERN int Win32__WSAFDIsSet(int fd, fd_set* set);
797 SQUIDCEXTERN DWORD WIN32_IpAddrChangeMonitorInit();
798
799 #endif
800
801 /* external_acl.c */
802 class external_acl;
803 SQUIDCEXTERN void parse_externalAclHelper(external_acl **);
804
805 SQUIDCEXTERN void dump_externalAclHelper(StoreEntry * sentry, const char *name, const external_acl *);
806
807 SQUIDCEXTERN void free_externalAclHelper(external_acl **);
808
809 typedef void EAH(void *data, void *result);
810 class ACLChecklist;
811 SQUIDCEXTERN void externalAclLookup(ACLChecklist * ch, void *acl_data, EAH * handler, void *data);
812
813 SQUIDCEXTERN void externalAclInit(void);
814
815 SQUIDCEXTERN void externalAclShutdown(void);
816
817 SQUIDCEXTERN char *strtokFile(void);
818
819 #if USE_WCCPv2
820
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);
827
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);
831
832 SQUIDCEXTERN int check_null_wccp2_service(void *v);
833
834 SQUIDCEXTERN void parse_wccp2_service_info(void *v);
835
836 SQUIDCEXTERN void free_wccp2_service_info(void *v);
837
838 SQUIDCEXTERN void dump_wccp2_service_info(StoreEntry * e, const char *label, void *v);
839
840 #endif
841
842 #endif /* SQUID_PROTOS_H */