jcc.h
上传用户:qunlip
上传日期:2007-01-04
资源大小:203k
文件大小:6k
源码类别:

代理服务器

开发平台:

Visual C++

  1. /* Written and copyright 1997 Anonymous Coders and Junkbusters Corporation.
  2.  * Distributed under the GNU General Public License; see the README file.
  3.  * This code comes with NO WARRANTY. http://www.junkbusters.com/ht/en/gpl.html
  4.  */
  5. #define GPC 0x0001
  6. #define CON 0x0002
  7. #define IO 0x0004
  8. #define HDR 0x0008
  9. #define LOG 0x0010
  10. #define DEBUG(X) (debug & X)
  11. #define freez(X) if(X) free(X); X = NULL
  12. #define VERSION_MAJOR "2"
  13. #define VERSION_MINOR "0"
  14. #define VERSION_POINT "2"
  15. #define VERSION VERSION_MAJOR "." VERSION_MINOR "." VERSION_POINT
  16. extern int debug;
  17. extern FILE *logfp;
  18. extern char *prog;
  19. extern char *blockfile;
  20. extern char *cookiefile;
  21. extern char *trustfile;
  22. extern char *forwardfile;
  23. extern char *aclfile;
  24. extern char *jarfile;
  25. extern FILE *jar;
  26. extern char *referrer;
  27. extern char *uagent;
  28. extern char *from;
  29. extern struct list       wafer_list[];
  30. extern struct list        xtra_list[];
  31. extern struct list       trust_info[];
  32. extern struct url_spec * trust_list[];
  33. extern int add_forwarded;
  34. struct gateway {
  35. /* generic attributes */
  36.         char *name;
  37.         int (*conn)();
  38.         int   type;
  39. /* domain specific attributes */
  40.         char *gateway_host;
  41.         int   gateway_port;
  42. char *forward_host;
  43. int   forward_port;
  44. };
  45. struct proxy_args {
  46. char *header;
  47. char *invocation;
  48. char *gateways;
  49. char *trailer;
  50. };
  51. struct iob {
  52. char *buf;
  53. char *cur;
  54. char *eod;
  55. };
  56. struct http_request {
  57. char *cmd;
  58. char *gpc;
  59. char *host;
  60. int   port;
  61. char *path;
  62. char *ver;
  63. char *hostport; /* "host[:port]" */
  64. int   ssl;
  65. };
  66. struct list {
  67. char *str;
  68. struct list *last;
  69. struct list *next;
  70. };
  71. int add_to_iob();
  72. #define IOB_PEEK(CSP) ((CSP->iob->cur > CSP->iob->eod) ? (CSP->iob->eod - CSP->iob->cur) : 0)
  73. #define IOB_RESET(CSP) if(CSP->iob->buf) free(CSP->iob->buf); memset(CSP->iob, '', sizeof(CSP->iob));
  74. struct client_state {
  75. int  send_user_cookie;
  76. int  accept_server_cookie;
  77. int  cfd;
  78. int  sfd;
  79. char *ip_addr_str;
  80. long  ip_addr_long;
  81. char *referrer;
  82. struct gateway *gw;
  83. struct http_request http[1];
  84. struct iob iob[1];
  85. struct list headers[1];
  86. struct list cookie_list[1];
  87. char   *x_forwarded;
  88. int active;
  89. /* files associated with this client */
  90. struct file_list *alist;
  91. struct file_list *blist;
  92. struct file_list *clist;
  93. struct file_list *tlist;
  94. struct file_list *flist;
  95. struct client_state *next;
  96. };
  97. extern struct client_state clients[];
  98. extern char *remote_ip_str;
  99. extern long  remote_ip_long;
  100. struct parsers {
  101. char *str;
  102. char  len;
  103. char *(*parser)();
  104. };
  105. struct interceptors {
  106. char *str;
  107. char  len;
  108. char *(*interceptor)();
  109. };
  110. /* this allows the proxy to permit/block access to any host and/or path */
  111. struct url_spec {
  112. char  *spec;
  113. char  *domain;
  114. char  *dbuf;
  115. char **dvec;
  116. int    dcnt;
  117. int    toplevel;
  118. char *path;
  119. int   pathlen;
  120. int   port;
  121. #ifdef REGEX
  122. regex_t *preg;
  123. #endif
  124. };
  125. struct file_list {
  126. void *f; /* this is a pointer to the data structures
  127.   * associated with the file
  128.   */
  129. void (*unloader)();
  130. int active;
  131. char *proxy_args;
  132. struct file_list *next;
  133. };
  134. struct block_spec {
  135. struct url_spec url[1];
  136. int   reject;
  137. struct block_spec *next;
  138. };
  139. struct cookie_spec {
  140. struct url_spec url[1];
  141. int   send_user_cookie;
  142. int   accept_server_cookie;
  143. struct cookie_spec *next;
  144. };
  145. struct forward_spec {
  146. struct url_spec url[1];
  147. int   reject;
  148. struct gateway gw[1];
  149. struct forward_spec *next;
  150. };
  151. #define ACL_PERMIT 1 /* accept connection request */
  152. #define ACL_DENY   2 /* reject connection request */
  153. struct access_control_addr {
  154. unsigned long addr;
  155. unsigned long mask;
  156. unsigned long   port;
  157. };
  158. struct access_control_list {
  159. struct access_control_addr src[1];
  160. struct access_control_addr dst[1];
  161. short action;
  162. struct access_control_list *next;
  163. };
  164. extern struct file_list files[];
  165. extern struct proxy_args proxy_args[];
  166. extern int (*loaders[])();
  167. extern int run_loader();
  168. extern void add_loader(), unload_url(), destroy_list(), *zalloc();
  169. extern int bind_port(), accept_connection(), atoip();
  170. extern int strcmpic(), strncmpic();
  171. #define NLOADERS 8
  172. #define SZ(X) (sizeof(X) / sizeof(*X))
  173. extern char *url_code_map[];
  174. extern char *html_code_map[];
  175. extern char *cookie_code_map[];
  176. extern void fperror(), enlist();
  177. extern char *safe_strerror(), *strsav(), *get_header(), *sed();
  178. extern void parse_http_request();
  179. extern void  free_http_request();
  180. extern int domaincmp(), ssplit();
  181. extern struct url_spec dsplit();
  182. extern int read_header(), connect_to(), main();
  183. extern int read_socket(), write_socket(), getchar_socket(), flush_socket();
  184. extern void close_socket();
  185. extern int block_acl();
  186. /* parsers */
  187. extern char *crumble();
  188. extern char *url_http(), *url_https();
  189. extern char *client_referrer(), *client_uagent(), *client_ua();
  190. extern char *client_x_forwarded(), *client_from(), *client_send_cookie();
  191. extern char *server_set_cookie();
  192. /* adders */
  193. extern void client_cookie_adder(), client_xtra_adder();
  194. extern void client_x_forwarded_adder();
  195. /* interceptors */
  196. extern char *show_proxy_args();
  197. extern char *ij_blocked_url();
  198. extern char *ij_untrusted_url();
  199. extern int load_blockfile(), load_cookiefile(), load_trustfile(), load_forwardfile(), load_aclfile();
  200. extern void init_proxy_args(), end_proxy_args(), savearg(), sweep();
  201. extern char *url_encode(), *url_decode();
  202. /* filters */
  203. extern char *intercept_url();
  204. extern char *block_url();
  205. extern char *trust_url();
  206. extern struct cookie_spec *cookie_url();
  207. extern struct gateway     *forward_url();
  208. extern struct gateway gateways[], *gw_default;
  209. extern struct parsers url_patterns[];
  210. extern struct parsers client_patterns[];
  211. extern struct parsers server_patterns[];
  212. extern struct interceptors intercept_patterns[];
  213. extern void (*add_client_headers[])();
  214. extern void (*add_server_headers[])();
  215. extern char DEFAULT_USER_AGENT[];
  216. extern int socks4_connect(), direct_connect();
  217. #define SOCKS_4 40 /* original SOCKS 4 protocol */
  218. #define SOCKS_4A 41 /* as modified for hosts w/o external DNS */
  219. #define WHITEBG "<body bgcolor="#ffffff" link="#000078" alink="#ff0022" vlink="#787878">n"
  220. #define BODY "<body bgcolor="#f8f8f0" link="#000078" alink="#ff0022" vlink="#787878">n"
  221. #define BANNER "<strong>Internet J<small>UNK<i><font color="red">BUSTER</font></i></small></strong>"