]> git.ipfire.org Git - thirdparty/squid.git/blob - src/protos.h
Merge from trunk
[thirdparty/squid.git] / src / protos.h
1 /*
2 * SQUID Web Proxy Cache http://www.squid-cache.org/
3 * ----------------------------------------------------------
4 *
5 * Squid is the result of efforts by numerous individuals from
6 * the Internet community; see the CONTRIBUTORS file for full
7 * details. Many organizations have provided support for Squid's
8 * development; see the SPONSORS file for full details. Squid is
9 * Copyrighted (C) 2001 by the Regents of the University of
10 * California; see the COPYRIGHT file for full details. Squid
11 * incorporates software developed and/or copyrighted by other
12 * sources; see the CREDITS file for full details.
13 *
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation; either version 2 of the License, or
17 * (at your option) any later version.
18 *
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with this program; if not, write to the Free Software
26 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
27 *
28 */
29 #ifndef SQUID_PROTOS_H
30 #define SQUID_PROTOS_H
31
32 /* included for routines that have not moved out to their proper homes
33 * yet.
34 */
35 #include "Packer.h"
36 /* for routines still in this file that take CacheManager parameters */
37 #include "ip/Address.h"
38 /* for parameters that still need these */
39 #include "enums.h"
40 /* some parameters stil need this */
41 #include "wordlist.h"
42
43 /* for parameters that still need these */
44 #include "lookup_t.h"
45
46
47 class HttpRequestMethod;
48
49
50 #if USE_FORW_VIA_DB
51 SQUIDCEXTERN void fvdbCountVia(const char *key);
52 SQUIDCEXTERN void fvdbCountForw(const char *key);
53 #endif
54 #if HEADERS_LOG
55 SQUIDCEXTERN void headersLog(int cs, int pq, const HttpRequestMethod& m, void *data);
56 #endif
57 SQUIDCEXTERN char *log_quote(const char *header);
58 SQUIDCEXTERN int logTypeIsATcpHit(log_type);
59
60 /*
61 * cache_cf.c
62 */
63 SQUIDCEXTERN void configFreeMemory(void);
64 class MemBuf;
65 SQUIDCEXTERN void wordlistCat(const wordlist *, MemBuf * mb);
66 SQUIDCEXTERN void self_destruct(void);
67 SQUIDCEXTERN void add_http_port(char *portspec);
68 extern int xatoi(const char *token);
69 extern long xatol(const char *token);
70
71
72 /* extra functions from cache_cf.c useful for lib modules */
73 SQUIDCEXTERN void parse_int(int *var);
74 SQUIDCEXTERN void parse_onoff(int *var);
75 SQUIDCEXTERN void parse_eol(char *volatile *var);
76 SQUIDCEXTERN void parse_wordlist(wordlist ** list);
77 SQUIDCEXTERN void requirePathnameExists(const char *name, const char *path);
78 SQUIDCEXTERN void parse_time_t(time_t * var);
79
80
81 /* client_side.c - FD related client side routines */
82
83 SQUIDCEXTERN void clientdbInit(void);
84
85 SQUIDCEXTERN void clientdbUpdate(const Ip::Address &, log_type, protocol_t, size_t);
86
87 SQUIDCEXTERN int clientdbCutoffDenied(const Ip::Address &);
88 void clientdbDump(StoreEntry *);
89 SQUIDCEXTERN void clientdbFreeMemory(void);
90
91 SQUIDCEXTERN int clientdbEstablished(const Ip::Address &, int);
92 SQUIDCEXTERN void clientOpenListenSockets(void);
93 SQUIDCEXTERN void clientHttpConnectionsClose(void);
94 SQUIDCEXTERN void httpRequestFree(void *);
95
96 extern void clientAccessCheck(void *);
97
98 #include "Debug.h"
99
100 /* see debug.c for info on context-based debugging */
101 SQUIDCEXTERN Ctx ctx_enter(const char *descr);
102 SQUIDCEXTERN void ctx_exit(Ctx ctx);
103
104 SQUIDCEXTERN void _db_set_syslog(const char *facility);
105 SQUIDCEXTERN void _db_init(const char *logfile, const char *options);
106 SQUIDCEXTERN void _db_rotate_log(void);
107
108 /* packs, then prints an object using debugs() */
109 SQUIDCEXTERN void debugObj(int section, int level, const char *label, void *obj, ObjPackMethod pm);
110
111 /* disk.c */
112 SQUIDCEXTERN int file_open(const char *path, int mode);
113 SQUIDCEXTERN void file_close(int fd);
114 /* Adapter file_write for object callbacks */
115
116 template <class O>
117 void
118 FreeObject(void *address)
119 {
120 O *anObject = static_cast <O *>(address);
121 delete anObject;
122 }
123
124 SQUIDCEXTERN void file_write(int, off_t, void const *, int len, DWCB *, void *, FREE *);
125 SQUIDCEXTERN void file_write_mbuf(int fd, off_t, MemBuf mb, DWCB * handler, void *handler_data);
126 SQUIDCEXTERN void file_read(int, char *, int, off_t, DRCB *, void *);
127 SQUIDCEXTERN void disk_init(void);
128
129 SQUIDCEXTERN void dnsShutdown(void);
130 SQUIDCEXTERN void dnsInit(void);
131 SQUIDCEXTERN void dnsSubmit(const char *lookup, HLPCB * callback, void *data);
132
133 /* dns_internal.c */
134 SQUIDCEXTERN void idnsInit(void);
135 SQUIDCEXTERN void idnsShutdown(void);
136 SQUIDCEXTERN void idnsALookup(const char *, IDNSCB *, void *);
137
138 SQUIDCEXTERN void idnsPTRLookup(const Ip::Address &, IDNSCB *, void *);
139
140 SQUIDCEXTERN void fd_close(int fd);
141 SQUIDCEXTERN void fd_open(int fd, unsigned int type, const char *);
142 SQUIDCEXTERN void fd_note(int fd, const char *);
143 SQUIDCEXTERN void fd_bytes(int fd, int len, unsigned int type);
144 SQUIDCEXTERN void fdDumpOpen(void);
145 SQUIDCEXTERN int fdUsageHigh(void);
146 SQUIDCEXTERN void fdAdjustReserved(void);
147
148 SQUIDCEXTERN fileMap *file_map_create(void);
149 SQUIDCEXTERN int file_map_allocate(fileMap *, int);
150 SQUIDCEXTERN int file_map_bit_set(fileMap *, int);
151 SQUIDCEXTERN int file_map_bit_test(fileMap *, int);
152 SQUIDCEXTERN void file_map_bit_reset(fileMap *, int);
153 SQUIDCEXTERN void filemapFreeMemory(fileMap *);
154
155
156 SQUIDCEXTERN void fqdncache_nbgethostbyaddr(const Ip::Address &, FQDNH *, void *);
157
158 SQUIDCEXTERN const char *fqdncache_gethostbyaddr(const Ip::Address &, int flags);
159 SQUIDCEXTERN void fqdncache_init(void);
160 SQUIDCEXTERN void fqdnStats(StoreEntry *);
161 SQUIDCEXTERN void fqdncacheReleaseInvalid(const char *);
162
163 SQUIDCEXTERN const char *fqdnFromAddr(const Ip::Address &);
164 SQUIDCEXTERN int fqdncacheQueueDrain(void);
165 SQUIDCEXTERN void fqdncacheFreeMemory(void);
166 SQUIDCEXTERN void fqdncache_restart(void);
167 SQUIDCEXTERN void fqdncache_purgelru(void *);
168 SQUIDCEXTERN void fqdncacheAddEntryFromHosts(char *addr, wordlist * hostnames);
169
170 class FwdState;
171
172 /**
173 \defgroup ServerProtocolFTPAPI Server-Side FTP API
174 \ingroup ServerProtocol
175 */
176
177 /// \ingroup ServerProtocolFTPAPI
178 SQUIDCEXTERN void ftpStart(FwdState *);
179
180 class HttpRequest;
181 class HttpReply;
182
183 /// \ingroup ServerProtocolFTPAPI
184 SQUIDCEXTERN const char *ftpUrlWith2f(HttpRequest *);
185
186
187 /**
188 \defgroup ServerProtocolGopherAPI Server-Side Gopher API
189 \ingroup ServerProtocol
190 */
191
192 /// \ingroup ServerProtocolGopherAPI
193 SQUIDCEXTERN void gopherStart(FwdState *);
194
195 /// \ingroup ServerProtocolGopherAPI
196 SQUIDCEXTERN int gopherCachable(const HttpRequest *);
197
198
199 /**
200 \defgroup ServerProtocolWhoisAPI Server-Side WHOIS API
201 \ingroup ServerProtocol
202 */
203
204 /// \ingroup ServerProtocolWhoisAPI
205 SQUIDCEXTERN void whoisStart(FwdState *);
206
207
208 /* http.c */
209 /* for http_hdr_type field */
210 #include "HttpHeader.h"
211 SQUIDCEXTERN int httpCachable(const HttpRequestMethod&);
212 SQUIDCEXTERN void httpStart(FwdState *);
213 SQUIDCEXTERN mb_size_t httpBuildRequestPrefix(HttpRequest * request,
214 HttpRequest * orig_request,
215 StoreEntry * entry,
216 MemBuf * mb,
217 http_state_flags);
218 SQUIDCEXTERN void httpAnonInitModule(void);
219 SQUIDCEXTERN int httpAnonHdrAllowed(http_hdr_type hdr_id);
220 SQUIDCEXTERN int httpAnonHdrDenied(http_hdr_type hdr_id);
221 SQUIDCEXTERN const char *httpMakeVaryMark(HttpRequest * request, HttpReply const * reply);
222
223 /* ETag */
224 SQUIDCEXTERN int etagParseInit(ETag * etag, const char *str);
225 SQUIDCEXTERN int etagIsEqual(const ETag * tag1, const ETag * tag2);
226
227 #include "HttpStatusCode.h"
228 SQUIDCEXTERN const char *httpStatusString(http_status status);
229
230 /* Http Body */
231 /* init/clean */
232 SQUIDCEXTERN void httpBodyInit(HttpBody * body);
233 SQUIDCEXTERN void httpBodyClean(HttpBody * body);
234 /* get body ptr (always use this) */
235 SQUIDCEXTERN const char *httpBodyPtr(const HttpBody * body);
236 /* set body, does not clone mb so you should not reuse it */
237 SQUIDCEXTERN void httpBodySet(HttpBody * body, MemBuf * mb);
238
239 /* pack */
240 SQUIDCEXTERN void httpBodyPackInto(const HttpBody * body, Packer * p);
241
242 /* Http Cache Control Header Field */
243 SQUIDCEXTERN void httpHdrCcInitModule(void);
244 SQUIDCEXTERN void httpHdrCcCleanModule(void);
245 SQUIDCEXTERN HttpHdrCc *httpHdrCcCreate(void);
246 SQUIDCEXTERN HttpHdrCc *httpHdrCcParseCreate(const String * str);
247 SQUIDCEXTERN void httpHdrCcDestroy(HttpHdrCc * cc);
248 SQUIDCEXTERN HttpHdrCc *httpHdrCcDup(const HttpHdrCc * cc);
249 SQUIDCEXTERN void httpHdrCcPackInto(const HttpHdrCc * cc, Packer * p);
250 SQUIDCEXTERN void httpHdrCcSetMaxAge(HttpHdrCc * cc, int max_age);
251 SQUIDCEXTERN void httpHdrCcSetSMaxAge(HttpHdrCc * cc, int s_maxage);
252 SQUIDCEXTERN void httpHdrCcUpdateStats(const HttpHdrCc * cc, StatHist * hist);
253 SQUIDCEXTERN void httpHdrCcStatDumper(StoreEntry * sentry, int idx, double val, double size, int count);
254
255 /* Http Header Tools */
256 class HttpHeaderFieldInfo;
257 SQUIDCEXTERN HttpHeaderFieldInfo *httpHeaderBuildFieldsInfo(const HttpHeaderFieldAttrs * attrs, int count);
258 SQUIDCEXTERN void httpHeaderDestroyFieldsInfo(HttpHeaderFieldInfo * info, int count);
259 SQUIDCEXTERN http_hdr_type httpHeaderIdByName(const char *name, size_t name_len, const HttpHeaderFieldInfo * attrs, int end);
260 SQUIDCEXTERN http_hdr_type httpHeaderIdByNameDef(const char *name, int name_len);
261 SQUIDCEXTERN const char *httpHeaderNameById(int id);
262 SQUIDCEXTERN int httpHeaderHasConnDir(const HttpHeader * hdr, const char *directive);
263 SQUIDCEXTERN void strListAdd(String * str, const char *item, char del);
264 SQUIDCEXTERN int strListIsMember(const String * str, const char *item, char del);
265 SQUIDCEXTERN int strListIsSubstr(const String * list, const char *s, char del);
266 SQUIDCEXTERN int strListGetItem(const String * str, char del, const char **item, int *ilen, const char **pos);
267 SQUIDCEXTERN const char *getStringPrefix(const char *str, const char *end);
268 SQUIDCEXTERN int httpHeaderParseInt(const char *start, int *val);
269 SQUIDCEXTERN int httpHeaderParseOffset(const char *start, int64_t * off);
270 SQUIDCEXTERN void
271 httpHeaderPutStrf(HttpHeader * hdr, http_hdr_type id, const char *fmt,...) PRINTF_FORMAT_ARG3;
272
273
274 /* Http Header */
275 SQUIDCEXTERN void httpHeaderInitModule(void);
276 SQUIDCEXTERN void httpHeaderCleanModule(void);
277
278 /* store report about current header usage and other stats */
279 SQUIDCEXTERN void httpHeaderStoreReport(StoreEntry * e);
280 SQUIDCEXTERN void httpHdrMangleList(HttpHeader *, HttpRequest *, int req_or_rep);
281 SQUIDCEXTERN int httpReqHdrManglersConfigured();
282
283 #if SQUID_SNMP
284 SQUIDCEXTERN PF snmpHandleUdp;
285 SQUIDCEXTERN void snmpInit(void);
286 SQUIDCEXTERN void snmpConnectionOpen(void);
287 SQUIDCEXTERN void snmpConnectionShutdown(void);
288 SQUIDCEXTERN void snmpConnectionClose(void);
289 SQUIDCEXTERN const char * snmpDebugOid(oid * Name, snint Len, MemBuf &outbuf);
290
291 SQUIDCEXTERN void addr2oid(Ip::Address &addr, oid *Dest);
292 SQUIDCEXTERN void oid2addr(oid *Dest, Ip::Address &addr, u_int code);
293
294 SQUIDCEXTERN Ip::Address *client_entry(Ip::Address *current);
295 SQUIDCEXTERN variable_list *snmp_basicFn(variable_list *, snint *);
296 SQUIDCEXTERN variable_list *snmp_confFn(variable_list *, snint *);
297 SQUIDCEXTERN variable_list *snmp_sysFn(variable_list *, snint *);
298 SQUIDCEXTERN variable_list *snmp_prfSysFn(variable_list *, snint *);
299 SQUIDCEXTERN variable_list *snmp_prfProtoFn(variable_list *, snint *);
300 SQUIDCEXTERN variable_list *snmp_prfPeerFn(variable_list *, snint *);
301 SQUIDCEXTERN variable_list *snmp_netIpFn(variable_list *, snint *);
302 SQUIDCEXTERN variable_list *snmp_netFqdnFn(variable_list *, snint *);
303 #if USE_DNSSERVERS
304 SQUIDCEXTERN variable_list *snmp_netDnsFn(variable_list *, snint *);
305 #else
306 SQUIDCEXTERN variable_list *snmp_netIdnsFn(variable_list *, snint *);
307 #endif /* USE_DNSSERVERS */
308 SQUIDCEXTERN variable_list *snmp_meshPtblFn(variable_list *, snint *);
309 SQUIDCEXTERN variable_list *snmp_meshCtblFn(variable_list *, snint *);
310 #endif /* SQUID_SNMP */
311
312 #if USE_WCCP
313 SQUIDCEXTERN void wccpInit(void);
314 SQUIDCEXTERN void wccpConnectionOpen(void);
315 SQUIDCEXTERN void wccpConnectionClose(void);
316 #endif /* USE_WCCP */
317
318 #if USE_WCCPv2
319 extern void wccp2Init(void);
320 extern void wccp2ConnectionOpen(void);
321 extern void wccp2ConnectionClose(void);
322 #endif /* USE_WCCPv2 */
323
324 SQUIDCEXTERN void ipcache_nbgethostbyname(const char *name,
325 IPH * handler,
326 void *handlerData);
327 SQUIDCEXTERN void ipcache_purgelru(void *);
328 SQUIDCEXTERN const ipcache_addrs *ipcache_gethostbyname(const char *, int flags);
329 SQUIDCEXTERN void ipcacheInvalidate(const char *);
330 SQUIDCEXTERN void ipcacheInvalidateNegative(const char *);
331 SQUIDCEXTERN void ipcache_init(void);
332 SQUIDCEXTERN void stat_ipcache_get(StoreEntry *);
333 SQUIDCEXTERN void ipcacheCycleAddr(const char *name, ipcache_addrs *);
334 SQUIDCEXTERN void ipcacheMarkBadAddr(const char *name, const Ip::Address &);
335 SQUIDCEXTERN void ipcacheMarkGoodAddr(const char *name, const Ip::Address &);
336 SQUIDCEXTERN void ipcacheMarkAllGood(const char *name);
337 SQUIDCEXTERN void ipcacheFreeMemory(void);
338 SQUIDCEXTERN ipcache_addrs *ipcacheCheckNumeric(const char *name);
339 SQUIDCEXTERN void ipcache_restart(void);
340 SQUIDCEXTERN int ipcacheAddEntryFromHosts(const char *name, const char *ipaddr);
341
342 SQUIDCEXTERN char *mime_get_header(const char *mime, const char *header);
343 SQUIDCEXTERN char *mime_get_header_field(const char *mime, const char *name, const char *prefix);
344 SQUIDCEXTERN size_t headersEnd(const char *, size_t);
345
346 SQUIDCEXTERN void mimeInit(char *filename);
347 SQUIDCEXTERN void mimeFreeMemory(void);
348 SQUIDCEXTERN char *mimeGetContentEncoding(const char *fn);
349 SQUIDCEXTERN char *mimeGetContentType(const char *fn);
350 SQUIDCEXTERN char const *mimeGetIcon(const char *fn);
351 SQUIDCEXTERN const char *mimeGetIconURL(const char *fn);
352 SQUIDCEXTERN char mimeGetTransferMode(const char *fn);
353 SQUIDCEXTERN int mimeGetDownloadOption(const char *fn);
354 SQUIDCEXTERN int mimeGetViewOption(const char *fn);
355
356 SQUIDCEXTERN int mcastSetTtl(int, int);
357 SQUIDCEXTERN IPH mcastJoinGroups;
358
359 SQUIDCEXTERN peer *getFirstPeer(void);
360 SQUIDCEXTERN peer *getFirstUpParent(HttpRequest *);
361 SQUIDCEXTERN peer *getNextPeer(peer *);
362 SQUIDCEXTERN peer *getSingleParent(HttpRequest *);
363 SQUIDCEXTERN int neighborsCount(HttpRequest *);
364 SQUIDCEXTERN int neighborsUdpPing(HttpRequest *,
365 StoreEntry *,
366 IRCB * callback,
367 void *data,
368 int *exprep,
369 int *timeout);
370 SQUIDCEXTERN void neighborAddAcl(const char *, const char *);
371
372 SQUIDCEXTERN void neighborsUdpAck(const cache_key *, icp_common_t *, const Ip::Address &);
373 SQUIDCEXTERN void neighborAdd(const char *, const char *, int, int, int, int, int);
374 SQUIDCEXTERN void neighbors_init(void);
375 #if USE_HTCP
376 SQUIDCEXTERN void neighborsHtcpClear(StoreEntry *, const char *, HttpRequest *, const HttpRequestMethod &, htcp_clr_reason);
377 #endif
378 SQUIDCEXTERN peer *peerFindByName(const char *);
379 SQUIDCEXTERN peer *peerFindByNameAndPort(const char *, unsigned short);
380 SQUIDCEXTERN peer *getDefaultParent(HttpRequest * request);
381 SQUIDCEXTERN peer *getRoundRobinParent(HttpRequest * request);
382 SQUIDCEXTERN peer *getWeightedRoundRobinParent(HttpRequest * request);
383 SQUIDCEXTERN void peerClearRRStart(void);
384 SQUIDCEXTERN void peerClearRR(void);
385 SQUIDCEXTERN peer *getAnyParent(HttpRequest * request);
386 SQUIDCEXTERN lookup_t peerDigestLookup(peer * p, HttpRequest * request);
387 SQUIDCEXTERN peer *neighborsDigestSelect(HttpRequest * request);
388 SQUIDCEXTERN void peerNoteDigestLookup(HttpRequest * request, peer * p, lookup_t lookup);
389 SQUIDCEXTERN void peerNoteDigestGone(peer * p);
390 SQUIDCEXTERN int neighborUp(const peer * e);
391 SQUIDCEXTERN CBDUNL peerDestroy;
392 SQUIDCEXTERN const char *neighborTypeStr(const peer * e);
393 SQUIDCEXTERN peer_t neighborType(const peer *, const HttpRequest *);
394 SQUIDCEXTERN void peerConnectFailed(peer *);
395 SQUIDCEXTERN void peerConnectSucceded(peer *);
396 SQUIDCEXTERN void dump_peer_options(StoreEntry *, peer *);
397 SQUIDCEXTERN int peerHTTPOkay(const peer *, HttpRequest *);
398
399 SQUIDCEXTERN peer *whichPeer(const Ip::Address &from);
400
401 /* peer_digest.c */
402 class PeerDigest;
403 SQUIDCEXTERN PeerDigest *peerDigestCreate(peer * p);
404 SQUIDCEXTERN void peerDigestNeeded(PeerDigest * pd);
405 SQUIDCEXTERN void peerDigestNotePeerGone(PeerDigest * pd);
406 SQUIDCEXTERN void peerDigestStatsReport(const PeerDigest * pd, StoreEntry * e);
407
408 #include "comm/forward.h"
409 extern void getOutgoingAddress(HttpRequest * request, Comm::ConnectionPointer conn);
410 unsigned long getOutgoingTOS(HttpRequest * request);
411
412 SQUIDCEXTERN void urnStart(HttpRequest *, StoreEntry *);
413
414 SQUIDCEXTERN void redirectInit(void);
415 SQUIDCEXTERN void redirectShutdown(void);
416
417 extern void refreshAddToList(const char *, int, time_t, int, time_t);
418 extern int refreshIsCachable(const StoreEntry *);
419 extern int refreshCheckHTTP(const StoreEntry *, HttpRequest *);
420 extern int refreshCheckICP(const StoreEntry *, HttpRequest *);
421 extern int refreshCheckHTCP(const StoreEntry *, HttpRequest *);
422 extern int refreshCheckDigest(const StoreEntry *, time_t delta);
423 extern time_t getMaxAge(const char *url);
424 extern void refreshInit(void);
425 extern const refresh_t *refreshLimits(const char *url);
426
427 extern void shut_down(int);
428 extern void rotate_logs(int);
429 extern void reconfigure(int);
430
431
432 extern void start_announce(void *unused);
433 extern void waisStart(FwdState *);
434
435 SQUIDCEXTERN void statInit(void);
436 SQUIDCEXTERN void statFreeMemory(void);
437 SQUIDCEXTERN double median_svc_get(int, int);
438 SQUIDCEXTERN void pconnHistCount(int, int);
439 SQUIDCEXTERN int stat5minClientRequests(void);
440 SQUIDCEXTERN double stat5minCPUUsage(void);
441 SQUIDCEXTERN double statRequestHitRatio(int minutes);
442 SQUIDCEXTERN double statRequestHitMemoryRatio(int minutes);
443 SQUIDCEXTERN double statRequestHitDiskRatio(int minutes);
444 SQUIDCEXTERN double statByteHitRatio(int minutes);
445
446 /* StatHist */
447 SQUIDCEXTERN void statHistClean(StatHist * H);
448 SQUIDCEXTERN void statHistCount(StatHist * H, double val);
449 SQUIDCEXTERN void statHistCopy(StatHist * Dest, const StatHist * Orig);
450 SQUIDCEXTERN void statHistSafeCopy(StatHist * Dest, const StatHist * Orig);
451 SQUIDCEXTERN double statHistDeltaMedian(const StatHist * A, const StatHist * B);
452 SQUIDCEXTERN double statHistDeltaPctile(const StatHist * A, const StatHist * B, double pctile);
453 SQUIDCEXTERN void statHistDump(const StatHist * H, StoreEntry * sentry, StatHistBinDumper * bd);
454 SQUIDCEXTERN void statHistLogInit(StatHist * H, int capacity, double min, double max);
455 SQUIDCEXTERN void statHistEnumInit(StatHist * H, int last_enum);
456 SQUIDCEXTERN void statHistIntInit(StatHist * H, int n);
457 SQUIDCEXTERN StatHistBinDumper statHistEnumDumper;
458 SQUIDCEXTERN StatHistBinDumper statHistIntDumper;
459
460
461 /* mem */
462 SQUIDCEXTERN void memClean(void);
463 SQUIDCEXTERN void memInitModule(void);
464 SQUIDCEXTERN void memCleanModule(void);
465 SQUIDCEXTERN void memConfigure(void);
466 SQUIDCEXTERN void *memAllocate(mem_type);
467 SQUIDCEXTERN void *memAllocString(size_t net_size, size_t * gross_size);
468 SQUIDCEXTERN void *memAllocBuf(size_t net_size, size_t * gross_size);
469 SQUIDCEXTERN void *memReallocBuf(void *buf, size_t net_size, size_t * gross_size);
470 SQUIDCEXTERN void memFree(void *, int type);
471 void memFree2K(void *);
472 void memFree4K(void *);
473 void memFree8K(void *);
474 void memFree16K(void *);
475 void memFree32K(void *);
476 void memFree64K(void *);
477 SQUIDCEXTERN void memFreeString(size_t size, void *);
478 SQUIDCEXTERN void memFreeBuf(size_t size, void *);
479 SQUIDCEXTERN FREE *memFreeBufFunc(size_t size);
480 SQUIDCEXTERN int memInUse(mem_type);
481 SQUIDCEXTERN void memDataInit(mem_type, const char *, size_t, int, bool zeroOnPush = true);
482 SQUIDCEXTERN void memCheckInit(void);
483
484
485 /* Mem */
486 SQUIDCEXTERN void memConfigure(void);
487
488 /* ----------------------------------------------------------------- */
489
490 /* repl_modules.c */
491 SQUIDCEXTERN void storeReplSetup(void);
492
493 /*
494 * store_log.c
495 */
496 SQUIDCEXTERN void storeLog(int tag, const StoreEntry * e);
497 SQUIDCEXTERN void storeLogRotate(void);
498 SQUIDCEXTERN void storeLogClose(void);
499 SQUIDCEXTERN void storeLogOpen(void);
500
501
502 /*
503 * store_key_*.c
504 */
505 SQUIDCEXTERN cache_key *storeKeyDup(const cache_key *);
506 SQUIDCEXTERN cache_key *storeKeyCopy(cache_key *, const cache_key *);
507 SQUIDCEXTERN void storeKeyFree(const cache_key *);
508 SQUIDCEXTERN const cache_key *storeKeyScan(const char *);
509 SQUIDCEXTERN const char *storeKeyText(const cache_key *);
510 SQUIDCEXTERN const cache_key *storeKeyPublic(const char *, const HttpRequestMethod&);
511 SQUIDCEXTERN const cache_key *storeKeyPublicByRequest(HttpRequest *);
512 SQUIDCEXTERN const cache_key *storeKeyPublicByRequestMethod(HttpRequest *, const HttpRequestMethod&);
513 SQUIDCEXTERN const cache_key *storeKeyPrivate(const char *, const HttpRequestMethod&, int);
514 SQUIDCEXTERN int storeKeyHashBuckets(int);
515 SQUIDCEXTERN int storeKeyNull(const cache_key *);
516 SQUIDCEXTERN void storeKeyInit(void);
517 SQUIDCEXTERN HASHHASH storeKeyHashHash;
518 SQUIDCEXTERN HASHCMP storeKeyHashCmp;
519
520 /*
521 * store_digest.c
522 */
523 SQUIDCEXTERN void storeDigestInit(void);
524 SQUIDCEXTERN void storeDigestNoteStoreReady(void);
525 SQUIDCEXTERN void storeDigestScheduleRebuild(void);
526 SQUIDCEXTERN void storeDigestDel(const StoreEntry * entry);
527 SQUIDCEXTERN void storeDigestReport(StoreEntry *);
528
529 /*
530 * store_rebuild.c
531 */
532 SQUIDCEXTERN void storeRebuildStart(void);
533
534 SQUIDCEXTERN void storeRebuildComplete(struct _store_rebuild_data *);
535 SQUIDCEXTERN void storeRebuildProgress(int sd_index, int total, int sofar);
536
537 /*
538 * store_swapin.c
539 */
540 class store_client;
541 SQUIDCEXTERN void storeSwapInStart(store_client *);
542
543 /*
544 * store_client.c
545 */
546 SQUIDCEXTERN store_client *storeClientListAdd(StoreEntry * e, void *data);
547 SQUIDCEXTERN int storeClientCopyPending(store_client *, StoreEntry * e, void *data);
548 SQUIDCEXTERN int storeUnregister(store_client * sc, StoreEntry * e, void *data)
549 ;
550 SQUIDCEXTERN int storePendingNClients(const StoreEntry * e);
551 SQUIDCEXTERN int storeClientIsThisAClient(store_client * sc, void *someClient);
552
553
554 SQUIDCEXTERN const char *getMyHostname(void);
555 SQUIDCEXTERN const char *uniqueHostname(void);
556 SQUIDCEXTERN void safeunlink(const char *path, int quiet);
557 SQUIDCEXTERN void death(int sig);
558 SQUIDCEXTERN void fatal(const char *message);
559 SQUIDCEXTERN void fatalf(const char *fmt,...) PRINTF_FORMAT_ARG1;
560 SQUIDCEXTERN void fatal_dump(const char *message);
561 SQUIDCEXTERN void sigusr2_handle(int sig);
562 SQUIDCEXTERN void sig_child(int sig);
563 SQUIDCEXTERN void leave_suid(void);
564 SQUIDCEXTERN void enter_suid(void);
565 SQUIDCEXTERN void no_suid(void);
566 SQUIDCEXTERN void writePidFile(void);
567 SQUIDCEXTERN void setSocketShutdownLifetimes(int);
568 SQUIDCEXTERN void setMaxFD(void);
569 SQUIDCEXTERN void setSystemLimits(void);
570 SQUIDCEXTERN void squid_signal(int sig, SIGHDLR *, int flags);
571 SQUIDCEXTERN pid_t readPidFile(void);
572 SQUIDCEXTERN void keepCapabilities(void);
573
574 SQUIDCEXTERN void BroadcastSignalIfAny(int& sig);
575 /// whether the current process is the parent of all other Squid processes
576 SQUIDCEXTERN bool IamMasterProcess();
577 /**
578 whether the current process is dedicated to doing things that only
579 a single process should do, such as PID file maintenance and WCCP
580 */
581 SQUIDCEXTERN bool IamPrimaryProcess();
582 /// whether the current process coordinates worker processes
583 SQUIDCEXTERN bool IamCoordinatorProcess();
584 /// whether the current process handles HTTP transactions and such
585 SQUIDCEXTERN bool IamWorkerProcess();
586 /// Whether there should be more than one worker process running
587 SQUIDCEXTERN bool UsingSmp(); // try using specific Iam*() checks above first
588 SQUIDCEXTERN int DebugSignal;
589
590 /* AYJ debugs function to show locations being reset with memset() */
591 SQUIDCEXTERN void *xmemset(void *dst, int, size_t);
592
593 SQUIDCEXTERN void debug_trap(const char *);
594 SQUIDCEXTERN void logsFlush(void);
595 SQUIDCEXTERN const char *checkNullString(const char *p);
596
597 SQUIDCEXTERN void squid_getrusage(struct rusage *r);
598
599 SQUIDCEXTERN double rusage_cputime(struct rusage *r);
600
601 SQUIDCEXTERN int rusage_maxrss(struct rusage *r);
602
603 SQUIDCEXTERN int rusage_pagefaults(struct rusage *r);
604 SQUIDCEXTERN void releaseServerSockets(void);
605 SQUIDCEXTERN void PrintRusage(void);
606 SQUIDCEXTERN void dumpMallocStats(void);
607
608 #if USE_UNLINKD
609 SQUIDCEXTERN void unlinkdInit(void);
610 SQUIDCEXTERN void unlinkdClose(void);
611 SQUIDCEXTERN void unlinkdUnlink(const char *);
612 #endif
613
614 SQUIDCEXTERN protocol_t urlParseProtocol(const char *, const char *e = NULL);
615 SQUIDCEXTERN void urlInitialize(void);
616 SQUIDCEXTERN HttpRequest *urlParse(const HttpRequestMethod&, char *, HttpRequest *request = NULL);
617 SQUIDCEXTERN const char *urlCanonical(HttpRequest *);
618 SQUIDCEXTERN char *urlCanonicalClean(const HttpRequest *);
619 SQUIDCEXTERN const char *urlCanonicalFakeHttps(const HttpRequest * request);
620 SQUIDCEXTERN bool urlIsRelative(const char *);
621 SQUIDCEXTERN char *urlMakeAbsolute(const HttpRequest *, const char *);
622 SQUIDCEXTERN char *urlRInternal(const char *host, u_short port, const char *dir, const char *name);
623 SQUIDCEXTERN char *urlInternal(const char *dir, const char *name);
624 SQUIDCEXTERN int matchDomainName(const char *host, const char *domain);
625 SQUIDCEXTERN int urlCheckRequest(const HttpRequest *);
626 SQUIDCEXTERN int urlDefaultPort(protocol_t p);
627 SQUIDCEXTERN char *urlHostname(const char *url);
628 SQUIDCEXTERN void urlExtMethodConfigure(void);
629
630 SQUIDCEXTERN void useragentOpenLog(void);
631 SQUIDCEXTERN void useragentRotateLog(void);
632 SQUIDCEXTERN void logUserAgent(const char *, const char *);
633 SQUIDCEXTERN void useragentLogClose(void);
634 SQUIDCEXTERN void refererOpenLog(void);
635 SQUIDCEXTERN void refererRotateLog(void);
636 SQUIDCEXTERN void logReferer(const char *, const char *, const char *);
637 SQUIDCEXTERN void refererCloseLog(void);
638 SQUIDCEXTERN peer_t parseNeighborType(const char *s);
639
640 /* tools.c */
641 //UNUSED #include "dlink.h"
642 //UNUSED SQUIDCEXTERN void dlinkAdd(void *data, dlink_node *, dlink_list *);
643 //UNUSED SQUIDCEXTERN void dlinkAddAfter(void *, dlink_node *, dlink_node *, dlink_list *);
644 //UNUSED SQUIDCEXTERN void dlinkAddTail(void *data, dlink_node *, dlink_list *);
645 //UNUSED SQUIDCEXTERN void dlinkDelete(dlink_node * m, dlink_list * list);
646 //UNUSED SQUIDCEXTERN void dlinkNodeDelete(dlink_node * m);
647 //UNUSED SQUIDCEXTERN dlink_node *dlinkNodeNew(void);
648
649 SQUIDCEXTERN void kb_incr(kb_t *, size_t);
650 SQUIDCEXTERN int stringHasWhitespace(const char *);
651 SQUIDCEXTERN int stringHasCntl(const char *);
652 SQUIDCEXTERN void linklistPush(link_list **, void *);
653 SQUIDCEXTERN void *linklistShift(link_list **);
654 SQUIDCEXTERN int xrename(const char *from, const char *to);
655 SQUIDCEXTERN int isPowTen(int);
656 SQUIDCEXTERN void parseEtcHosts(void);
657 SQUIDCEXTERN int getMyPort(void);
658 SQUIDCEXTERN void setUmask(mode_t mask);
659
660 SQUIDCEXTERN char *strwordtok(char *buf, char **t);
661 SQUIDCEXTERN void strwordquote(MemBuf * mb, const char *str);
662
663
664 /*
665 * ipc.c
666 */
667 SQUIDCEXTERN pid_t ipcCreate(int type,
668 const char *prog,
669 const char *const args[],
670 const char *name,
671 Ip::Address &local_addr,
672 int *rfd,
673 int *wfd,
674 void **hIpc);
675
676
677 /* CacheDigest */
678 SQUIDCEXTERN CacheDigest *cacheDigestCreate(int capacity, int bpe);
679 SQUIDCEXTERN void cacheDigestDestroy(CacheDigest * cd);
680 SQUIDCEXTERN CacheDigest *cacheDigestClone(const CacheDigest * cd);
681 SQUIDCEXTERN void cacheDigestClear(CacheDigest * cd);
682 SQUIDCEXTERN void cacheDigestChangeCap(CacheDigest * cd, int new_cap);
683 SQUIDCEXTERN int cacheDigestTest(const CacheDigest * cd, const cache_key * key);
684 SQUIDCEXTERN void cacheDigestAdd(CacheDigest * cd, const cache_key * key);
685 SQUIDCEXTERN void cacheDigestDel(CacheDigest * cd, const cache_key * key);
686 SQUIDCEXTERN size_t cacheDigestCalcMaskSize(int cap, int bpe);
687 SQUIDCEXTERN int cacheDigestBitUtil(const CacheDigest * cd);
688 SQUIDCEXTERN void cacheDigestGuessStatsUpdate(cd_guess_stats * stats, int real_hit, int guess_hit);
689 SQUIDCEXTERN void cacheDigestGuessStatsReport(const cd_guess_stats * stats, StoreEntry * sentry, const char *label);
690 SQUIDCEXTERN void cacheDigestReport(CacheDigest * cd, const char *label, StoreEntry * e);
691
692 SQUIDCEXTERN void internalStart(HttpRequest *, StoreEntry *);
693 SQUIDCEXTERN int internalCheck(const char *urlpath);
694 SQUIDCEXTERN int internalStaticCheck(const char *urlpath);
695 SQUIDCEXTERN char *internalLocalUri(const char *dir, const char *name);
696 SQUIDCEXTERN char *internalRemoteUri(const char *, u_short, const char *, const char *);
697 SQUIDCEXTERN const char *internalHostname(void);
698 SQUIDCEXTERN int internalHostnameIs(const char *);
699
700 SQUIDCEXTERN void carpInit(void);
701 SQUIDCEXTERN peer *carpSelectParent(HttpRequest *);
702
703 SQUIDCEXTERN void peerUserHashInit(void);
704 SQUIDCEXTERN peer * peerUserHashSelectParent(HttpRequest * request);
705
706 SQUIDCEXTERN void peerSourceHashInit(void);
707 SQUIDCEXTERN peer * peerSourceHashSelectParent(HttpRequest * request);
708
709 #if USE_LEAKFINDER
710 SQUIDCEXTERN void leakInit(void);
711 SQUIDCEXTERN void *leakAddFL(void *, const char *, int);
712 SQUIDCEXTERN void *leakTouchFL(void *, const char *, int);
713 SQUIDCEXTERN void *leakFreeFL(void *, const char *, int);
714 #endif
715
716 /*
717 * prototypes for system functions missing from system includes
718 */
719
720 #ifdef _SQUID_SOLARIS_
721
722 SQUIDCEXTERN int getrusage(int, struct rusage *);
723 SQUIDCEXTERN int getpagesize(void);
724 #if !defined(_XPG4_2) && !(defined(__EXTENSIONS__) || \
725 (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)))
726 SQUIDCEXTERN int gethostname(char *, int);
727 #endif
728 #endif
729
730 /*
731 * hack to allow snmp access to the statistics counters
732 */
733 SQUIDCEXTERN StatCounters *snmpStatGet(int);
734
735 /* Vary support functions */
736 SQUIDCEXTERN int varyEvaluateMatch(StoreEntry * entry, HttpRequest * req);
737
738 /* CygWin & Windows NT Port */
739 /* win32.c */
740 #ifdef _SQUID_WIN32_
741 SQUIDCEXTERN int WIN32_Subsystem_Init(int *, char ***);
742 SQUIDCEXTERN void WIN32_sendSignal(int);
743 SQUIDCEXTERN void WIN32_Abort(int);
744 SQUIDCEXTERN void WIN32_Exit(void);
745 SQUIDCEXTERN void WIN32_SetServiceCommandLine(void);
746 SQUIDCEXTERN void WIN32_InstallService(void);
747 SQUIDCEXTERN void WIN32_RemoveService(void);
748 SQUIDCEXTERN int SquidMain(int, char **);
749 #endif /* _SQUID_WIN32_ */
750 #ifdef _SQUID_MSWIN_
751
752 SQUIDCEXTERN int WIN32_pipe(int[2]);
753
754 SQUIDCEXTERN int WIN32_getrusage(int, struct rusage *);
755 SQUIDCEXTERN void WIN32_ExceptionHandlerInit(void);
756
757 SQUIDCEXTERN int Win32__WSAFDIsSet(int fd, fd_set* set);
758 SQUIDCEXTERN DWORD WIN32_IpAddrChangeMonitorInit();
759
760 #endif
761
762 /* external_acl.c */
763 class external_acl;
764 SQUIDCEXTERN void parse_externalAclHelper(external_acl **);
765
766 SQUIDCEXTERN void dump_externalAclHelper(StoreEntry * sentry, const char *name, const external_acl *);
767
768 SQUIDCEXTERN void free_externalAclHelper(external_acl **);
769
770 typedef void EAH(void *data, void *result);
771 class ACLChecklist;
772 SQUIDCEXTERN void externalAclLookup(ACLChecklist * ch, void *acl_data, EAH * handler, void *data);
773
774 SQUIDCEXTERN void externalAclInit(void);
775
776 SQUIDCEXTERN void externalAclShutdown(void);
777
778 SQUIDCEXTERN char *strtokFile(void);
779
780 #if USE_WCCPv2
781
782 SQUIDCEXTERN void parse_wccp2_method(int *v);
783 SQUIDCEXTERN void free_wccp2_method(int *v);
784 SQUIDCEXTERN void dump_wccp2_method(StoreEntry * e, const char *label, int v);
785 SQUIDCEXTERN void parse_wccp2_amethod(int *v);
786 SQUIDCEXTERN void free_wccp2_amethod(int *v);
787 SQUIDCEXTERN void dump_wccp2_amethod(StoreEntry * e, const char *label, int v);
788
789 SQUIDCEXTERN void parse_wccp2_service(void *v);
790 SQUIDCEXTERN void free_wccp2_service(void *v);
791 SQUIDCEXTERN void dump_wccp2_service(StoreEntry * e, const char *label, void *v);
792
793 SQUIDCEXTERN int check_null_wccp2_service(void *v);
794
795 SQUIDCEXTERN void parse_wccp2_service_info(void *v);
796
797 SQUIDCEXTERN void free_wccp2_service_info(void *v);
798
799 SQUIDCEXTERN void dump_wccp2_service_info(StoreEntry * e, const char *label, void *v);
800
801 #endif
802
803 #if HAVE_KRB5 && HAVE_GSSAPI
804 /* upstream proxy authentication */
805 SQUIDCEXTERN char *peer_proxy_negotiate_auth(char *principal_name, char *proxy);
806 #endif
807
808 /* call to ensure the auth component schemes exist. */
809 SQUIDCEXTERN void InitAuthSchemes(void);
810
811 #endif /* SQUID_PROTOS_H */