home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 April / PCWorld_2001-04_cd.bin / Software / TemaCD / junkbust / jcc.h < prev    next >
C/C++ Source or Header  |  1998-10-30  |  7KB  |  286 lines

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