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