]> git.ipfire.org Git - thirdparty/squid.git/blob - src/protos.h
Merge StatHist feature-branch:
[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 void fqdncache_nbgethostbyaddr(const Ip::Address &, FQDNH *, void *);
148
149 SQUIDCEXTERN const char *fqdncache_gethostbyaddr(const Ip::Address &, int flags);
150 SQUIDCEXTERN void fqdncache_init(void);
151 void fqdnStats(StoreEntry *);
152 SQUIDCEXTERN void fqdncacheReleaseInvalid(const char *);
153
154 SQUIDCEXTERN const char *fqdnFromAddr(const Ip::Address &);
155 SQUIDCEXTERN int fqdncacheQueueDrain(void);
156 SQUIDCEXTERN void fqdncacheFreeMemory(void);
157 SQUIDCEXTERN void fqdncache_restart(void);
158 void fqdncache_purgelru(void *);
159 SQUIDCEXTERN void fqdncacheAddEntryFromHosts(char *addr, wordlist * hostnames);
160
161 class FwdState;
162
163 /**
164 \defgroup ServerProtocolFTPAPI Server-Side FTP API
165 \ingroup ServerProtocol
166 */
167
168 /// \ingroup ServerProtocolFTPAPI
169 SQUIDCEXTERN void ftpStart(FwdState *);
170
171 class HttpRequest;
172 class HttpReply;
173
174 /// \ingroup ServerProtocolFTPAPI
175 SQUIDCEXTERN const char *ftpUrlWith2f(HttpRequest *);
176
177
178 /**
179 \defgroup ServerProtocolGopherAPI Server-Side Gopher API
180 \ingroup ServerProtocol
181 */
182
183 /// \ingroup ServerProtocolGopherAPI
184 SQUIDCEXTERN void gopherStart(FwdState *);
185
186 /// \ingroup ServerProtocolGopherAPI
187 SQUIDCEXTERN int gopherCachable(const HttpRequest *);
188
189
190 /**
191 \defgroup ServerProtocolWhoisAPI Server-Side WHOIS API
192 \ingroup ServerProtocol
193 */
194
195 /// \ingroup ServerProtocolWhoisAPI
196 SQUIDCEXTERN void whoisStart(FwdState *);
197
198
199 /* http.c */
200 /* for http_hdr_type field */
201 #include "HttpHeader.h"
202 SQUIDCEXTERN int httpCachable(const HttpRequestMethod&);
203 SQUIDCEXTERN void httpStart(FwdState *);
204 SQUIDCEXTERN mb_size_t httpBuildRequestPrefix(HttpRequest * request,
205 HttpRequest * orig_request,
206 StoreEntry * entry,
207 MemBuf * mb,
208 http_state_flags);
209 SQUIDCEXTERN const char *httpMakeVaryMark(HttpRequest * request, HttpReply const * reply);
210
211 #include "HttpStatusCode.h"
212 SQUIDCEXTERN const char *httpStatusString(http_status status);
213
214 class StatHist;
215
216 /* Http Cache Control Header Field */
217 SQUIDCEXTERN void httpHdrCcInitModule(void);
218 SQUIDCEXTERN void httpHdrCcCleanModule(void);
219 SQUIDCEXTERN void httpHdrCcUpdateStats(const HttpHdrCc * cc, StatHist * hist);
220 void httpHdrCcStatDumper(StoreEntry * sentry, int idx, double val, double size, int count);
221
222 /* Http Header Tools */
223 class HttpHeaderFieldInfo;
224 SQUIDCEXTERN HttpHeaderFieldInfo *httpHeaderBuildFieldsInfo(const HttpHeaderFieldAttrs * attrs, int count);
225 SQUIDCEXTERN void httpHeaderDestroyFieldsInfo(HttpHeaderFieldInfo * info, int count);
226 SQUIDCEXTERN http_hdr_type httpHeaderIdByName(const char *name, size_t name_len, const HttpHeaderFieldInfo * attrs, int end);
227 SQUIDCEXTERN http_hdr_type httpHeaderIdByNameDef(const char *name, int name_len);
228 SQUIDCEXTERN const char *httpHeaderNameById(int id);
229 SQUIDCEXTERN int httpHeaderHasConnDir(const HttpHeader * hdr, const char *directive);
230 SQUIDCEXTERN void strListAdd(String * str, const char *item, char del);
231 SQUIDCEXTERN int strListIsMember(const String * str, const char *item, char del);
232 SQUIDCEXTERN int strListIsSubstr(const String * list, const char *s, char del);
233 SQUIDCEXTERN int strListGetItem(const String * str, char del, const char **item, int *ilen, const char **pos);
234 SQUIDCEXTERN const char *getStringPrefix(const char *str, const char *end);
235 SQUIDCEXTERN int httpHeaderParseInt(const char *start, int *val);
236 SQUIDCEXTERN int httpHeaderParseOffset(const char *start, int64_t * off);
237 SQUIDCEXTERN void
238 httpHeaderPutStrf(HttpHeader * hdr, http_hdr_type id, const char *fmt,...) PRINTF_FORMAT_ARG3;
239
240
241 /* Http Header */
242 SQUIDCEXTERN void httpHeaderInitModule(void);
243 SQUIDCEXTERN void httpHeaderCleanModule(void);
244
245 /* store report about current header usage and other stats */
246 void httpHeaderStoreReport(StoreEntry * e);
247 SQUIDCEXTERN void httpHdrMangleList(HttpHeader *, HttpRequest *, int req_or_rep);
248 SQUIDCEXTERN int httpReqHdrManglersConfigured();
249
250 #if SQUID_SNMP
251 SQUIDCEXTERN PF snmpHandleUdp;
252 SQUIDCEXTERN void snmpInit(void);
253 SQUIDCEXTERN void snmpConnectionOpen(void);
254 SQUIDCEXTERN void snmpConnectionClose(void);
255 SQUIDCEXTERN const char * snmpDebugOid(oid * Name, snint Len, MemBuf &outbuf);
256
257 SQUIDCEXTERN void addr2oid(Ip::Address &addr, oid *Dest);
258 SQUIDCEXTERN void oid2addr(oid *Dest, Ip::Address &addr, u_int code);
259
260 SQUIDCEXTERN Ip::Address *client_entry(Ip::Address *current);
261 extern variable_list *snmp_basicFn(variable_list *, snint *);
262 extern variable_list *snmp_confFn(variable_list *, snint *);
263 extern variable_list *snmp_sysFn(variable_list *, snint *);
264 extern variable_list *snmp_prfSysFn(variable_list *, snint *);
265 extern variable_list *snmp_prfProtoFn(variable_list *, snint *);
266 extern variable_list *snmp_prfPeerFn(variable_list *, snint *);
267 extern variable_list *snmp_netIpFn(variable_list *, snint *);
268 extern variable_list *snmp_netFqdnFn(variable_list *, snint *);
269 #if USE_DNSSERVERS
270 extern variable_list *snmp_netDnsFn(variable_list *, snint *);
271 #else
272 extern variable_list *snmp_netIdnsFn(variable_list *, snint *);
273 #endif /* USE_DNSSERVERS */
274 extern variable_list *snmp_meshPtblFn(variable_list *, snint *);
275 extern variable_list *snmp_meshCtblFn(variable_list *, snint *);
276 #endif /* SQUID_SNMP */
277
278 #if USE_WCCP
279 SQUIDCEXTERN void wccpInit(void);
280 SQUIDCEXTERN void wccpConnectionOpen(void);
281 SQUIDCEXTERN void wccpConnectionClose(void);
282 #endif /* USE_WCCP */
283
284 #if USE_WCCPv2
285 extern void wccp2Init(void);
286 extern void wccp2ConnectionOpen(void);
287 extern void wccp2ConnectionClose(void);
288 #endif /* USE_WCCPv2 */
289
290 SQUIDCEXTERN char *mime_get_header(const char *mime, const char *header);
291 SQUIDCEXTERN char *mime_get_header_field(const char *mime, const char *name, const char *prefix);
292 SQUIDCEXTERN size_t headersEnd(const char *, size_t);
293
294 SQUIDCEXTERN void mimeInit(char *filename);
295 SQUIDCEXTERN void mimeFreeMemory(void);
296 SQUIDCEXTERN char *mimeGetContentEncoding(const char *fn);
297 SQUIDCEXTERN char *mimeGetContentType(const char *fn);
298 SQUIDCEXTERN char const *mimeGetIcon(const char *fn);
299 SQUIDCEXTERN const char *mimeGetIconURL(const char *fn);
300 SQUIDCEXTERN char mimeGetTransferMode(const char *fn);
301 SQUIDCEXTERN int mimeGetDownloadOption(const char *fn);
302 SQUIDCEXTERN int mimeGetViewOption(const char *fn);
303
304 #include "ipcache.h"
305 SQUIDCEXTERN int mcastSetTtl(int, int);
306 SQUIDCEXTERN IPH mcastJoinGroups;
307
308 SQUIDCEXTERN peer *getFirstPeer(void);
309 SQUIDCEXTERN peer *getFirstUpParent(HttpRequest *);
310 SQUIDCEXTERN peer *getNextPeer(peer *);
311 SQUIDCEXTERN peer *getSingleParent(HttpRequest *);
312 SQUIDCEXTERN int neighborsCount(HttpRequest *);
313 SQUIDCEXTERN int neighborsUdpPing(HttpRequest *,
314 StoreEntry *,
315 IRCB * callback,
316 void *data,
317 int *exprep,
318 int *timeout);
319 SQUIDCEXTERN void neighborAddAcl(const char *, const char *);
320
321 SQUIDCEXTERN void neighborsUdpAck(const cache_key *, icp_common_t *, const Ip::Address &);
322 SQUIDCEXTERN void neighborAdd(const char *, const char *, int, int, int, int, int);
323 SQUIDCEXTERN void neighbors_init(void);
324 #if USE_HTCP
325 SQUIDCEXTERN void neighborsHtcpClear(StoreEntry *, const char *, HttpRequest *, const HttpRequestMethod &, htcp_clr_reason);
326 #endif
327 SQUIDCEXTERN peer *peerFindByName(const char *);
328 SQUIDCEXTERN peer *peerFindByNameAndPort(const char *, unsigned short);
329 SQUIDCEXTERN peer *getDefaultParent(HttpRequest * request);
330 SQUIDCEXTERN peer *getRoundRobinParent(HttpRequest * request);
331 SQUIDCEXTERN peer *getWeightedRoundRobinParent(HttpRequest * request);
332 SQUIDCEXTERN void peerClearRRStart(void);
333 SQUIDCEXTERN void peerClearRR(void);
334 SQUIDCEXTERN lookup_t peerDigestLookup(peer * p, HttpRequest * request);
335 SQUIDCEXTERN peer *neighborsDigestSelect(HttpRequest * request);
336 SQUIDCEXTERN void peerNoteDigestLookup(HttpRequest * request, peer * p, lookup_t lookup);
337 SQUIDCEXTERN void peerNoteDigestGone(peer * p);
338 SQUIDCEXTERN int neighborUp(const peer * e);
339 SQUIDCEXTERN CBDUNL peerDestroy;
340 SQUIDCEXTERN const char *neighborTypeStr(const peer * e);
341 SQUIDCEXTERN peer_t neighborType(const peer *, const HttpRequest *);
342 SQUIDCEXTERN void peerConnectFailed(peer *);
343 SQUIDCEXTERN void peerConnectSucceded(peer *);
344 SQUIDCEXTERN void dump_peer_options(StoreEntry *, peer *);
345 SQUIDCEXTERN int peerHTTPOkay(const peer *, HttpRequest *);
346
347 SQUIDCEXTERN peer *whichPeer(const Ip::Address &from);
348
349 /* peer_digest.c */
350 class PeerDigest;
351 SQUIDCEXTERN PeerDigest *peerDigestCreate(peer * p);
352 SQUIDCEXTERN void peerDigestNeeded(PeerDigest * pd);
353 SQUIDCEXTERN void peerDigestNotePeerGone(PeerDigest * pd);
354 SQUIDCEXTERN void peerDigestStatsReport(const PeerDigest * pd, StoreEntry * e);
355
356 #include "comm/forward.h"
357 extern void getOutgoingAddress(HttpRequest * request, Comm::ConnectionPointer conn);
358 extern Ip::Address getOutgoingAddr(HttpRequest * request, struct peer *dst_peer);
359
360 SQUIDCEXTERN void urnStart(HttpRequest *, StoreEntry *);
361
362 SQUIDCEXTERN void redirectInit(void);
363 SQUIDCEXTERN void redirectShutdown(void);
364
365 extern void refreshAddToList(const char *, int, time_t, int, time_t);
366 extern int refreshIsCachable(const StoreEntry *);
367 extern int refreshCheckHTTP(const StoreEntry *, HttpRequest *);
368 extern int refreshCheckICP(const StoreEntry *, HttpRequest *);
369 extern int refreshCheckHTCP(const StoreEntry *, HttpRequest *);
370 extern int refreshCheckDigest(const StoreEntry *, time_t delta);
371 extern time_t getMaxAge(const char *url);
372 extern void refreshInit(void);
373 extern const refresh_t *refreshLimits(const char *url);
374
375 extern void shut_down(int);
376 extern void rotate_logs(int);
377 extern void reconfigure(int);
378
379
380 extern void start_announce(void *unused);
381 extern void waisStart(FwdState *);
382
383 SQUIDCEXTERN void statInit(void);
384 SQUIDCEXTERN void statFreeMemory(void);
385 SQUIDCEXTERN double median_svc_get(int, int);
386 SQUIDCEXTERN void pconnHistCount(int, int);
387 SQUIDCEXTERN int stat5minClientRequests(void);
388 SQUIDCEXTERN double stat5minCPUUsage(void);
389 SQUIDCEXTERN double statRequestHitRatio(int minutes);
390 SQUIDCEXTERN double statRequestHitMemoryRatio(int minutes);
391 SQUIDCEXTERN double statRequestHitDiskRatio(int minutes);
392 SQUIDCEXTERN double statByteHitRatio(int minutes);
393
394 /* mem */
395 SQUIDCEXTERN void memClean(void);
396 SQUIDCEXTERN void memInitModule(void);
397 SQUIDCEXTERN void memCleanModule(void);
398 SQUIDCEXTERN void memConfigure(void);
399 SQUIDCEXTERN void *memAllocate(mem_type);
400 SQUIDCEXTERN void *memAllocString(size_t net_size, size_t * gross_size);
401 SQUIDCEXTERN void *memAllocBuf(size_t net_size, size_t * gross_size);
402 SQUIDCEXTERN void *memReallocBuf(void *buf, size_t net_size, size_t * gross_size);
403 SQUIDCEXTERN void memFree(void *, int type);
404 void memFree2K(void *);
405 void memFree4K(void *);
406 void memFree8K(void *);
407 void memFree16K(void *);
408 void memFree32K(void *);
409 void memFree64K(void *);
410 SQUIDCEXTERN void memFreeString(size_t size, void *);
411 SQUIDCEXTERN void memFreeBuf(size_t size, void *);
412 SQUIDCEXTERN FREE *memFreeBufFunc(size_t size);
413 SQUIDCEXTERN int memInUse(mem_type);
414 SQUIDCEXTERN void memDataInit(mem_type, const char *, size_t, int, bool zeroOnPush = true);
415 SQUIDCEXTERN void memCheckInit(void);
416
417
418 /* Mem */
419 SQUIDCEXTERN void memConfigure(void);
420
421 /* ----------------------------------------------------------------- */
422
423 /* repl_modules.c */
424 SQUIDCEXTERN void storeReplSetup(void);
425
426 /*
427 * store_log.c
428 */
429 SQUIDCEXTERN void storeLog(int tag, const StoreEntry * e);
430 SQUIDCEXTERN void storeLogRotate(void);
431 SQUIDCEXTERN void storeLogClose(void);
432 SQUIDCEXTERN void storeLogOpen(void);
433
434
435 /*
436 * store_key_*.c
437 */
438 SQUIDCEXTERN cache_key *storeKeyDup(const cache_key *);
439 SQUIDCEXTERN cache_key *storeKeyCopy(cache_key *, const cache_key *);
440 SQUIDCEXTERN void storeKeyFree(const cache_key *);
441 SQUIDCEXTERN const cache_key *storeKeyScan(const char *);
442 SQUIDCEXTERN const char *storeKeyText(const cache_key *);
443 SQUIDCEXTERN const cache_key *storeKeyPublic(const char *, const HttpRequestMethod&);
444 SQUIDCEXTERN const cache_key *storeKeyPublicByRequest(HttpRequest *);
445 SQUIDCEXTERN const cache_key *storeKeyPublicByRequestMethod(HttpRequest *, const HttpRequestMethod&);
446 SQUIDCEXTERN const cache_key *storeKeyPrivate(const char *, const HttpRequestMethod&, int);
447 SQUIDCEXTERN int storeKeyHashBuckets(int);
448 SQUIDCEXTERN int storeKeyNull(const cache_key *);
449 SQUIDCEXTERN void storeKeyInit(void);
450 SQUIDCEXTERN HASHHASH storeKeyHashHash;
451 SQUIDCEXTERN HASHCMP storeKeyHashCmp;
452
453 /*
454 * store_digest.c
455 */
456 SQUIDCEXTERN void storeDigestInit(void);
457 SQUIDCEXTERN void storeDigestNoteStoreReady(void);
458 SQUIDCEXTERN void storeDigestScheduleRebuild(void);
459 SQUIDCEXTERN void storeDigestDel(const StoreEntry * entry);
460 extern void storeDigestReport(StoreEntry *);
461
462 /*
463 * store_rebuild.c
464 */
465 SQUIDCEXTERN void storeRebuildStart(void);
466
467 SQUIDCEXTERN void storeRebuildComplete(struct _store_rebuild_data *);
468 SQUIDCEXTERN void storeRebuildProgress(int sd_index, int total, int sofar);
469
470 /// loads entry from disk; fills supplied memory buffer on success
471 bool storeRebuildLoadEntry(int fd, int diskIndex, MemBuf &buf, struct _store_rebuild_data &counts);
472 /// parses entry buffer and validates entry metadata; fills e on success
473 bool storeRebuildParseEntry(MemBuf &buf, StoreEntry &e, cache_key *key, struct _store_rebuild_data &counts, uint64_t expectedSize);
474 /// checks whether the loaded entry should be kept; updates counters
475 bool storeRebuildKeepEntry(const StoreEntry &e, const cache_key *key, struct _store_rebuild_data &counts);
476
477
478 /*
479 * store_swapin.c
480 */
481 class store_client;
482 SQUIDCEXTERN void storeSwapInStart(store_client *);
483
484 /*
485 * store_client.c
486 */
487 SQUIDCEXTERN store_client *storeClientListAdd(StoreEntry * e, void *data);
488 SQUIDCEXTERN int storeClientCopyPending(store_client *, StoreEntry * e, void *data);
489 SQUIDCEXTERN int storeUnregister(store_client * sc, StoreEntry * e, void *data)
490 ;
491 SQUIDCEXTERN int storePendingNClients(const StoreEntry * e);
492 SQUIDCEXTERN int storeClientIsThisAClient(store_client * sc, void *someClient);
493
494
495 SQUIDCEXTERN const char *getMyHostname(void);
496 SQUIDCEXTERN const char *uniqueHostname(void);
497 SQUIDCEXTERN void safeunlink(const char *path, int quiet);
498
499 #include "fatal.h"
500 void death(int sig);
501 void sigusr2_handle(int sig);
502 void sig_child(int sig);
503 void sig_shutdown(int sig); ///< handles shutdown notifications from kids
504 SQUIDCEXTERN void leave_suid(void);
505 SQUIDCEXTERN void enter_suid(void);
506 SQUIDCEXTERN void no_suid(void);
507 SQUIDCEXTERN void writePidFile(void);
508 SQUIDCEXTERN void setSocketShutdownLifetimes(int);
509 SQUIDCEXTERN void setMaxFD(void);
510 SQUIDCEXTERN void setSystemLimits(void);
511 extern void squid_signal(int sig, SIGHDLR *, int flags);
512 SQUIDCEXTERN pid_t readPidFile(void);
513 SQUIDCEXTERN void keepCapabilities(void);
514 SQUIDCEXTERN void BroadcastSignalIfAny(int& sig);
515 /// whether the current process is the parent of all other Squid processes
516 SQUIDCEXTERN bool IamMasterProcess();
517 /**
518 whether the current process is dedicated to doing things that only
519 a single process should do, such as PID file maintenance and WCCP
520 */
521 SQUIDCEXTERN bool IamPrimaryProcess();
522 /// whether the current process coordinates worker processes
523 SQUIDCEXTERN bool IamCoordinatorProcess();
524 /// whether the current process handles HTTP transactions and such
525 SQUIDCEXTERN bool IamWorkerProcess();
526 /// whether the current process is dedicated to managing a cache_dir
527 bool IamDiskProcess();
528 /// Whether we are running in daemon mode
529 SQUIDCEXTERN bool InDaemonMode(); // try using specific Iam*() checks above first
530 /// Whether there should be more than one worker process running
531 SQUIDCEXTERN bool UsingSmp(); // try using specific Iam*() checks above first
532 /// number of Kid processes as defined in src/ipc/Kid.h
533 SQUIDCEXTERN int NumberOfKids();
534 /// a string describing this process roles such as worker or coordinator
535 String ProcessRoles();
536 SQUIDCEXTERN int DebugSignal;
537
538 /* AYJ debugs function to show locations being reset with memset() */
539 SQUIDCEXTERN void *xmemset(void *dst, int, size_t);
540
541 SQUIDCEXTERN void debug_trap(const char *);
542 SQUIDCEXTERN void logsFlush(void);
543 SQUIDCEXTERN const char *checkNullString(const char *p);
544
545 SQUIDCEXTERN void squid_getrusage(struct rusage *r);
546
547 SQUIDCEXTERN double rusage_cputime(struct rusage *r);
548
549 SQUIDCEXTERN int rusage_maxrss(struct rusage *r);
550
551 SQUIDCEXTERN int rusage_pagefaults(struct rusage *r);
552 SQUIDCEXTERN void releaseServerSockets(void);
553 SQUIDCEXTERN void PrintRusage(void);
554 SQUIDCEXTERN void dumpMallocStats(void);
555
556 #if USE_UNLINKD
557 SQUIDCEXTERN bool unlinkdNeeded(void);
558 SQUIDCEXTERN void unlinkdInit(void);
559 SQUIDCEXTERN void unlinkdClose(void);
560 SQUIDCEXTERN void unlinkdUnlink(const char *);
561 #endif
562
563 SQUIDCEXTERN AnyP::ProtocolType urlParseProtocol(const char *, const char *e = NULL);
564 SQUIDCEXTERN void urlInitialize(void);
565 SQUIDCEXTERN HttpRequest *urlParse(const HttpRequestMethod&, char *, HttpRequest *request = NULL);
566 SQUIDCEXTERN const char *urlCanonical(HttpRequest *);
567 SQUIDCEXTERN char *urlCanonicalClean(const HttpRequest *);
568 SQUIDCEXTERN const char *urlCanonicalFakeHttps(const HttpRequest * request);
569 SQUIDCEXTERN bool urlIsRelative(const char *);
570 SQUIDCEXTERN char *urlMakeAbsolute(const HttpRequest *, const char *);
571 SQUIDCEXTERN char *urlRInternal(const char *host, unsigned short port, const char *dir, const char *name);
572 SQUIDCEXTERN char *urlInternal(const char *dir, const char *name);
573 SQUIDCEXTERN int matchDomainName(const char *host, const char *domain);
574 SQUIDCEXTERN int urlCheckRequest(const HttpRequest *);
575 SQUIDCEXTERN int urlDefaultPort(AnyP::ProtocolType p);
576 SQUIDCEXTERN char *urlHostname(const char *url);
577 SQUIDCEXTERN void urlExtMethodConfigure(void);
578
579 SQUIDCEXTERN peer_t parseNeighborType(const char *s);
580
581 /* tools.c */
582 //UNUSED #include "dlink.h"
583 //UNUSED SQUIDCEXTERN void dlinkAdd(void *data, dlink_node *, dlink_list *);
584 //UNUSED SQUIDCEXTERN void dlinkAddAfter(void *, dlink_node *, dlink_node *, dlink_list *);
585 //UNUSED SQUIDCEXTERN void dlinkAddTail(void *data, dlink_node *, dlink_list *);
586 //UNUSED SQUIDCEXTERN void dlinkDelete(dlink_node * m, dlink_list * list);
587 //UNUSED SQUIDCEXTERN void dlinkNodeDelete(dlink_node * m);
588 //UNUSED SQUIDCEXTERN dlink_node *dlinkNodeNew(void);
589
590 SQUIDCEXTERN void kb_incr(kb_t *, size_t);
591 SQUIDCEXTERN int stringHasWhitespace(const char *);
592 SQUIDCEXTERN int stringHasCntl(const char *);
593 SQUIDCEXTERN void linklistPush(link_list **, void *);
594 SQUIDCEXTERN void *linklistShift(link_list **);
595 SQUIDCEXTERN int xrename(const char *from, const char *to);
596 SQUIDCEXTERN int isPowTen(int);
597 SQUIDCEXTERN void parseEtcHosts(void);
598 SQUIDCEXTERN int getMyPort(void);
599 SQUIDCEXTERN void setUmask(mode_t mask);
600
601 SQUIDCEXTERN char *strwordtok(char *buf, char **t);
602 SQUIDCEXTERN void strwordquote(MemBuf * mb, const char *str);
603
604
605 /*
606 * ipc.c
607 */
608 SQUIDCEXTERN pid_t ipcCreate(int type,
609 const char *prog,
610 const char *const args[],
611 const char *name,
612 Ip::Address &local_addr,
613 int *rfd,
614 int *wfd,
615 void **hIpc);
616
617 class CacheDigestGuessStats;
618 /* CacheDigest */
619 SQUIDCEXTERN CacheDigest *cacheDigestCreate(int capacity, int bpe);
620 SQUIDCEXTERN void cacheDigestDestroy(CacheDigest * cd);
621 SQUIDCEXTERN CacheDigest *cacheDigestClone(const CacheDigest * cd);
622 SQUIDCEXTERN void cacheDigestClear(CacheDigest * cd);
623 SQUIDCEXTERN void cacheDigestChangeCap(CacheDigest * cd, int new_cap);
624 SQUIDCEXTERN int cacheDigestTest(const CacheDigest * cd, const cache_key * key);
625 SQUIDCEXTERN void cacheDigestAdd(CacheDigest * cd, const cache_key * key);
626 SQUIDCEXTERN void cacheDigestDel(CacheDigest * cd, const cache_key * key);
627 SQUIDCEXTERN size_t cacheDigestCalcMaskSize(int cap, int bpe);
628 SQUIDCEXTERN int cacheDigestBitUtil(const CacheDigest * cd);
629 SQUIDCEXTERN void cacheDigestGuessStatsUpdate(CacheDigestGuessStats * stats, int real_hit, int guess_hit);
630 SQUIDCEXTERN void cacheDigestGuessStatsReport(const CacheDigestGuessStats * stats, StoreEntry * sentry, const char *label);
631 SQUIDCEXTERN void cacheDigestReport(CacheDigest * cd, const char *label, StoreEntry * e);
632
633 SQUIDCEXTERN void internalStart(const Comm::ConnectionPointer &clientConn, HttpRequest *, StoreEntry *);
634 SQUIDCEXTERN int internalCheck(const char *urlpath);
635 SQUIDCEXTERN int internalStaticCheck(const char *urlpath);
636 SQUIDCEXTERN char *internalLocalUri(const char *dir, const char *name);
637 SQUIDCEXTERN char *internalRemoteUri(const char *, unsigned short, const char *, const char *);
638 SQUIDCEXTERN const char *internalHostname(void);
639 SQUIDCEXTERN int internalHostnameIs(const char *);
640
641 SQUIDCEXTERN void carpInit(void);
642 SQUIDCEXTERN peer *carpSelectParent(HttpRequest *);
643
644 SQUIDCEXTERN void peerUserHashInit(void);
645 SQUIDCEXTERN peer * peerUserHashSelectParent(HttpRequest * request);
646
647 SQUIDCEXTERN void peerSourceHashInit(void);
648 SQUIDCEXTERN peer * peerSourceHashSelectParent(HttpRequest * request);
649
650 #if USE_LEAKFINDER
651 SQUIDCEXTERN void leakInit(void);
652 SQUIDCEXTERN void *leakAddFL(void *, const char *, int);
653 SQUIDCEXTERN void *leakTouchFL(void *, const char *, int);
654 SQUIDCEXTERN void *leakFreeFL(void *, const char *, int);
655 #endif
656
657 /*
658 * prototypes for system functions missing from system includes
659 */
660
661 #if _SQUID_SOLARIS_
662
663 SQUIDCEXTERN int getrusage(int, struct rusage *);
664 SQUIDCEXTERN int getpagesize(void);
665 #if !defined(_XPG4_2) && !(defined(__EXTENSIONS__) || \
666 (!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)))
667 SQUIDCEXTERN int gethostname(char *, int);
668 #endif
669 #endif
670
671 /*
672 * hack to allow snmp access to the statistics counters
673 */
674 class StatCounters;
675 SQUIDCEXTERN StatCounters *snmpStatGet(int);
676
677 /* Vary support functions */
678 SQUIDCEXTERN int varyEvaluateMatch(StoreEntry * entry, HttpRequest * req);
679
680 /* CygWin & Windows NT Port */
681 /* win32.c */
682 #if _SQUID_WINDOWS_
683 SQUIDCEXTERN int WIN32_Subsystem_Init(int *, char ***);
684 SQUIDCEXTERN void WIN32_sendSignal(int);
685 SQUIDCEXTERN void WIN32_Abort(int);
686 SQUIDCEXTERN void WIN32_Exit(void);
687 SQUIDCEXTERN void WIN32_SetServiceCommandLine(void);
688 SQUIDCEXTERN void WIN32_InstallService(void);
689 SQUIDCEXTERN void WIN32_RemoveService(void);
690 SQUIDCEXTERN int SquidMain(int, char **);
691 #endif /* _SQUID_WINDOWS_ */
692 #if _SQUID_MSWIN_
693
694 SQUIDCEXTERN int WIN32_pipe(int[2]);
695
696 SQUIDCEXTERN int WIN32_getrusage(int, struct rusage *);
697 SQUIDCEXTERN void WIN32_ExceptionHandlerInit(void);
698
699 SQUIDCEXTERN int Win32__WSAFDIsSet(int fd, fd_set* set);
700 SQUIDCEXTERN DWORD WIN32_IpAddrChangeMonitorInit();
701
702 #endif
703
704 /* external_acl.c */
705 class external_acl;
706 SQUIDCEXTERN void parse_externalAclHelper(external_acl **);
707
708 SQUIDCEXTERN void dump_externalAclHelper(StoreEntry * sentry, const char *name, const external_acl *);
709
710 SQUIDCEXTERN void free_externalAclHelper(external_acl **);
711
712 typedef void EAH(void *data, void *result);
713 class ACLChecklist;
714 SQUIDCEXTERN void externalAclLookup(ACLChecklist * ch, void *acl_data, EAH * handler, void *data);
715
716 SQUIDCEXTERN void externalAclInit(void);
717
718 SQUIDCEXTERN void externalAclShutdown(void);
719
720 SQUIDCEXTERN char *strtokFile(void);
721
722 #if USE_WCCPv2
723
724 SQUIDCEXTERN void parse_wccp2_method(int *v);
725 SQUIDCEXTERN void free_wccp2_method(int *v);
726 SQUIDCEXTERN void dump_wccp2_method(StoreEntry * e, const char *label, int v);
727 SQUIDCEXTERN void parse_wccp2_amethod(int *v);
728 SQUIDCEXTERN void free_wccp2_amethod(int *v);
729 SQUIDCEXTERN void dump_wccp2_amethod(StoreEntry * e, const char *label, int v);
730
731 SQUIDCEXTERN void parse_wccp2_service(void *v);
732 SQUIDCEXTERN void free_wccp2_service(void *v);
733 SQUIDCEXTERN void dump_wccp2_service(StoreEntry * e, const char *label, void *v);
734
735 SQUIDCEXTERN int check_null_wccp2_service(void *v);
736
737 SQUIDCEXTERN void parse_wccp2_service_info(void *v);
738
739 SQUIDCEXTERN void free_wccp2_service_info(void *v);
740
741 SQUIDCEXTERN void dump_wccp2_service_info(StoreEntry * e, const char *label, void *v);
742
743 #endif
744
745 #if USE_AUTH
746
747 #if HAVE_AUTH_MODULE_NEGOTIATE && HAVE_KRB5 && HAVE_GSSAPI
748 /* upstream proxy authentication */
749 SQUIDCEXTERN char *peer_proxy_negotiate_auth(char *principal_name, char *proxy);
750 #endif
751
752 namespace Auth {
753 /* call to ensure the auth component schemes exist. */
754 extern void Init(void);
755 } // namespace Auth
756
757 #endif /* USE_AUTH */
758
759 #endif /* SQUID_PROTOS_H */