2 * SQUID Web Proxy Cache http://www.squid-cache.org/
3 * ----------------------------------------------------------
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.
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.
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.
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.
29 #ifndef SQUID_PROTOS_H
30 #define SQUID_PROTOS_H
32 /* included for routines that have not moved out to their proper homes
36 /* for routines still in this file that take CacheManager parameters */
37 #include "ip/Address.h"
38 /* for parameters that still need these */
40 /* some parameters stil need this */
43 /* for parameters that still need these */
47 class HttpRequestMethod
;
54 SQUIDCEXTERN
void fvdbCountVia(const char *key
);
55 SQUIDCEXTERN
void fvdbCountForw(const char *key
);
58 SQUIDCEXTERN
void headersLog(int cs
, int pq
, const HttpRequestMethod
& m
, void *data
);
60 SQUIDCEXTERN
int logTypeIsATcpHit(log_type
);
65 SQUIDCEXTERN
void configFreeMemory(void);
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
);
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
);
83 /* client_side.c - FD related client side routines */
85 SQUIDCEXTERN
void clientdbInit(void);
87 #include "anyp/ProtocolType.h"
88 SQUIDCEXTERN
void clientdbUpdate(const Ip::Address
&, log_type
, AnyP::ProtocolType
, size_t);
90 SQUIDCEXTERN
int clientdbCutoffDenied(const Ip::Address
&);
91 void clientdbDump(StoreEntry
*);
92 SQUIDCEXTERN
void clientdbFreeMemory(void);
94 SQUIDCEXTERN
int clientdbEstablished(const Ip::Address
&, int);
96 SQUIDCEXTERN
void clientdbSetWriteLimiter(ClientInfo
* info
, const int writeSpeedLimit
,const double initialBurst
,const double highWatermark
);
97 SQUIDCEXTERN ClientInfo
* clientdbGetInfo(const Ip::Address
&addr
);
99 SQUIDCEXTERN
void clientOpenListenSockets(void);
100 SQUIDCEXTERN
void clientHttpConnectionsClose(void);
101 SQUIDCEXTERN
void httpRequestFree(void *);
103 extern void clientAccessCheck(void *);
107 /* packs, then prints an object using debugs() */
108 SQUIDCEXTERN
void debugObj(int section
, int level
, const char *label
, void *obj
, ObjPackMethod pm
);
111 SQUIDCEXTERN
int file_open(const char *path
, int mode
);
112 SQUIDCEXTERN
void file_close(int fd
);
113 /* Adapter file_write for object callbacks */
117 FreeObject(void *address
)
119 O
*anObject
= static_cast <O
*>(address
);
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);
128 SQUIDCEXTERN
void dnsShutdown(void);
129 SQUIDCEXTERN
void dnsInit(void);
130 SQUIDCEXTERN
void dnsSubmit(const char *lookup
, HLPCB
* callback
, void *data
);
133 SQUIDCEXTERN
void idnsInit(void);
134 SQUIDCEXTERN
void idnsShutdown(void);
135 SQUIDCEXTERN
void idnsALookup(const char *, IDNSCB
*, void *);
137 SQUIDCEXTERN
void idnsPTRLookup(const Ip::Address
&, IDNSCB
*, void *);
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);
147 SQUIDCEXTERN
void fqdncache_nbgethostbyaddr(const Ip::Address
&, FQDNH
*, void *);
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 *);
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
);
164 \defgroup ServerProtocolFTPAPI Server-Side FTP API
165 \ingroup ServerProtocol
168 /// \ingroup ServerProtocolFTPAPI
169 SQUIDCEXTERN
void ftpStart(FwdState
*);
174 /// \ingroup ServerProtocolFTPAPI
175 SQUIDCEXTERN
const char *ftpUrlWith2f(HttpRequest
*);
179 \defgroup ServerProtocolGopherAPI Server-Side Gopher API
180 \ingroup ServerProtocol
183 /// \ingroup ServerProtocolGopherAPI
184 SQUIDCEXTERN
void gopherStart(FwdState
*);
186 /// \ingroup ServerProtocolGopherAPI
187 SQUIDCEXTERN
int gopherCachable(const HttpRequest
*);
191 \defgroup ServerProtocolWhoisAPI Server-Side WHOIS API
192 \ingroup ServerProtocol
195 /// \ingroup ServerProtocolWhoisAPI
196 SQUIDCEXTERN
void whoisStart(FwdState
*);
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
,
209 SQUIDCEXTERN
const char *httpMakeVaryMark(HttpRequest
* request
, HttpReply
const * reply
);
211 #include "HttpStatusCode.h"
212 SQUIDCEXTERN
const char *httpStatusString(http_status status
);
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
);
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
);
238 httpHeaderPutStrf(HttpHeader
* hdr
, http_hdr_type id
, const char *fmt
,...) PRINTF_FORMAT_ARG3
;
242 SQUIDCEXTERN
void httpHeaderInitModule(void);
243 SQUIDCEXTERN
void httpHeaderCleanModule(void);
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();
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
);
257 SQUIDCEXTERN
void addr2oid(Ip::Address
&addr
, oid
*Dest
);
258 SQUIDCEXTERN
void oid2addr(oid
*Dest
, Ip::Address
&addr
, u_int code
);
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
*);
270 extern variable_list
*snmp_netDnsFn(variable_list
*, snint
*);
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 */
279 SQUIDCEXTERN
void wccpInit(void);
280 SQUIDCEXTERN
void wccpConnectionOpen(void);
281 SQUIDCEXTERN
void wccpConnectionClose(void);
282 #endif /* USE_WCCP */
285 extern void wccp2Init(void);
286 extern void wccp2ConnectionOpen(void);
287 extern void wccp2ConnectionClose(void);
288 #endif /* USE_WCCPv2 */
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);
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
);
305 SQUIDCEXTERN
int mcastSetTtl(int, int);
306 SQUIDCEXTERN IPH mcastJoinGroups
;
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
*,
319 SQUIDCEXTERN
void neighborAddAcl(const char *, const char *);
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);
325 SQUIDCEXTERN
void neighborsHtcpClear(StoreEntry
*, const char *, HttpRequest
*, const HttpRequestMethod
&, htcp_clr_reason
);
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
*);
347 SQUIDCEXTERN peer
*whichPeer(const Ip::Address
&from
);
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
);
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
);
360 SQUIDCEXTERN
void urnStart(HttpRequest
*, StoreEntry
*);
362 SQUIDCEXTERN
void redirectInit(void);
363 SQUIDCEXTERN
void redirectShutdown(void);
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
);
375 extern void shut_down(int);
376 extern void rotate_logs(int);
377 extern void reconfigure(int);
380 extern void start_announce(void *unused
);
381 extern void waisStart(FwdState
*);
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
);
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);
419 SQUIDCEXTERN
void memConfigure(void);
421 /* ----------------------------------------------------------------- */
424 SQUIDCEXTERN
void storeReplSetup(void);
429 SQUIDCEXTERN
void storeLog(int tag
, const StoreEntry
* e
);
430 SQUIDCEXTERN
void storeLogRotate(void);
431 SQUIDCEXTERN
void storeLogClose(void);
432 SQUIDCEXTERN
void storeLogOpen(void);
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
;
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
*);
465 SQUIDCEXTERN
void storeRebuildStart(void);
467 SQUIDCEXTERN
void storeRebuildComplete(struct _store_rebuild_data
*);
468 SQUIDCEXTERN
void storeRebuildProgress(int sd_index
, int total
, int sofar
);
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
);
482 SQUIDCEXTERN
void storeSwapInStart(store_client
*);
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
)
491 SQUIDCEXTERN
int storePendingNClients(const StoreEntry
* e
);
492 SQUIDCEXTERN
int storeClientIsThisAClient(store_client
* sc
, void *someClient
);
495 SQUIDCEXTERN
const char *getMyHostname(void);
496 SQUIDCEXTERN
const char *uniqueHostname(void);
497 SQUIDCEXTERN
void safeunlink(const char *path
, int quiet
);
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();
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
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
;
538 /* AYJ debugs function to show locations being reset with memset() */
539 SQUIDCEXTERN
void *xmemset(void *dst
, int, size_t);
541 SQUIDCEXTERN
void debug_trap(const char *);
542 SQUIDCEXTERN
void logsFlush(void);
543 SQUIDCEXTERN
const char *checkNullString(const char *p
);
545 SQUIDCEXTERN
void squid_getrusage(struct rusage
*r
);
547 SQUIDCEXTERN
double rusage_cputime(struct rusage
*r
);
549 SQUIDCEXTERN
int rusage_maxrss(struct rusage
*r
);
551 SQUIDCEXTERN
int rusage_pagefaults(struct rusage
*r
);
552 SQUIDCEXTERN
void releaseServerSockets(void);
553 SQUIDCEXTERN
void PrintRusage(void);
554 SQUIDCEXTERN
void dumpMallocStats(void);
557 SQUIDCEXTERN
bool unlinkdNeeded(void);
558 SQUIDCEXTERN
void unlinkdInit(void);
559 SQUIDCEXTERN
void unlinkdClose(void);
560 SQUIDCEXTERN
void unlinkdUnlink(const char *);
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);
579 SQUIDCEXTERN peer_t
parseNeighborType(const char *s
);
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);
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
);
601 SQUIDCEXTERN
char *strwordtok(char *buf
, char **t
);
602 SQUIDCEXTERN
void strwordquote(MemBuf
* mb
, const char *str
);
608 SQUIDCEXTERN pid_t
ipcCreate(int type
,
610 const char *const args
[],
612 Ip::Address
&local_addr
,
617 class CacheDigestGuessStats
;
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
);
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 *);
641 SQUIDCEXTERN
void carpInit(void);
642 SQUIDCEXTERN peer
*carpSelectParent(HttpRequest
*);
644 SQUIDCEXTERN
void peerUserHashInit(void);
645 SQUIDCEXTERN peer
* peerUserHashSelectParent(HttpRequest
* request
);
647 SQUIDCEXTERN
void peerSourceHashInit(void);
648 SQUIDCEXTERN peer
* peerSourceHashSelectParent(HttpRequest
* request
);
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);
658 * prototypes for system functions missing from system includes
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);
672 * hack to allow snmp access to the statistics counters
675 SQUIDCEXTERN StatCounters
*snmpStatGet(int);
677 /* Vary support functions */
678 SQUIDCEXTERN
int varyEvaluateMatch(StoreEntry
* entry
, HttpRequest
* req
);
680 /* CygWin & Windows NT Port */
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_ */
694 SQUIDCEXTERN
int WIN32_pipe(int[2]);
696 SQUIDCEXTERN
int WIN32_getrusage(int, struct rusage
*);
697 SQUIDCEXTERN
void WIN32_ExceptionHandlerInit(void);
699 SQUIDCEXTERN
int Win32__WSAFDIsSet(int fd
, fd_set
* set
);
700 SQUIDCEXTERN DWORD
WIN32_IpAddrChangeMonitorInit();
706 SQUIDCEXTERN
void parse_externalAclHelper(external_acl
**);
708 SQUIDCEXTERN
void dump_externalAclHelper(StoreEntry
* sentry
, const char *name
, const external_acl
*);
710 SQUIDCEXTERN
void free_externalAclHelper(external_acl
**);
712 typedef void EAH(void *data
, void *result
);
714 SQUIDCEXTERN
void externalAclLookup(ACLChecklist
* ch
, void *acl_data
, EAH
* handler
, void *data
);
716 SQUIDCEXTERN
void externalAclInit(void);
718 SQUIDCEXTERN
void externalAclShutdown(void);
720 SQUIDCEXTERN
char *strtokFile(void);
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
);
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
);
735 SQUIDCEXTERN
int check_null_wccp2_service(void *v
);
737 SQUIDCEXTERN
void parse_wccp2_service_info(void *v
);
739 SQUIDCEXTERN
void free_wccp2_service_info(void *v
);
741 SQUIDCEXTERN
void dump_wccp2_service_info(StoreEntry
* e
, const char *label
, void *v
);
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
);
753 /* call to ensure the auth component schemes exist. */
754 extern void Init(void);
757 #endif /* USE_AUTH */
759 #endif /* SQUID_PROTOS_H */