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