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

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: squid.h,v 1.185 1999/01/19 17:41:04 wessels Exp $
  3.  *
  4.  * AUTHOR: Duane Wessels
  5.  *
  6.  * SQUID Internet Object Cache  http://squid.nlanr.net/Squid/
  7.  * ----------------------------------------------------------
  8.  *
  9.  *  Squid is the result of efforts by numerous individuals from the
  10.  *  Internet community.  Development is led by Duane Wessels of the
  11.  *  National Laboratory for Applied Network Research and funded by the
  12.  *  National Science Foundation.  Squid is Copyrighted (C) 1998 by
  13.  *  Duane Wessels and the University of California San Diego.  Please
  14.  *  see the COPYRIGHT file for full details.  Squid incorporates
  15.  *  software developed and/or copyrighted by other sources.  Please see
  16.  *  the CREDITS file for full details.
  17.  *
  18.  *  This program is free software; you can redistribute it and/or modify
  19.  *  it under the terms of the GNU General Public License as published by
  20.  *  the Free Software Foundation; either version 2 of the License, or
  21.  *  (at your option) any later version.
  22.  *  
  23.  *  This program is distributed in the hope that it will be useful,
  24.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  25.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  26.  *  GNU General Public License for more details.
  27.  *  
  28.  *  You should have received a copy of the GNU General Public License
  29.  *  along with this program; if not, write to the Free Software
  30.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
  31.  *
  32.  */
  33. #ifndef SQUID_H
  34. #define SQUID_H
  35. #include "config.h"
  36. /*
  37.  * On some systems, FD_SETSIZE is set to something lower than the
  38.  * actual number of files which can be opened.  IRIX is one case,
  39.  * NetBSD is another.  So here we increase FD_SETSIZE to our
  40.  * configure-discovered maximum *before* any system includes.
  41.  */
  42. #define CHANGE_FD_SETSIZE 1
  43. /* Cannot increase FD_SETSIZE on Linux */
  44. #if defined(_SQUID_LINUX_)
  45. #undef CHANGE_FD_SETSIZE
  46. #define CHANGE_FD_SETSIZE 0
  47. #endif
  48. /* Cannot increase FD_SETSIZE on FreeBSD before 2.2.0, causes select(2)
  49.  * to return EINVAL. */
  50. /* Marian Durkovic <marian@svf.stuba.sk> */
  51. /* Peter Wemm <peter@spinner.DIALix.COM> */
  52. #if defined(_SQUID_FREEBSD_)
  53. #include <osreldate.h>
  54. #if __FreeBSD_version < 220000
  55. #undef CHANGE_FD_SETSIZE
  56. #define CHANGE_FD_SETSIZE 0
  57. #endif
  58. #endif
  59. /* Increase FD_SETSIZE if SQUID_MAXFD is bigger */
  60. #if CHANGE_FD_SETSIZE && SQUID_MAXFD > DEFAULT_FD_SETSIZE
  61. #define FD_SETSIZE SQUID_MAXFD
  62. #endif
  63. #if PURIFY
  64. #define assert(EX) ((void)0)
  65. #elif STDC_HEADERS
  66. #define assert(EX)  ((EX)?((void)0):xassert( # EX , __FILE__, __LINE__))
  67. #else
  68. #define assert(EX)  ((EX)?((void)0):xassert("EX", __FILE__, __LINE__))
  69. #endif
  70. #if HAVE_UNISTD_H
  71. #include <unistd.h>
  72. #endif
  73. #if HAVE_STDLIB_H
  74. #include <stdlib.h>
  75. #endif
  76. #if HAVE_STDIO_H
  77. #include <stdio.h>
  78. #endif
  79. #if HAVE_SYS_TYPES_H
  80. #include <sys/types.h>
  81. #endif
  82. #if HAVE_CTYPE_H
  83. #include <ctype.h>
  84. #endif
  85. #if HAVE_ERRNO_H
  86. #include <errno.h>
  87. #endif
  88. #if HAVE_FCNTL_H
  89. #include <fcntl.h>
  90. #endif
  91. #if HAVE_GRP_H
  92. #include <grp.h>
  93. #endif
  94. #if HAVE_GNUMALLOC_H
  95. #include <gnumalloc.h>
  96. #elif HAVE_MALLOC_H && !defined(_SQUID_FREEBSD_) && !defined(_SQUID_NEXT_)
  97. #include <malloc.h>
  98. #endif
  99. #if HAVE_MEMORY_H
  100. #include <memory.h>
  101. #endif
  102. #if HAVE_NETDB_H && !defined(_SQUID_NETDB_H_) /* protect NEXTSTEP */
  103. #define _SQUID_NETDB_H_
  104. #ifdef _SQUID_NEXT_
  105. #include <netinet/in_systm.h>
  106. #endif
  107. #include <netdb.h>
  108. #endif
  109. #if HAVE_PWD_H
  110. #include <pwd.h>
  111. #endif
  112. #if HAVE_SIGNAL_H
  113. #include <signal.h>
  114. #endif
  115. #if HAVE_TIME_H
  116. #include <time.h>
  117. #endif
  118. #if HAVE_SYS_PARAM_H
  119. #include <sys/param.h>
  120. #endif
  121. #if HAVE_SYS_TIME_H
  122. #include <sys/time.h>
  123. #endif
  124. #if HAVE_SYS_RESOURCE_H
  125. #include <sys/resource.h> /* needs sys/time.h above it */
  126. #endif
  127. #if HAVE_SYS_SOCKET_H
  128. #include <sys/socket.h>
  129. #endif
  130. #if HAVE_NETINET_IN_H
  131. #include <netinet/in.h>
  132. #endif
  133. #if HAVE_ARPA_INET_H
  134. #include <arpa/inet.h>
  135. #endif
  136. #if HAVE_SYS_STAT_H
  137. #include <sys/stat.h>
  138. #endif
  139. #if HAVE_SYS_UN_H
  140. #include <sys/un.h>
  141. #endif
  142. #if HAVE_SYS_WAIT_H
  143. #include <sys/wait.h>
  144. #endif
  145. #if HAVE_LIBC_H
  146. #include <libc.h>
  147. #endif
  148. #ifdef HAVE_SYS_SYSCALL_H
  149. #include <sys/syscall.h>
  150. #endif
  151. #ifdef HAVE_STRING_H
  152. #include <string.h>
  153. #endif
  154. #ifdef HAVE_STRINGS_H
  155. #include <strings.h>
  156. #endif
  157. #if HAVE_BSTRING_H
  158. #include <bstring.h>
  159. #endif
  160. #ifdef HAVE_CRYPT_H
  161. #include <crypt.h>
  162. #endif
  163. #if HAVE_SYS_SELECT_H
  164. #include <sys/select.h>
  165. #endif
  166. #if HAVE_GETOPT_H
  167. #include <getopt.h>
  168. #endif
  169. #if HAVE_DIRENT_H
  170. #include <dirent.h>
  171. #define NAMLEN(dirent) strlen((dirent)->d_name)
  172. #else /* HAVE_DIRENT_H */
  173. #define dirent direct
  174. #define NAMLEN(dirent) (dirent)->d_namlen
  175. #if HAVE_SYS_NDIR_H
  176. #include <sys/ndir.h>
  177. #endif /* HAVE_SYS_NDIR_H */
  178. #if HAVE_SYS_DIR_H
  179. #include <sys/dir.h>
  180. #endif /* HAVE_SYS_DIR_H */
  181. #if HAVE_NDIR_H
  182. #include <ndir.h>
  183. #endif /* HAVE_NDIR_H */
  184. #endif /* HAVE_DIRENT_H */
  185. #if defined(__QNX__)
  186. #include <unix.h>
  187. #endif
  188. /*
  189.  * We require poll.h before using poll().  If the symbols used
  190.  * by poll() are defined elsewhere, we will need to make this
  191.  * a more sophisticated test.
  192.  *  -- Oskar Pearson <oskar@is.co.za>
  193.  *  -- Stewart Forster <slf@connect.com.au>
  194.  */
  195. #if HAVE_POLL
  196. #if HAVE_POLL_H
  197. #include <poll.h>
  198. #else /* HAVE_POLL_H */
  199. #undef HAVE_POLL
  200. #endif /* HAVE_POLL_H */
  201. #endif /* HAVE_POLL */
  202. #if STDC_HEADERS
  203. #include <stdarg.h>
  204. #else
  205. #include <varargs.h>
  206. #endif
  207. /* Make sure syslog goes after stdarg/varargs */
  208. #ifdef HAVE_SYSLOG_H
  209. #ifdef _SQUID_AIX_
  210. #define _XOPEN_EXTENDED_SOURCE
  211. #endif
  212. #include <syslog.h>
  213. #endif
  214. #if HAVE_MATH_H
  215. #include <math.h>
  216. #endif
  217. #if !defined(MAXHOSTNAMELEN) || (MAXHOSTNAMELEN < 128)
  218. #define SQUIDHOSTNAMELEN 128
  219. #else
  220. #define SQUIDHOSTNAMELEN MAXHOSTNAMELEN
  221. #endif
  222. #define SQUID_MAXPATHLEN 256
  223. #ifndef MAXPATHLEN
  224. #define MAXPATHLEN SQUID_MAXPATHLEN
  225. #endif
  226. #if !HAVE_GETRUSAGE
  227. #if defined(_SQUID_HPUX_)
  228. #define HAVE_GETRUSAGE 1
  229. #define getrusage(a, b)  syscall(SYS_GETRUSAGE, a, b)
  230. #endif
  231. #endif
  232. #if !HAVE_STRUCT_RUSAGE
  233. /*
  234.  * If we don't have getrusage() then we create a fake structure
  235.  * with only the fields Squid cares about.  This just makes the
  236.  * source code cleaner, so we don't need lots of #ifdefs in other
  237.  * places
  238.  */
  239. struct rusage {
  240.     struct timeval ru_stime;
  241.     struct timeval ru_utime;
  242.     int ru_maxrss;
  243.     int ru_majflt;
  244. };
  245. #endif
  246. #if !defined(HAVE_GETPAGESIZE) && defined(_SQUID_HPUX_)
  247. #define HAVE_GETPAGESIZE
  248. #define getpagesize( )   sysconf(_SC_PAGE_SIZE)
  249. #endif
  250. #ifndef BUFSIZ
  251. #define BUFSIZ  4096 /* make reasonable guess */
  252. #endif
  253. #ifndef SA_RESTART
  254. #define SA_RESTART 0
  255. #endif
  256. #ifndef SA_NODEFER
  257. #define SA_NODEFER 0
  258. #endif
  259. #ifndef SA_RESETHAND
  260. #define SA_RESETHAND 0
  261. #endif
  262. #if SA_RESETHAND == 0 && defined(SA_ONESHOT)
  263. #undef SA_RESETHAND
  264. #define SA_RESETHAND SA_ONESHOT
  265. #endif
  266. #if PURIFY
  267. #define LOCAL_ARRAY(type,name,size) 
  268.         static type *local_##name=NULL; 
  269.         type *name = local_##name ? local_##name : 
  270.                 ( local_##name = (type *)xcalloc(size, sizeof(type)) )
  271. #else
  272. #define LOCAL_ARRAY(type,name,size) static type name[size]
  273. #endif
  274. #if CBDATA_DEBUG
  275. #define cbdataAdd(a,b,c) cbdataAddDbg(a,b,c,__FILE__,__LINE__)
  276. #endif
  277. #if USE_LEAKFINDER
  278. #define leakAdd(p) leakAddFL(p,__FILE__,__LINE__)
  279. #define leakTouch(p) leakTouchFL(p,__FILE__,__LINE__)
  280. #else
  281. #define leakAdd(p) p
  282. #define leakTouch(p) p
  283. #define leakFree(p) p
  284. #endif
  285. #if defined(_SQUID_NEXT_) && !defined(S_ISDIR)
  286. #define S_ISDIR(mode) (((mode) & (_S_IFMT)) == (_S_IFDIR))
  287. #endif
  288. #ifdef USE_GNUREGEX
  289. #include "GNUregex.h"
  290. #elif HAVE_REGEX_H
  291. #include <regex.h>
  292. #endif
  293. #if USE_ASYNC_IO
  294. #undef USE_UNLINKD
  295. #else
  296. #define USE_UNLINKD 1
  297. #endif
  298. #include "md5.h"
  299. #include "Stack.h"
  300. /* Needed for poll() on Linux at least */
  301. #if HAVE_POLL
  302. #ifndef POLLRDNORM
  303. #define POLLRDNORM POLLIN
  304. #endif
  305. #ifndef POLLWRNORM
  306. #define POLLWRNORM POLLOUT
  307. #endif
  308. #endif
  309. #ifdef SQUID_SNMP
  310. #include "cache_snmp.h"
  311. #endif
  312. #include "hash.h"
  313. #include "defines.h"
  314. #include "enums.h"
  315. #include "typedefs.h"
  316. #include "structs.h"
  317. #include "protos.h"
  318. #include "globals.h"
  319. #include "util.h"
  320. #include "radix.h"
  321. #if !HAVE_TEMPNAM
  322. #include "tempnam.h"
  323. #endif
  324. #if !HAVE_SNPRINTF
  325. #include "snprintf.h"
  326. #endif
  327. #define XMIN(x,y) ((x)<(y)? (x) : (y))
  328. #define XMAX(a,b) ((a)>(b)? (a) : (b))
  329. /*
  330.  * Squid source files should not call these functions directly
  331.  */
  332. #define malloc +
  333. #define free +
  334. #define calloc +
  335. #define sprintf +
  336. #define strdup +
  337. #if SQUID_SNMP
  338. extern struct snmp_mib_tree *Mib;
  339. #endif
  340. #endif /* SQUID_H */