protos.h
上传用户:liugui
上传日期:2007-01-04
资源大小:822k
文件大小:47k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: protos.h,v 1.314 1999/01/29 23:39:21 wessels Exp $
  3.  *
  4.  *
  5.  * SQUID Internet Object Cache  http://squid.nlanr.net/Squid/
  6.  * ----------------------------------------------------------
  7.  *
  8.  *  Squid is the result of efforts by numerous individuals from the
  9.  *  Internet community.  Development is led by Duane Wessels of the
  10.  *  National Laboratory for Applied Network Research and funded by the
  11.  *  National Science Foundation.  Squid is Copyrighted (C) 1998 by
  12.  *  Duane Wessels and the University of California San Diego.  Please
  13.  *  see the COPYRIGHT file for full details.  Squid incorporates
  14.  *  software developed and/or copyrighted by other sources.  Please see
  15.  *  the CREDITS file for full details.
  16.  *
  17.  *  This program is free software; you can redistribute it and/or modify
  18.  *  it under the terms of the GNU General Public License as published by
  19.  *  the Free Software Foundation; either version 2 of the License, or
  20.  *  (at your option) any later version.
  21.  *  
  22.  *  This program is distributed in the hope that it will be useful,
  23.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  24.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  25.  *  GNU General Public License for more details.
  26.  *  
  27.  *  You should have received a copy of the GNU General Public License
  28.  *  along with this program; if not, write to the Free Software
  29.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
  30.  *
  31.  */
  32. extern void accessLogLog(AccessLogEntry *);
  33. extern void accessLogRotate(void);
  34. extern void accessLogClose(void);
  35. extern void accessLogInit(void);
  36. extern const char *accessLogTime(time_t);
  37. extern void hierarchyNote(HierarchyLogEntry *, hier_code, const char *);
  38. #if FORW_VIA_DB
  39. extern void fvdbCountVia(const char *key);
  40. extern void fvdbCountForw(const char *key);
  41. #endif
  42. extern aclCheck_t *aclChecklistCreate(const struct _acl_access *,
  43.     request_t *,
  44.     struct in_addr src,
  45.     struct in_addr me,
  46.     const char *user_agent,
  47.     const char *ident);
  48. extern void aclNBCheck(aclCheck_t *, PF *, void *);
  49. extern int aclCheckFast(const struct _acl_access *A, aclCheck_t *);
  50. extern void aclChecklistFree(aclCheck_t *);
  51. extern int aclMatchAclList(const acl_list * list, aclCheck_t * checklist);
  52. extern void aclDestroyAccessList(struct _acl_access **list);
  53. extern void aclDestroyAcls(acl **);
  54. extern void aclParseAccessLine(struct _acl_access **);
  55. extern void aclParseAclLine(acl **);
  56. extern int aclIsProxyAuth(const char *name);
  57. extern int aclGetDenyInfoPage(acl_deny_info_list ** head, const char *name);
  58. extern void aclParseDenyInfoLine(struct _acl_deny_info_list **);
  59. extern void aclDestroyDenyInfoList(struct _acl_deny_info_list **);
  60. extern void aclDestroyRegexList(struct _relist *data);
  61. extern int aclMatchRegex(relist * data, const char *word);
  62. extern void aclParseRegexList(void *curlist);
  63. extern const char *aclTypeToStr(squid_acl);
  64. extern wordlist *aclDumpGeneric(const acl *);
  65. #if USE_ASYNC_IO
  66. extern int aio_cancel(aio_result_t *);
  67. extern int aio_open(const char *, int, mode_t, aio_result_t *);
  68. extern int aio_read(int, char *, int, off_t, int, aio_result_t *);
  69. extern int aio_write(int, char *, int, off_t, int, aio_result_t *);
  70. extern int aio_close(int, aio_result_t *);
  71. extern int aio_stat(const char *, struct stat *, aio_result_t *);
  72. extern int aio_unlink(const char *, aio_result_t *);
  73. extern int aio_opendir(const char *, aio_result_t *);
  74. extern aio_result_t *aio_poll_done(void);
  75. extern int aio_operations_pending(void);
  76. extern void aioCancel(int, void *);
  77. extern void aioOpen(const char *, int, mode_t, AIOCB *, void *, void *);
  78. extern void aioClose(int);
  79. extern void aioWrite(int, int offset, char *, int size, AIOCB *, void *);
  80. extern void aioRead(int, int offset, char *, int size, AIOCB *, void *);
  81. extern void aioStat(char *, struct stat *, AIOCB *, void *, void *);
  82. extern void aioUnlink(const char *, AIOCB *, void *);
  83. extern void aioCheckCallbacks(void);
  84. extern void aioSync(void);
  85. #endif
  86. extern int parseConfigFile(const char *file_name);
  87. extern void intlistDestroy(intlist **);
  88. extern int intlistFind(intlist * list, int i);
  89. extern wordlist *wordlistAdd(wordlist **, const char *);
  90. extern void wordlistDestroy(wordlist **);
  91. extern void configFreeMemory(void);
  92. extern void wordlistCat(const wordlist *, MemBuf * mb);
  93. extern void cbdataInit(void);
  94. #if CBDATA_DEBUG
  95. extern void cbdataAddDbg(const void *p, CBDUNL *, int, const char *, int);
  96. #else
  97. extern void cbdataAdd(const void *p, CBDUNL *, int);
  98. #endif
  99. extern void cbdataFree(void *p);
  100. extern void cbdataLock(const void *p);
  101. extern void cbdataUnlock(const void *p);
  102. extern int cbdataValid(const void *p);
  103. extern CBDUNL cbdataXfree;
  104. extern void clientdbInit(void);
  105. extern void clientdbUpdate(struct in_addr, log_type, protocol_t, size_t);
  106. extern int clientdbCutoffDenied(struct in_addr);
  107. extern void clientdbDump(StoreEntry *);
  108. extern void clientdbFreeMemory(void);
  109. extern void clientAccessCheck(void *);
  110. extern void clientAccessCheckDone(int, void *);
  111. extern int modifiedSince(StoreEntry *, request_t *);
  112. extern char *clientConstructTraceEcho(clientHttpRequest *);
  113. extern void clientPurgeRequest(clientHttpRequest *);
  114. extern int checkNegativeHit(StoreEntry *);
  115. extern void clientHttpConnectionsOpen(void);
  116. extern void clientHttpConnectionsClose(void);
  117. extern StoreEntry *clientCreateStoreEntry(clientHttpRequest *, method_t, request_flags);
  118. extern int isTcpHit(log_type);
  119. extern int commSetNonBlocking(int fd);
  120. extern void commSetCloseOnExec(int fd);
  121. extern int comm_accept(int fd, struct sockaddr_in *, struct sockaddr_in *);
  122. extern void comm_close(int fd);
  123. #if LINGERING_CLOSE
  124. extern void comm_lingering_close(int fd);
  125. #endif
  126. extern void commConnectStart(int fd, const char *, u_short, CNCB *, void *);
  127. extern int comm_connect_addr(int sock, const struct sockaddr_in *);
  128. extern void comm_init(void);
  129. extern int comm_listen(int sock);
  130. extern int comm_open(int, int, struct in_addr, u_short port, int, const char *note);
  131. extern u_short comm_local_port(int fd);
  132. extern void commSetSelect(int, unsigned int, PF *, void *, time_t);
  133. extern void comm_add_close_handler(int fd, PF *, void *);
  134. extern void comm_remove_close_handler(int fd, PF *, void *);
  135. extern int comm_udp_sendto(int, const struct sockaddr_in *, int, const void *, int);
  136. extern void comm_write(int fd,
  137.     char *buf,
  138.     int size,
  139.     CWCB * handler,
  140.     void *handler_data,
  141.     FREE *);
  142. extern void comm_write_mbuf(int fd, MemBuf mb, CWCB * handler, void *handler_data);
  143. extern void commCallCloseHandlers(int fd);
  144. extern int commSetTimeout(int fd, int, PF *, void *);
  145. extern void commSetDefer(int fd, DEFER * func, void *);
  146. extern int ignoreErrno(int);
  147. extern void commCloseAllSockets(void);
  148. /*
  149.  * comm_select.c
  150.  */
  151. extern void comm_select_init(void);
  152. #if HAVE_POLL
  153. extern int comm_poll(int);
  154. #else
  155. extern int comm_select(int);
  156. #endif
  157. extern void commUpdateReadBits(int, PF *);
  158. extern void commUpdateWriteBits(int, PF *);
  159. extern void packerToStoreInit(Packer * p, StoreEntry * e);
  160. extern void packerToMemInit(Packer * p, MemBuf * mb);
  161. extern void packerClean(Packer * p);
  162. extern void packerAppend(Packer * p, const char *buf, int size);
  163. #if STDC_HEADERS
  164. extern void packerPrintf(Packer * p, const char *fmt,...);
  165. #else
  166. extern void packerPrintf();
  167. #endif
  168. /* see debug.c for info on context-based debugging */
  169. extern Ctx ctx_enter(const char *descr);
  170. extern void ctx_exit(Ctx ctx);
  171. extern void _db_init(const char *logfile, const char *options);
  172. extern void _db_rotate_log(void);
  173. #if STDC_HEADERS
  174. extern void _db_print(const char *,...);
  175. #else
  176. extern void _db_print();
  177. #endif
  178. extern void xassert(const char *, const char *, int);
  179. /* packs, then prints an object using debug() */
  180. extern void debugObj(int section, int level, const char *label, void *obj, ObjPackMethod pm);
  181. extern int file_open(const char *path, int mode, FOCB *, void *callback_data, void *tag);
  182. extern void file_close(int fd);
  183. extern void file_write(int, off_t, void *, int len, DWCB *, void *, FREE *);
  184. extern void file_write_mbuf(int fd, off_t, MemBuf mb, DWCB * handler, void *handler_data);
  185. extern int file_read(int, char *, int, off_t, DRCB *, void *);
  186. extern void disk_init(void);
  187. extern int diskWriteIsComplete(int);
  188. extern void dnsShutdown(void);
  189. extern void dnsInit(void);
  190. extern void dnsSubmit(const char *lookup, HLPCB * callback, void *data);
  191. extern void eventAdd(const char *name, EVH * func, void *arg, double when, int);
  192. extern void eventAddIsh(const char *name, EVH * func, void *arg, double delta_ish, int);
  193. extern void eventRun(void);
  194. extern time_t eventNextTime(void);
  195. extern void eventDelete(EVH * func, void *arg);
  196. extern void eventInit(void);
  197. extern void eventFreeMemory(void);
  198. extern int eventFind(EVH *, void *);
  199. extern void fd_close(int fd);
  200. #if USE_ASYNC_IO
  201. extern void fd_was_closed(int fd);
  202. #endif
  203. extern void fd_open(int fd, unsigned int type, const char *);
  204. extern void fd_note(int fd, const char *);
  205. extern void fd_bytes(int fd, int len, unsigned int type);
  206. extern void fdFreeMemory(void);
  207. extern void fdDumpOpen(void);
  208. extern int fdNFree(void);
  209. extern void fdAdjustReserved(void);
  210. extern fileMap *file_map_create(int);
  211. extern int file_map_allocate(fileMap *, int);
  212. extern int file_map_bit_set(fileMap *, int);
  213. extern int file_map_bit_test(fileMap *, int);
  214. extern void file_map_bit_reset(fileMap *, int);
  215. extern void filemapFreeMemory(fileMap *);
  216. extern void filemapCopy(fileMap * old, fileMap * new);
  217. extern void fqdncache_nbgethostbyaddr(struct in_addr, FQDNH *, void *);
  218. extern int fqdncacheUnregister(struct in_addr, void *);
  219. extern const char *fqdncache_gethostbyaddr(struct in_addr, int flags);
  220. extern void fqdncache_init(void);
  221. extern void fqdnStats(StoreEntry *);
  222. extern void fqdncacheReleaseInvalid(const char *);
  223. extern const char *fqdnFromAddr(struct in_addr);
  224. extern int fqdncacheQueueDrain(void);
  225. extern void fqdncacheFreeMemory(void);
  226. extern void fqdncache_restart(void);
  227. extern EVH fqdncache_purgelru;
  228. extern void ftpStart(FwdState *);
  229. extern char *ftpUrlWith2f(const request_t *);
  230. extern void gopherStart(FwdState *);
  231. extern int gopherCachable(const char *);
  232. extern void whoisStart(FwdState *);
  233. extern int httpCachable(method_t);
  234. extern void httpStart(FwdState *);
  235. extern void httpParseReplyHeaders(const char *, http_reply *);
  236. extern void httpProcessReplyHeader(HttpStateData *, const char *, int);
  237. extern size_t httpBuildRequestPrefix(request_t * request,
  238.     request_t * orig_request,
  239.     StoreEntry * entry,
  240.     MemBuf * mb,
  241.     int cfd,
  242.     http_state_flags);
  243. extern void httpAnonInitModule();
  244. extern int httpAnonHdrAllowed(http_hdr_type hdr_id);
  245. extern int httpAnonHdrDenied(http_hdr_type hdr_id);
  246. extern void httpBuildRequestHeader(request_t *, request_t *, StoreEntry *, HttpHeader *, int, http_state_flags);
  247. /* ETag */
  248. extern int etagParseInit(ETag * etag, const char *str);
  249. extern int etagIsEqual(const ETag * tag1, const ETag * tag2);
  250. /* Http Status Line */
  251. /* init/clean */
  252. extern void httpStatusLineInit(HttpStatusLine * sline);
  253. extern void httpStatusLineClean(HttpStatusLine * sline);
  254. /* set/get values */
  255. extern void httpStatusLineSet(HttpStatusLine * sline, double version,
  256.     http_status status, const char *reason);
  257. extern const char *httpStatusLineReason(const HttpStatusLine * sline);
  258. /* parse/pack */
  259. /* parse a 0-terminating buffer and fill internal structires; returns true on success */
  260. extern int httpStatusLineParse(HttpStatusLine * sline, const char *start,
  261.     const char *end);
  262. /* pack fields using Packer */
  263. extern void httpStatusLinePackInto(const HttpStatusLine * sline, Packer * p);
  264. extern const char *httpStatusString(http_status status);
  265. /* Http Body */
  266. /* init/clean */
  267. extern void httpBodyInit(HttpBody * body);
  268. extern void httpBodyClean(HttpBody * body);
  269. /* get body ptr (always use this) */
  270. extern const char *httpBodyPtr(const HttpBody * body);
  271. /* set body, does not clone mb so you should not reuse it */
  272. extern void httpBodySet(HttpBody * body, MemBuf * mb);
  273. /* pack */
  274. extern void httpBodyPackInto(const HttpBody * body, Packer * p);
  275. /* Http Cache Control Header Field */
  276. extern void httpHdrCcInitModule();
  277. extern void httpHdrCcCleanModule();
  278. extern HttpHdrCc *httpHdrCcCreate();
  279. extern HttpHdrCc *httpHdrCcParseCreate(const String * str);
  280. extern void httpHdrCcDestroy(HttpHdrCc * cc);
  281. extern HttpHdrCc *httpHdrCcDup(const HttpHdrCc * cc);
  282. extern void httpHdrCcPackInto(const HttpHdrCc * cc, Packer * p);
  283. extern void httpHdrCcJoinWith(HttpHdrCc * cc, const HttpHdrCc * new_cc);
  284. extern void httpHdrCcSetMaxAge(HttpHdrCc * cc, int max_age);
  285. extern void httpHdrCcUpdateStats(const HttpHdrCc * cc, StatHist * hist);
  286. extern void httpHdrCcStatDumper(StoreEntry * sentry, int idx, double val, double size, int count);
  287. /* Http Range Header Field */
  288. extern HttpHdrRange *httpHdrRangeParseCreate(const String * range_spec);
  289. /* returns true if ranges are valid; inits HttpHdrRange */
  290. extern int httpHdrRangeParseInit(HttpHdrRange * range, const String * range_spec);
  291. extern void httpHdrRangeDestroy(HttpHdrRange * range);
  292. extern HttpHdrRange *httpHdrRangeDup(const HttpHdrRange * range);
  293. extern void httpHdrRangePackInto(const HttpHdrRange * range, Packer * p);
  294. /* iterate through specs */
  295. extern HttpHdrRangeSpec *httpHdrRangeGetSpec(const HttpHdrRange * range, HttpHdrRangePos * pos);
  296. /* adjust specs after the length is known */
  297. extern int httpHdrRangeCanonize(HttpHdrRange * range, size_t clen);
  298. /* other */
  299. extern String httpHdrRangeBoundaryStr(clientHttpRequest * http);
  300. extern int httpHdrRangeIsComplex(const HttpHdrRange * range);
  301. extern int httpHdrRangeWillBeComplex(const HttpHdrRange * range);
  302. extern size_t httpHdrRangeFirstOffset(const HttpHdrRange * range);
  303. extern size_t httpHdrRangeLowestOffset(const HttpHdrRange * range, size_t size);
  304. /* Http Content Range Header Field */
  305. extern HttpHdrContRange *httpHdrContRangeCreate();
  306. extern HttpHdrContRange *httpHdrContRangeParseCreate(const char *crange_spec);
  307. /* returns true if range is valid; inits HttpHdrContRange */
  308. extern int httpHdrContRangeParseInit(HttpHdrContRange * crange, const char *crange_spec);
  309. extern void httpHdrContRangeDestroy(HttpHdrContRange * crange);
  310. extern HttpHdrContRange *httpHdrContRangeDup(const HttpHdrContRange * crange);
  311. extern void httpHdrContRangePackInto(const HttpHdrContRange * crange, Packer * p);
  312. /* inits with given spec */
  313. extern void httpHdrContRangeSet(HttpHdrContRange *, HttpHdrRangeSpec, size_t ent_len);
  314. /* Http Header Tools */
  315. extern HttpHeaderFieldInfo *httpHeaderBuildFieldsInfo(const HttpHeaderFieldAttrs * attrs, int count);
  316. extern void httpHeaderDestroyFieldsInfo(HttpHeaderFieldInfo * info, int count);
  317. extern int httpHeaderIdByName(const char *name, int name_len, const HttpHeaderFieldInfo * attrs, int end);
  318. extern int httpHeaderIdByNameDef(const char *name, int name_len);
  319. extern void httpHeaderMaskInit(HttpHeaderMask * mask, int value);
  320. extern void httpHeaderCalcMask(HttpHeaderMask * mask, const int *enums, int count);
  321. extern int httpHeaderHasConnDir(const HttpHeader * hdr, const char *directive);
  322. extern void httpHeaderAddContRange(HttpHeader * hdr, HttpHdrRangeSpec spec, size_t ent_len);
  323. extern void strListAdd(String * str, const char *item, char del);
  324. extern int strListIsMember(const String * str, const char *item, char del);
  325. extern int strListIsSubstr(const String * list, const char *s, char del);
  326. extern int strListGetItem(const String * str, char del, const char **item, int *ilen, const char **pos);
  327. extern const char *getStringPrefix(const char *str, const char *end);
  328. extern int httpHeaderParseInt(const char *start, int *val);
  329. extern int httpHeaderParseSize(const char *start, size_t * sz);
  330. extern int httpHeaderReset(HttpHeader * hdr);
  331. #if STDC_HEADERS
  332. extern void httpHeaderPutStrf(HttpHeader * hdr, http_hdr_type id, const char *fmt,...);
  333. #else
  334. extern void
  335.      httpHeaderPutStrf();
  336. #endif
  337. /* Http Header */
  338. extern void httpHeaderInitModule();
  339. extern void httpHeaderCleanModule();
  340. /* init/clean */
  341. extern void httpHeaderInit(HttpHeader * hdr, http_hdr_owner_type owner);
  342. extern void httpHeaderClean(HttpHeader * hdr);
  343. /* append/update */
  344. extern void httpHeaderAppend(HttpHeader * dest, const HttpHeader * src);
  345. extern void httpHeaderUpdate(HttpHeader * old, const HttpHeader * fresh, const HttpHeaderMask * denied_mask);
  346. /* parse/pack */
  347. extern int httpHeaderParse(HttpHeader * hdr, const char *header_start, const char *header_end);
  348. extern void httpHeaderPackInto(const HttpHeader * hdr, Packer * p);
  349. /* field manipulation */
  350. extern int httpHeaderHas(const HttpHeader * hdr, http_hdr_type type);
  351. extern void httpHeaderPutInt(HttpHeader * hdr, http_hdr_type type, int number);
  352. extern void httpHeaderPutTime(HttpHeader * hdr, http_hdr_type type, time_t time);
  353. extern void httpHeaderPutStr(HttpHeader * hdr, http_hdr_type type, const char *str);
  354. extern void httpHeaderPutAuth(HttpHeader * hdr, const char *authScheme, const char *realm);
  355. extern void httpHeaderPutCc(HttpHeader * hdr, const HttpHdrCc * cc);
  356. extern void httpHeaderPutContRange(HttpHeader * hdr, const HttpHdrContRange * cr);
  357. extern void httpHeaderPutRange(HttpHeader * hdr, const HttpHdrRange * range);
  358. extern void httpHeaderPutExt(HttpHeader * hdr, const char *name, const char *value);
  359. extern int httpHeaderGetInt(const HttpHeader * hdr, http_hdr_type id);
  360. extern time_t httpHeaderGetTime(const HttpHeader * hdr, http_hdr_type id);
  361. extern TimeOrTag httpHeaderGetTimeOrTag(const HttpHeader * hdr, http_hdr_type id);
  362. extern HttpHdrCc *httpHeaderGetCc(const HttpHeader * hdr);
  363. extern ETag httpHeaderGetETag(const HttpHeader * hdr, http_hdr_type id);
  364. extern HttpHdrRange *httpHeaderGetRange(const HttpHeader * hdr);
  365. extern HttpHdrContRange *httpHeaderGetContRange(const HttpHeader * hdr);
  366. extern const char *httpHeaderGetStr(const HttpHeader * hdr, http_hdr_type id);
  367. extern const char *httpHeaderGetLastStr(const HttpHeader * hdr, http_hdr_type id);
  368. extern const char *httpHeaderGetAuth(const HttpHeader * hdr, http_hdr_type id, const char *authScheme);
  369. extern String httpHeaderGetList(const HttpHeader * hdr, http_hdr_type id);
  370. extern int httpHeaderDelByName(HttpHeader * hdr, const char *name);
  371. extern int httpHeaderDelById(HttpHeader * hdr, http_hdr_type id);
  372. extern void httpHeaderDelAt(HttpHeader * hdr, HttpHeaderPos pos);
  373. /* avoid using these low level routines */
  374. extern HttpHeaderEntry *httpHeaderGetEntry(const HttpHeader * hdr, HttpHeaderPos * pos);
  375. extern HttpHeaderEntry *httpHeaderFindEntry(const HttpHeader * hdr, http_hdr_type id);
  376. extern void httpHeaderAddEntry(HttpHeader * hdr, HttpHeaderEntry * e);
  377. extern HttpHeaderEntry *httpHeaderEntryClone(const HttpHeaderEntry * e);
  378. extern void httpHeaderEntryPackInto(const HttpHeaderEntry * e, Packer * p);
  379. /* store report about current header usage and other stats */
  380. extern void httpHeaderStoreReport(StoreEntry * e);
  381. /* Http Msg (currently in HttpReply.c @?@ ) */
  382. extern int httpMsgIsPersistent(float http_ver, const HttpHeader * hdr);
  383. extern int httpMsgIsolateHeaders(const char **parse_start, const char **blk_start, const char **blk_end);
  384. /* Http Reply */
  385. extern void httpReplyInitModule();
  386. /* create/destroy */
  387. extern HttpReply *httpReplyCreate();
  388. extern void httpReplyDestroy(HttpReply * rep);
  389. /* reset: clean, then init */
  390. extern void httpReplyReset(HttpReply * rep);
  391. /* absorb: copy the contents of a new reply to the old one, destroy new one */
  392. extern void httpReplyAbsorb(HttpReply * rep, HttpReply * new_rep);
  393. /* parse returns -1,0,+1 on error,need-more-data,success */
  394. extern int httpReplyParse(HttpReply * rep, const char *buf); /*, int atEnd); */
  395. extern void httpReplyPackInto(const HttpReply * rep, Packer * p);
  396. /* ez-routines */
  397. /* mem-pack: returns a ready to use mem buffer with a packed reply */
  398. extern MemBuf httpReplyPack(const HttpReply * rep);
  399. /* swap: create swap-based packer, pack, destroy packer */
  400. extern void httpReplySwapOut(const HttpReply * rep, StoreEntry * e);
  401. /* set commonly used info with one call */
  402. extern void httpReplySetHeaders(HttpReply * rep, double ver, http_status status,
  403.     const char *reason, const char *ctype, int clen, time_t lmt, time_t expires);
  404. /* do everything in one call: init, set, pack, clean, return MemBuf */
  405. extern MemBuf httpPackedReply(double ver, http_status status, const char *ctype,
  406.     int clen, time_t lmt, time_t expires);
  407. /* construct 304 reply and pack it into MemBuf, return MemBuf */
  408. extern MemBuf httpPacked304Reply(const HttpReply * rep);
  409. /* update when 304 reply is received for a cached object */
  410. extern void httpReplyUpdateOnNotModified(HttpReply * rep, HttpReply * freshRep);
  411. /* header manipulation */
  412. extern int httpReplyContentLen(const HttpReply * rep);
  413. extern const char *httpReplyContentType(const HttpReply * rep);
  414. extern time_t httpReplyExpires(const HttpReply * rep);
  415. extern int httpReplyHasCc(const HttpReply * rep, http_hdr_cc_type type);
  416. extern void httpRedirectReply(HttpReply *, http_status, const char *);
  417. /* Http Request */
  418. extern request_t *requestCreate(method_t, protocol_t, const char *urlpath);
  419. extern void requestDestroy(request_t *);
  420. extern request_t *requestLink(request_t *);
  421. extern void requestUnlink(request_t *);
  422. extern int httpRequestParseHeader(request_t * req, const char *parse_start);
  423. extern void httpRequestSwapOut(const request_t * req, StoreEntry * e);
  424. extern void httpRequestPack(const request_t * req, Packer * p);
  425. extern int httpRequestPrefixLen(const request_t * req);
  426. extern int httpRequestHdrAllowed(const HttpHeaderEntry * e, String * strConnection);
  427. extern void icmpOpen(void);
  428. extern void icmpClose(void);
  429. extern void icmpPing(struct in_addr to);
  430. extern void icmpSourcePing(struct in_addr to, const icp_common_t *, const char *url);
  431. extern void icmpDomainPing(struct in_addr to, const char *domain);
  432. extern void *icpCreateMessage(icp_opcode opcode,
  433.     int flags,
  434.     const char *url,
  435.     int reqnum,
  436.     int pad);
  437. extern int icpUdpSend(int, const struct sockaddr_in *, icp_common_t *, log_type, int);
  438. extern PF icpHandleUdp;
  439. extern PF icpUdpSendQueue;
  440. extern PF httpAccept;
  441. #ifdef SQUID_SNMP
  442. extern PF snmpHandleUdp;
  443. extern void snmpInit(void);
  444. extern void snmpConnectionOpen(void);
  445. extern void snmpConnectionShutdown(void);
  446. extern void snmpConnectionClose(void);
  447. extern void snmpDebugOid(int lvl, oid * Name, snint Len);
  448. extern void addr2oid(struct in_addr addr, oid * Dest);
  449. extern struct in_addr *oid2addr(oid * id);
  450. variable_list *snmp_basicFn(variable_list *, snint *);
  451. variable_list *snmp_confFn(variable_list *, snint *);
  452. variable_list *snmp_sysFn(variable_list *, snint *);
  453. variable_list *snmp_prfSysFn(variable_list *, snint *);
  454. variable_list *snmp_prfProtoFn(variable_list *, snint *);
  455. variable_list *snmp_prfPeerFn(variable_list *, snint *);
  456. variable_list *snmp_netIpFn(variable_list *, snint *);
  457. variable_list *snmp_netFqdnFn(variable_list *, snint *);
  458. variable_list *snmp_netDnsFn(variable_list *, snint *);
  459. variable_list *snmp_meshPtblFn(variable_list *, snint *);
  460. variable_list *snmp_meshCtblFn(variable_list *, snint *);
  461. #endif /* SQUID_SNMP */
  462. extern void icpHandleIcpV3(int, struct sockaddr_in, char *, int);
  463. extern int icpCheckUdpHit(StoreEntry *, request_t * request);
  464. extern void icpConnectionsOpen(void);
  465. extern void icpConnectionShutdown(void);
  466. extern void icpConnectionClose(void);
  467. extern int icpSetCacheKey(const cache_key * key);
  468. extern const cache_key *icpGetCacheKey(const char *url, int reqnum);
  469. extern void ipcache_nbgethostbyname(const char *name,
  470.     IPH * handler,
  471.     void *handlerData);
  472. extern EVH ipcache_purgelru;
  473. extern const ipcache_addrs *ipcache_gethostbyname(const char *, int flags);
  474. extern void ipcacheInvalidate(const char *);
  475. extern void ipcacheReleaseInvalid(const char *);
  476. extern void ipcache_init(void);
  477. extern void stat_ipcache_get(StoreEntry *);
  478. extern int ipcacheQueueDrain(void);
  479. extern void ipcacheCycleAddr(const char *name, ipcache_addrs *);
  480. extern void ipcacheMarkBadAddr(const char *name, struct in_addr);
  481. extern void ipcacheMarkGoodAddr(const char *name, struct in_addr);
  482. extern void ipcacheFreeMemory(void);
  483. extern ipcache_addrs *ipcacheCheckNumeric(const char *name);
  484. extern void ipcache_restart(void);
  485. extern int ipcacheUnregister(const char *name, void *data);
  486. /* MemBuf */
  487. /* init with specific sizes */
  488. extern void memBufInit(MemBuf * mb, mb_size_t szInit, mb_size_t szMax);
  489. /* init with defaults */
  490. extern void memBufDefInit(MemBuf * mb);
  491. /* cleans mb; last function to call if you do not give .buf away */
  492. extern void memBufClean(MemBuf * mb);
  493. /* resets mb preserving (or initializing if needed) memory buffer */
  494. extern void memBufReset(MemBuf * mb);
  495. /* unfirtunate hack to test if the buffer has been Init()ialized */
  496. extern int memBufIsNull(MemBuf * mb);
  497. /* calls memcpy, appends exactly size bytes, extends buffer if needed */
  498. extern void memBufAppend(MemBuf * mb, const char *buf, mb_size_t size);
  499. /* calls snprintf, extends buffer if needed */
  500. #if STDC_HEADERS
  501. extern void memBufPrintf(MemBuf * mb, const char *fmt,...);
  502. #else
  503. extern void memBufPrintf();
  504. #endif
  505. /* vprintf for other printf()'s to use */
  506. extern void memBufVPrintf(MemBuf * mb, const char *fmt, va_list ap);
  507. /* returns free() function to be used, _freezes_ the object! */
  508. extern FREE *memBufFreeFunc(MemBuf * mb);
  509. /* puts report on MemBuf _module_ usage into mb */
  510. extern void memBufReport(MemBuf * mb);
  511. extern char *mime_get_header(const char *mime, const char *header);
  512. extern char *mime_get_header_field(const char *mime, const char *name, const char *prefix);
  513. extern size_t headersEnd(const char *, size_t);
  514. extern const char *mime_get_auth(const char *hdr, const char *auth_scheme, const char **auth_field);
  515. extern void mimeInit(char *filename);
  516. extern void mimeFreeMemory(void);
  517. extern char *mimeGetContentEncoding(const char *fn);
  518. extern char *mimeGetContentType(const char *fn);
  519. extern char *mimeGetIcon(const char *fn);
  520. extern char *mimeGetIconURL(const char *fn);
  521. extern char mimeGetTransferMode(const char *fn);
  522. extern int mimeGetDownloadOption(const char *fn);
  523. extern int mimeGetViewOption(const char *fn);
  524. extern int mcastSetTtl(int, int);
  525. extern IPH mcastJoinGroups;
  526. /* Labels for hierachical log file */
  527. /* put them all here for easier reference when writing a logfile analyzer */
  528. extern peer *getFirstPeer(void);
  529. extern peer *getFirstUpParent(request_t *);
  530. extern peer *getNextPeer(peer *);
  531. extern peer *getSingleParent(request_t *);
  532. extern int neighborsCount(request_t *);
  533. extern int neighborsUdpPing(request_t *,
  534.     StoreEntry *,
  535.     IRCB * callback,
  536.     void *data,
  537.     int *exprep,
  538.     int *timeout);
  539. extern void neighborAddAcl(const char *, const char *);
  540. extern void neighborsUdpAck(const cache_key *, icp_common_t *, const struct sockaddr_in *);
  541. extern void neighborAdd(const char *, const char *, int, int, int, int, int);
  542. extern void neighbors_open(int);
  543. extern peer *peerFindByName(const char *);
  544. extern peer *peerFindByNameAndPort(const char *, unsigned short);
  545. extern peer *getDefaultParent(request_t * request);
  546. extern peer *getRoundRobinParent(request_t * request);
  547. extern peer *getAnyParent(request_t * request);
  548. extern lookup_t peerDigestLookup(peer * p, request_t * request, StoreEntry * entry);
  549. extern peer *neighborsDigestSelect(request_t * request, StoreEntry * entry);
  550. extern void peerNoteDigestLookup(request_t * request, peer * p, lookup_t lookup);
  551. extern void peerNoteDigestGone(peer * p);
  552. extern int neighborUp(const peer * e);
  553. extern CBDUNL peerDestroy;
  554. extern char *neighborTypeStr(const peer * e);
  555. extern peer_t neighborType(const peer *, const request_t *);
  556. extern void peerCheckConnectStart(peer *);
  557. extern void dump_peer_options(StoreEntry *, peer *);
  558. extern int peerHTTPOkay(const peer *, request_t *);
  559. extern peer *whichPeer(const struct sockaddr_in *from);
  560. #if USE_HTCP
  561. extern void neighborsHtcpReply(const cache_key *, htcpReplyData *, const struct sockaddr_in *);
  562. #endif
  563. extern void netdbInit(void);
  564. extern void netdbHandlePingReply(const struct sockaddr_in *from, int hops, int rtt);
  565. extern void netdbPingSite(const char *hostname);
  566. extern void netdbInit(void);
  567. extern void netdbDump(StoreEntry *);
  568. extern int netdbHops(struct in_addr);
  569. extern void netdbFreeMemory(void);
  570. extern int netdbHostHops(const char *host);
  571. extern int netdbHostRtt(const char *host);
  572. extern int netdbHostPeerRtt(const char *host, peer * peer);
  573. extern void netdbUpdatePeer(request_t *, peer * e, int rtt, int hops);
  574. extern void netdbDeleteAddrNetwork(struct in_addr addr);
  575. extern int netdbHostPeerRtt(const char *host, peer * peer);
  576. extern void netdbBinaryExchange(StoreEntry *);
  577. extern EVH netdbExchangeStart;
  578. extern void netdbExchangeUpdatePeer(struct in_addr, peer *, double, double);
  579. extern peer *netdbClosestParent(request_t *);
  580. extern void netdbHostData(const char *host, int *samp, int *rtt, int *hops);
  581. extern void cachemgrStart(int fd, request_t * request, StoreEntry * entry);
  582. extern void cachemgrRegister(const char *, const char *, OBJH *, int, int);
  583. extern void cachemgrInit(void);
  584. extern void peerSelect(request_t *, StoreEntry *, PSC *, void *data);
  585. extern void peerSelectInit(void);
  586. /* peer_digest.c */
  587. extern PeerDigest *peerDigestCreate(peer * p);
  588. extern void peerDigestNeeded(PeerDigest * pd);
  589. extern void peerDigestNotePeerGone(PeerDigest * pd);
  590. extern void peerDigestStatsReport(const PeerDigest * pd, StoreEntry * e);
  591. /* forward.c */
  592. extern void fwdStart(int, StoreEntry *, request_t *, struct in_addr, struct in_addr);
  593. extern DEFER fwdCheckDeferRead;
  594. extern void fwdFail(FwdState *, ErrorState *);
  595. extern void fwdUnregister(int fd, FwdState *);
  596. extern void fwdComplete(FwdState * fwdState);
  597. extern void fwdInit(void);
  598. extern void urnStart(request_t *, StoreEntry *);
  599. extern void redirectStart(clientHttpRequest *, RH *, void *);
  600. extern void redirectInit(void);
  601. extern void redirectShutdown(void);
  602. extern void authenticateStart(acl_proxy_auth_user *, RH *, void *);
  603. extern void authenticateInit(void);
  604. extern void authenticateShutdown(void);
  605. extern void refreshAddToList(const char *, int, time_t, int, time_t);
  606. extern int refreshIsCachable(const StoreEntry *);
  607. extern int refreshCheckHTTP(const StoreEntry *, request_t *);
  608. extern int refreshCheckICP(const StoreEntry *, request_t *);
  609. extern int refreshCheckDigest(const StoreEntry *, time_t delta);
  610. extern time_t getMaxAge(const char *url);
  611. extern void refreshInit(void);
  612. extern void serverConnectionsClose(void);
  613. extern void shut_down(int);
  614. extern void start_announce(void *unused);
  615. extern void sslStart(int fd, const char *, request_t *, size_t * sz);
  616. extern void waisStart(FwdState *);
  617. /* ident.c */
  618. #if USE_IDENT
  619. extern void identStart(struct sockaddr_in *me, struct sockaddr_in *peer, IDCB * callback, void *cbdata);
  620. extern void identInit(void);
  621. #endif
  622. extern void statInit(void);
  623. extern void statFreeMemory(void);
  624. extern double median_svc_get(int, int);
  625. extern void pconnHistCount(int, int);
  626. extern int stat5minClientRequests(void);
  627. extern double stat5minCPUUsage(void);
  628. extern const char *storeEntryFlags(const StoreEntry *);
  629. extern double statRequestHitRatio(int minutes);
  630. extern double statByteHitRatio(int minutes);
  631. /* StatHist */
  632. extern void statHistClean(StatHist * H);
  633. extern void statHistCount(StatHist * H, double val);
  634. extern void statHistCopy(StatHist * Dest, const StatHist * Orig);
  635. extern void statHistSafeCopy(StatHist * Dest, const StatHist * Orig);
  636. extern double statHistDeltaMedian(const StatHist * A, const StatHist * B);
  637. extern void statHistDump(const StatHist * H, StoreEntry * sentry, StatHistBinDumper bd);
  638. extern void statHistLogInit(StatHist * H, int capacity, double min, double max);
  639. extern void statHistEnumInit(StatHist * H, int last_enum);
  640. extern void statHistIntInit(StatHist * H, int n);
  641. extern StatHistBinDumper statHistEnumDumper;
  642. extern StatHistBinDumper statHistIntDumper;
  643. /* MemMeter */
  644. extern void memMeterSyncHWater(MemMeter * m);
  645. #define memMeterCheckHWater(m) { if ((m).hwater_level < (m).level) memMeterSyncHWater(&(m)); }
  646. #define memMeterInc(m) { (m).level++; memMeterCheckHWater(m); }
  647. #define memMeterDec(m) { (m).level--; }
  648. #define memMeterAdd(m, sz) { (m).level += (sz); memMeterCheckHWater(m); }
  649. #define memMeterDel(m, sz) { (m).level -= (sz); }
  650. /* mem */
  651. extern void memInit(void);
  652. extern void memClean();
  653. extern void memInitModule();
  654. extern void memCleanModule();
  655. extern void memConfigure();
  656. extern void *memAllocate(mem_type);
  657. extern void *memAllocBuf(size_t net_size, size_t * gross_size);
  658. extern CBDUNL memFree;
  659. extern void memFreeBuf(size_t size, void *);
  660. extern void memFree2K(void *);
  661. extern void memFree4K(void *);
  662. extern void memFree8K(void *);
  663. extern void memFreeDISK(void *);
  664. extern int memInUse(mem_type);
  665. extern size_t memTotalAllocated(void);
  666. /* MemPool */
  667. extern MemPool *memPoolCreate(const char *label, size_t obj_size);
  668. extern void memPoolDestroy(MemPool * pool);
  669. extern void *memPoolAlloc(MemPool * pool);
  670. extern void memPoolFree(MemPool * pool, void *obj);
  671. extern int memPoolWasUsed(const MemPool * pool);
  672. extern int memPoolInUseCount(const MemPool * pool);
  673. extern size_t memPoolInUseSize(const MemPool * pool);
  674. extern int memPoolUsedCount(const MemPool * pool);
  675. extern void memPoolReport(const MemPool * pool, StoreEntry * e);
  676. /* Mem */
  677. extern void memReport(StoreEntry * e);
  678. extern int stmemFreeDataUpto(mem_hdr *, int);
  679. extern void stmemAppend(mem_hdr *, const char *, int);
  680. extern ssize_t stmemCopy(const mem_hdr *, off_t, char *, size_t);
  681. extern void stmemFree(mem_hdr *);
  682. extern void stmemFreeData(mem_hdr *);
  683. /* ----------------------------------------------------------------- */
  684. /*
  685.  * store.c
  686.  */
  687. extern StoreEntry *new_StoreEntry(int, const char *, const char *);
  688. extern StoreEntry *storeGet(const cache_key *);
  689. extern StoreEntry *storeGetPublic(const char *uri, const method_t method);
  690. extern StoreEntry *storeCreateEntry(const char *, const char *, request_flags, method_t);
  691. extern void storeSetPublicKey(StoreEntry *);
  692. extern void storeComplete(StoreEntry *);
  693. extern void storeInit(void);
  694. extern int storeClientWaiting(const StoreEntry *);
  695. extern void storeAbort(StoreEntry *);
  696. extern void storeAppend(StoreEntry *, const char *, int);
  697. extern void storeLockObject(StoreEntry *);
  698. extern void storeSwapInStart(StoreEntry *, SIH *, void *data);
  699. extern void storeRelease(StoreEntry *);
  700. extern int storeUnlockObject(StoreEntry *);
  701. extern int storeUnregister(StoreEntry *, void *);
  702. extern void storeClientCopy(StoreEntry * e,
  703.     off_t seen_offset,
  704.     off_t copy_offset,
  705.     size_t size,
  706.     char *buf,
  707.     STCB * callback,
  708.     void *data);
  709. extern int storePendingNClients(const StoreEntry *);
  710. extern EVH storeMaintainSwapSpace;
  711. extern void storeExpireNow(StoreEntry *);
  712. extern void storeReleaseRequest(StoreEntry *);
  713. extern off_t storeLowestMemReaderOffset(const StoreEntry *);
  714. extern void storeConfigure(void);
  715. extern void storeNegativeCache(StoreEntry *);
  716. extern void storeFreeMemory(void);
  717. extern int expiresMoreThan(time_t, time_t);
  718. extern int storeClientCopyPending(StoreEntry *, void *);
  719. extern void InvokeHandlers(StoreEntry *);
  720. extern int storeEntryValidToSend(StoreEntry *);
  721. extern void storeTimestampsSet(StoreEntry *);
  722. extern time_t storeExpiredReferenceAge(void);
  723. extern void storeRegisterAbort(StoreEntry * e, STABH * cb, void *);
  724. extern void storeUnregisterAbort(StoreEntry * e);
  725. extern void storeMemObjectDump(MemObject * mem);
  726. extern void storeEntryDump(StoreEntry * e, int debug_lvl);
  727. extern const char *storeUrl(const StoreEntry *);
  728. extern void storeCreateMemObject(StoreEntry *, const char *, const char *);
  729. extern void storeCopyNotModifiedReplyHeaders(MemObject * O, MemObject * N);
  730. extern void storeBuffer(StoreEntry *);
  731. extern void storeBufferFlush(StoreEntry *);
  732. extern void storeHashInsert(StoreEntry * e, const cache_key *);
  733. extern void storeSetMemStatus(StoreEntry * e, int);
  734. #if STDC_HEADERS
  735. extern void storeAppendPrintf(StoreEntry *, const char *,...);
  736. #else
  737. extern void storeAppendPrintf();
  738. #endif
  739. extern void storeAppendVPrintf(StoreEntry *, const char *, va_list ap);
  740. extern int storeCheckCachable(StoreEntry * e);
  741. extern void storeUnlinkFileno(int fileno);
  742. extern void storeSetPrivateKey(StoreEntry *);
  743. extern int objectLen(const StoreEntry * e);
  744. extern int contentLen(const StoreEntry * e);
  745. extern HttpReply *storeEntryReply(StoreEntry *);
  746. extern int storeTooManyDiskFilesOpen(void);
  747. extern void storeEntryReset(StoreEntry *);
  748. /*
  749.  * store_log.c
  750.  */
  751. extern void storeLog(int tag, const StoreEntry * e);
  752. extern void storeLogRotate(void);
  753. extern void storeLogClose(void);
  754. extern void storeLogOpen(void);
  755. /*
  756.  * store_key_*.c
  757.  */
  758. extern const cache_key *storeKeyDup(const cache_key *);
  759. extern cache_key *storeKeyCopy(cache_key *, const cache_key *);
  760. extern void storeKeyFree(const cache_key *);
  761. extern const cache_key *storeKeyScan(const char *);
  762. extern const char *storeKeyText(const cache_key *);
  763. extern const cache_key *storeKeyPublic(const char *, const method_t);
  764. extern const cache_key *storeKeyPublicOld(const char *, const method_t);
  765. extern const cache_key *storeKeyPrivate(const char *, method_t, int);
  766. extern int storeKeyHashBuckets(int);
  767. extern int storeKeyNull(const cache_key *);
  768. extern void storeKeyInit(void);
  769. extern HASHHASH storeKeyHashHash;
  770. extern HASHCMP storeKeyHashCmp;
  771. /*
  772.  * store_clean.c
  773.  */
  774. extern EVH storeDirClean;
  775. /* store_digest.c */
  776. extern void storeDigestInit();
  777. extern void storeDigestNoteStoreReady();
  778. extern void storeDigestScheduleRebuild();
  779. extern void storeDigestDel(const StoreEntry * entry);
  780. extern void storeDigestReport();
  781. /*
  782.  * store_dir.c
  783.  */
  784. extern char *storeSwapFullPath(int, char *);
  785. extern char *storeSwapSubSubDir(int, char *);
  786. extern int storeVerifySwapDirs(void);
  787. extern const char *storeSwapPath(int);
  788. extern int storeDirMapBitTest(int fn);
  789. extern void storeDirMapBitSet(int fn);
  790. extern void storeDirMapBitReset(int fn);
  791. extern int storeDirMapAllocate(void);
  792. extern char *storeSwapDir(int);
  793. extern FILE *storeDirOpenTmpSwapLog(int dirn, int *clean, int *zero);
  794. extern void storeDirCloseTmpSwapLog(int dirn);
  795. extern void storeDirOpenSwapLogs(void);
  796. extern void storeDirCloseSwapLogs(void);
  797. extern char *storeDirSwapLogFile(int, const char *);
  798. extern void storeDirSwapLog(const StoreEntry *, int op);
  799. extern int storeDirNumber(int fileno);
  800. extern void storeDirUpdateSwapSize(int fn, size_t size, int sign);
  801. extern int storeDirProperFileno(int dirn, int fn);
  802. extern void storeCreateSwapDirectories(void);
  803. extern int storeVerifyCacheDirs(void);
  804. extern int storeDirWriteCleanLogs(int reopen);
  805. extern int storeDirValidFileno(int fn);
  806. extern int storeFilenoBelongsHere(int, int, int, int);
  807. extern OBJH storeDirStats;
  808. extern int storeDirMapBitsInUse(void);
  809. extern void storeDirConfigure(void);
  810. extern void storeDirDiskFull(int fn);
  811. /*
  812.  * store_swapmeta.c
  813.  */
  814. extern char *storeSwapMetaPack(tlv * tlv_list, int *length);
  815. extern tlv *storeSwapMetaBuild(StoreEntry * e);
  816. extern tlv *storeSwapMetaUnpack(const char *buf, int *hdrlen);
  817. extern void storeSwapTLVFree(tlv * n);
  818. /*
  819.  * store_rebuild.c
  820.  */
  821. extern void storeDoRebuildFromSwapFiles(void *data);
  822. extern void storeValidate(StoreEntry *, STVLDCB *, void *, void *);
  823. extern void storeRebuildStart(void);
  824. /*
  825.  * store_swapin.c
  826.  */
  827. extern void storeSwapInStart(StoreEntry * e, SIH * callback, void *callback_data);
  828. extern void storeSwapInValidateComplete(void *data, int retcode, int errcode);
  829. extern void storeSwapInFileOpened(void *data, int fd, int errcode);
  830. /*
  831.  * store_swapout.c
  832.  */
  833. extern void storeCheckSwapOut(StoreEntry * e);
  834. extern void storeSwapOutFileClose(StoreEntry * e);
  835. extern int storeSwapOutWriteQueued(MemObject * mem);
  836. extern int storeSwapOutAble(const StoreEntry * e);
  837. /*
  838.  * store_client.c
  839.  */
  840. extern store_client *storeClientListSearch(const MemObject * mem, void *data);
  841. extern void storeClientListAdd(StoreEntry * e, void *data);
  842. extern void storeClientCopy(StoreEntry *, off_t, off_t, size_t, char *, STCB *, void *);
  843. extern int storeClientCopyPending(StoreEntry * e, void *data);
  844. extern int storeUnregister(StoreEntry * e, void *data);
  845. extern off_t storeLowestMemReaderOffset(const StoreEntry * entry);
  846. extern void InvokeHandlers(StoreEntry * e);
  847. extern int storePendingNClients(const StoreEntry * e);
  848. extern const char *getMyHostname(void);
  849. extern const char *uniqueHostname(void);
  850. extern void safeunlink(const char *path, int quiet);
  851. extern void death(int sig);
  852. extern void fatal(const char *message);
  853. #if STDC_HEADERS
  854. extern void fatalf(const char *fmt,...);
  855. #else
  856. extern void fatalf();
  857. #endif
  858. extern void fatal_dump(const char *message);
  859. extern void sigusr2_handle(int sig);
  860. extern void sig_child(int sig);
  861. extern void leave_suid(void);
  862. extern void enter_suid(void);
  863. extern void no_suid(void);
  864. extern void writePidFile(void);
  865. extern void setSocketShutdownLifetimes(int);
  866. extern void setMaxFD(void);
  867. extern time_t getCurrentTime(void);
  868. extern int percent(int, int);
  869. extern double dpercent(double, double);
  870. extern void squid_signal(int sig, SIGHDLR *, int flags);
  871. extern pid_t readPidFile(void);
  872. extern struct in_addr inaddrFromHostent(const struct hostent *hp);
  873. extern int intAverage(int, int, int, int);
  874. extern double doubleAverage(double, double, int, int);
  875. extern void debug_trap(const char *);
  876. extern void logsFlush(void);
  877. extern char *checkNullString(char *p);
  878. extern void squid_getrusage(struct rusage *r);
  879. extern double rusage_cputime(struct rusage *r);
  880. extern int rusage_maxrss(struct rusage *r);
  881. extern int rusage_pagefaults(struct rusage *r);
  882. extern void releaseServerSockets(void);
  883. extern void PrintRusage(void);
  884. extern void dumpMallocStats(void);
  885. extern void pumpInit(int fd, request_t * r, char *uri);
  886. extern void pumpStart(int, FwdState *, CWCB * callback, void *);
  887. extern int pumpMethod(method_t method);
  888. extern int pumpRestart(request_t *);
  889. extern void unlinkdInit(void);
  890. extern void unlinkdClose(void);
  891. extern void unlinkdUnlink(const char *);
  892. extern char *url_convert_hex(char *org_url, int allocate);
  893. extern char *url_escape(const char *url);
  894. extern protocol_t urlParseProtocol(const char *);
  895. extern method_t urlParseMethod(const char *);
  896. extern void urlInitialize(void);
  897. extern request_t *urlParse(method_t, char *);
  898. extern const char *urlCanonical(request_t *);
  899. extern char *urlRInternal(const char *host, u_short port, const char *dir, const char *name);
  900. extern char *urlInternal(const char *dir, const char *name);
  901. extern int matchDomainName(const char *d, const char *h);
  902. extern int urlCheckRequest(const request_t *);
  903. extern int urlDefaultPort(protocol_t p);
  904. extern char *urlCanonicalClean(const request_t *);
  905. extern char *urlHostname(const char *url);
  906. extern void useragentOpenLog(void);
  907. extern void useragentRotateLog(void);
  908. extern void logUserAgent(const char *, const char *);
  909. extern peer_t parseNeighborType(const char *s);
  910. extern void errorInitialize(void);
  911. extern void errorClean(void);
  912. extern HttpReply *errorBuildReply(ErrorState * err);
  913. extern void errorSend(int fd, ErrorState *);
  914. extern void errorAppendEntry(StoreEntry *, ErrorState *);
  915. extern void errorStateFree(ErrorState * err);
  916. extern int errorReservePageId(const char *page_name);
  917. extern ErrorState *errorCon(err_type type, http_status);
  918. extern void pconnPush(int, const char *host, u_short port);
  919. extern int pconnPop(const char *host, u_short port);
  920. extern void pconnInit(void);
  921. extern int asnMatchIp(void *, struct in_addr);
  922. extern void asnInit(void);
  923. extern void asnFreeMemory(void);
  924. /* tools.c */
  925. extern void dlinkAdd(void *data, dlink_node *, dlink_list *);
  926. extern void dlinkAddTail(void *data, dlink_node *, dlink_list *);
  927. extern void dlinkDelete(dlink_node * m, dlink_list * list);
  928. extern void kb_incr(kb_t *, size_t);
  929. extern double gb_to_double(const gb_t *);
  930. extern const char *gb_to_str(const gb_t *);
  931. extern void gb_flush(gb_t *); /* internal, do not use this */
  932. extern int stringHasWhitespace(const char *);
  933. #if USE_HTCP
  934. extern void htcpInit(void);
  935. extern void htcpQuery(StoreEntry * e, request_t * req, peer * p);
  936. extern void htcpSocketShutdown(void);
  937. extern void htcpSocketClose(void);
  938. #endif
  939. /* String */
  940. #define strLen(s)     ((const int)(s).len)
  941. #define strBuf(s)     ((const char*)(s).buf)
  942. #define strChr(s,ch)  ((const char*)strchr(strBuf(s), (ch)))
  943. #define strRChr(s,ch) ((const char*)strrchr(strBuf(s), (ch)))
  944. #define strStr(s,str) ((const char*)strstr(strBuf(s), (str)))
  945. #define strCmp(s,str)     strcmp(strBuf(s), (str))
  946. #define strNCmp(s,str,n)     strncmp(strBuf(s), (str), (n))
  947. #define strCaseCmp(s,str) strcasecmp(strBuf(s), (str))
  948. #define strNCaseCmp(s,str,n) strncasecmp(strBuf(s), (str), (n))
  949. #define strSet(s,ptr,ch) (s).buf[ptr-(s).buf] = (ch)
  950. #define strCut(s,pos) (((s).len = pos) , ((s).buf[pos] = ''))
  951. #define strCutPtr(s,ptr) (((s).len = (ptr)-(s).buf) , ((s).buf[(s).len] = ''))
  952. /* #define strCat(s,str)  stringAppend(&(s), (str), strlen(str)+1) */
  953. extern void stringInit(String * s, const char *str);
  954. extern void stringLimitInit(String * s, const char *str, int len);
  955. extern String stringDup(const String * s);
  956. extern void stringClean(String * s);
  957. extern void stringReset(String * s, const char *str);
  958. extern void stringAppend(String * s, const char *buf, int len);
  959. /* extern void stringAppendf(String *s, const char *fmt, ...); */
  960. /*
  961.  * ipc.c
  962.  */
  963. extern int ipcCreate(int type,
  964.     const char *prog,
  965.     char *const args[],
  966.     const char *name,
  967.     int *rfd,
  968.     int *wfd);
  969. /* CacheDigest */
  970. extern CacheDigest *cacheDigestCreate(int capacity, int bpe);
  971. extern void cacheDigestDestroy(CacheDigest * cd);
  972. extern CacheDigest *cacheDigestClone(const CacheDigest * cd);
  973. extern void cacheDigestClear(CacheDigest * cd);
  974. extern void cacheDigestChangeCap(CacheDigest * cd, int new_cap);
  975. extern int cacheDigestTest(const CacheDigest * cd, const cache_key * key);
  976. extern void cacheDigestAdd(CacheDigest * cd, const cache_key * key);
  977. extern void cacheDigestDel(CacheDigest * cd, const cache_key * key);
  978. extern size_t cacheDigestCalcMaskSize(int cap, int bpe);
  979. extern int cacheDigestBitUtil(const CacheDigest * cd);
  980. extern void cacheDigestGuessStatsUpdate(cd_guess_stats * stats, int real_hit, int guess_hit);
  981. extern void cacheDigestGuessStatsReport(const cd_guess_stats * stats, StoreEntry * sentry, const char *label);
  982. extern void cacheDigestReport(CacheDigest * cd, const char *label, StoreEntry * e);
  983. extern void internalStart(request_t *, StoreEntry *);
  984. extern int internalCheck(const char *urlpath);
  985. extern int internalStaticCheck(const char *urlpath);
  986. extern char *internalLocalUri(const char *dir, const char *name);
  987. extern char *internalRemoteUri(const char *, u_short, const char *, const char *);
  988. extern const char *internalHostname(void);
  989. #if USE_CARP
  990. extern void carpInit(void);
  991. extern peer *carpSelectParent(request_t *);
  992. #endif
  993. #if DELAY_POOLS
  994. extern void delayPoolsInit(void);
  995. extern void delayInitDelayData(unsigned short pools);
  996. extern void delayFreeDelayData();
  997. extern void delayCreateDelayPool(unsigned short pool, u_char class);
  998. extern void delayInitDelayPool(unsigned short pool, u_char class, delaySpecSet * rates);
  999. extern void delayFreeDelayPool(unsigned short pool);
  1000. extern void delayPoolsReconfigure();
  1001. extern void delaySetNoDelay(int fd);
  1002. extern void delayClearNoDelay(int fd);
  1003. extern int delayIsNoDelay(int fd);
  1004. extern delay_id delayClient(request_t *);
  1005. extern EVH delayPoolsUpdate;
  1006. extern int delayBytesWanted(delay_id d, int min, int max);
  1007. extern void delayBytesIn(delay_id, int qty);
  1008. extern int delayMostBytesWanted(const MemObject * mem, int max);
  1009. extern delay_id delayMostBytesAllowed(const MemObject * mem);
  1010. extern void delaySetStoreClient(StoreEntry * e, void *data, delay_id delay_id);
  1011. #endif
  1012. /* helper.c */
  1013. extern void helperOpenServers(helper * hlp);
  1014. extern void helperSubmit(helper * hlp, const char *buf, HLPCB * callback, void *data);
  1015. extern void helperStats(StoreEntry * sentry, helper * hlp);
  1016. extern void helperShutdown(helper * hlp);
  1017. extern helper *helperCreate(const char *);
  1018. extern void helperFree(helper *);
  1019. #if USE_LEAKFINDER
  1020. extern void leakInit(void);
  1021. extern void *leakAddFL(void *, const char *, int);
  1022. extern void *leakTouchFL(void *, const char *, int);
  1023. extern void *leakFree(void *);
  1024. #endif
  1025. /*
  1026.  * prototypes for system functions missing from system includes
  1027.  */
  1028. #ifdef _SQUID_SOLARIS_
  1029. extern int getrusage(int, struct rusage *);
  1030. extern int getpagesize(void);
  1031. extern int gethostname(char *, int);
  1032. #endif