home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Spezial / SPEZIAL2_97.zip / SPEZIAL2_97.iso / ANWEND / ONLINE / IJB20OS2 / SOURCE / JCC.H < prev    next >
C/C++ Source or Header  |  1997-09-16  |  5KB  |  257 lines

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