Adding i.j.b/robots.txt.
[privoxy.git] / cgi.h
diff --git a/cgi.h b/cgi.h
index a495cd7..4f155d6 100644 (file)
--- a/cgi.h
+++ b/cgi.h
@@ -1,6 +1,6 @@
-#ifndef _CGI_H
-#define _CGI_H
-#define CGI_H_VERSION "$Id: cgi.h,v 1.1 2001/06/03 11:04:49 oes Exp $"
+#ifndef CGI_H_INCLUDED
+#define CGI_H_INCLUDED
+#define CGI_H_VERSION "$Id: cgi.h,v 1.14 2001/09/16 11:38:02 jongfoster Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/cgi.h,v $
  *
  * Revisions   :
  *    $Log: cgi.h,v $
- *    Revision 1.1  2001/06/03 11:04:49  oes
- *    Makefile/in
- *
- *    introduced cgi.c
- *
- *    actions.c:
- *
- *    adapted to new enlist_unique arg format
- *
- *    conf loadcfg.c
- *
- *    introduced confdir option
- *
- *    filters.c filtrers.h
- *
- *     extracted-CGI relevant stuff
- *
- *    jbsockets.c
- *
- *     filled comment
- *
- *    jcc.c
- *
- *     support for new cgi mechansim
- *
- *    list.c list.h
- *
- *    functions for new list type: "map"
- *    extended enlist_unique
- *
- *    miscutil.c .h
- *    introduced bindup()
- *
- *    parsers.c parsers.h
- *
- *    deleted const struct interceptors
- *
- *    pcrs.c
- *    added FIXME
- *
- *    project.h
- *
- *    added struct map
- *    added struct http_response
- *    changes struct interceptors to struct cgi_dispatcher
- *    moved HTML stuff to cgi.h
- *
- *    re_filterfile:
- *
- *    changed
- *
- *    showargs.c
- *    NO TIME LEFT
- *
- *
+ *    Revision 1.14  2001/09/16 11:38:02  jongfoster
+ *    Splitting fill_template() into 2 functions:
+ *    template_load() loads the file
+ *    template_fill() performs the PCRS regexps.
+ *    This is because the CGI edit interface has a "table row"
+ *    template which is used many times in the page - this
+ *    change means it's only loaded from disk once.
+ *
+ *    Revision 1.13  2001/09/16 11:00:10  jongfoster
+ *    New function alloc_http_response, for symmetry with free_http_response
+ *
+ *    Revision 1.12  2001/09/13 23:31:25  jongfoster
+ *    Moving image data to cgi.c rather than cgi.h.
+ *
+ *    Revision 1.11  2001/08/05 16:06:20  jongfoster
+ *    Modifiying "struct map" so that there are now separate header and
+ *    "map_entry" structures.  This means that functions which modify a
+ *    map no longer need to return a pointer to the modified map.
+ *    Also, it no longer reverses the order of the entries (which may be
+ *    important with some advanced template substitutions).
+ *
+ *    Revision 1.10  2001/08/01 21:19:22  jongfoster
+ *    Moving file version information to a separate CGI page.
+ *
+ *    Revision 1.9  2001/08/01 00:17:54  jongfoster
+ *    Adding prototype for map_conditional
+ *
+ *    Revision 1.8  2001/07/30 22:08:36  jongfoster
+ *    Tidying up #defines:
+ *    - All feature #defines are now of the form FEATURE_xxx
+ *    - Permanently turned off WIN_GUI_EDIT
+ *    - Permanently turned on WEBDAV and SPLIT_PROXY_ARGS
+ *
+ *    Revision 1.7  2001/07/29 18:43:08  jongfoster
+ *    Changing #ifdef _FILENAME_H to FILENAME_H_INCLUDED, to conform to
+ *    ANSI C rules.
+ *
+ *    Revision 1.6  2001/06/29 21:45:41  oes
+ *    Indentation, CRLF->LF, Tab-> Space
+ *
+ *    Revision 1.5  2001/06/29 13:22:44  oes
+ *    - Cleaned up
+ *    - Added new functions: default_exports(), make_menu(),
+ *      error_response() etc, ranamed others and changed
+ *      param and return types.
+ *    - Removed HTTP/HTML snipplets
+ *    - Removed logentry from cancelled commit
+ *
+ *    Revision 1.4  2001/06/09 10:50:58  jongfoster
+ *    Changing "show URL info" handler to new style.
+ *    Adding "extern" to some function prototypes.
+ *
+ *    Revision 1.3  2001/06/03 19:12:16  oes
+ *    introduced new cgi handling
+ *
+ *    No revisions before 1.3
  *
  **********************************************************************/
 \f
 extern "C" {
 #endif
 
-extern struct http_response *cgi_dispatch(struct client_state *csp);
-extern int make_http_response(struct http_response *rsp);
-extern void free_http_response(struct http_response *rsp);
-
-extern struct map *parse_cgi(char *argstring);
-char *dump_map(struct map *map);
-
-extern int cgi_default(struct client_state *csp, struct http_response *rsp,
-                      struct map *parameters);
-int cgi_show_status(struct client_state *csp, struct http_response *rsp,
-                    struct map *parameters);
-
-extern char *ijb_show_url_info(struct http_request *http, struct client_state *csp);
-
-extern char *redirect_url(struct http_request *http, struct client_state *csp);
-extern int cgi_send_banner(struct client_state *csp, struct http_response *rsp,
-                          struct map *parameters);
-
-
-
-#ifdef TRUST_FILES
-extern char *ij_untrusted_url(struct http_request *http, struct client_state *csp);
-#endif /* def TRUST_FILES */
-
-
-
-#ifdef STATISTICS
-extern char *add_stats(char *s);
-#endif /* def STATISTICS */
-
-static const char CJBGIF[] =
-   "GIF89aD\000\013\000\360\000\000\000\000\000\377\377\377!"
-   "\371\004\001\000\000\001\000,\000\000\000\000D\000\013\000"
-   "\000\002a\214\217\251\313\355\277\000\200G&K\025\316hC\037"
-   "\200\234\230Y\2309\235S\230\266\206\372J\253<\3131\253\271"
-   "\270\215\342\254\013\203\371\202\264\334P\207\332\020o\266"
-   "N\215I\332=\211\312\3513\266:\026AK)\364\370\365aobr\305"
-   "\372\003S\275\274k2\354\254z\347?\335\274x\306^9\374\276"
-   "\037Q\000\000;";
-
-static const char CBLANKGIF[] =
-   "GIF89a\001\000\001\000\200\000\000\377\377\377\000\000"
-   "\000!\371\004\001\000\000\000\000,\000\000\000\000\001"
-   "\000\001\000\000\002\002D\001\000;";
-
-static const char CBLOCK[] = 
-#ifdef AMIGA 
-       "HTTP/1.0 403 Request for blocked URL\n" 
-#else /* ifndef AMIGA */
-       "HTTP/1.0 202 Request for blocked URL\n"
-#endif /* ndef AMIGA */
-       "Pragma: no-cache\n"
-       "Last-Modified: Thu Jul 31, 1997 07:42:22 pm GMT\n"
-       "Expires:       Thu Jul 31, 1997 07:42:22 pm GMT\n"
-       "Content-Type: text/html\n\n"
-       "<html>\n"
-       "<head>\n"
-       "<title>Internet Junkbuster: Request for blocked URL</title>\n"
-       "</head>\n"
-       WHITEBG
-       "<center><h1>"
-       BANNER
-       "</h1></center>\n"
-      "<p align=center>Your request for <b>%s%s</b>\n"
-      "was blocked.<br><a href=\"http://i.j.b/show-url-info?url=%s%s\">See why</a>"
-#ifdef FORCE_LOAD
-       " or <a href=\"http://%s" FORCE_PREFIX "%s\">"
-       "go there anyway.</a>"
-#endif /* def FORCE_LOAD */
-      "</p>\n"
-      "</body>\n"
-      "</html>\n";
+/*
+ * Dispatch & parameter parsing functions
+ */
+extern struct http_response *dispatch_cgi(struct client_state *csp);
+extern struct map *parse_cgi_parameters(char *argstring);
 
-#ifdef TRUST_FILES
-static const char CTRUST[] =
-#ifdef AMIGA 
-       "HTTP/1.0 403 Request for untrusted URL\n"
-#else /* ifndef AMIGA */
-       "HTTP/1.0 202 Request for untrusted URL\n"
-#endif /* ndef AMIGA */
-       "Pragma: no-cache\n"
-       "Last-Modified: Thu Jul 31, 1997 07:42:22 pm GMT\n"
-       "Expires:       Thu Jul 31, 1997 07:42:22 pm GMT\n"
-       "Content-Type: text/html\n\n"
-       "<html>\n"
-       "<head>\n"
-       "<title>Internet Junkbuster: Request for untrusted URL</title>\n"
-       "</head>\n"
-       WHITEBG
-       "<center>"
-       "<a href=http://i.j.b/ij-untrusted-url?%s+%s+%s>"
-       BANNER
-       "</a>"
-       "</center>"
-       "</body>\n"
-       "</html>\n";
-#endif /* def TRUST_FILES */
+/*
+ * CGI functions
+ */
+extern int cgi_default             (struct client_state *csp,
+                                    struct http_response *rsp,
+                                    struct map *parameters);
+extern int cgi_robots_txt          (struct client_state *csp,
+                                    struct http_response *rsp,
+                                    struct map *parameters);
+extern int cgi_send_banner         (struct client_state *csp,
+                                    struct http_response *rsp,
+                                    struct map *parameters);
+extern int cgi_show_status         (struct client_state *csp,
+                                    struct http_response *rsp,
+                                    struct map *parameters);
+extern int cgi_show_url_info       (struct client_state *csp,
+                                    struct http_response *rsp,
+                                    struct map *parameters);
+extern int cgi_show_version        (struct client_state *csp,
+                                    struct http_response *rsp,
+                                    struct map *parameters);
+
+/* Not exactly a CGI */
+extern struct http_response * error_response(struct client_state *csp,
+                                             const char *templatename,
+                                             int err);
 
+/*
+ * CGI support functions
+ */
+extern struct http_response * alloc_http_response(void);
+extern void free_http_response(struct http_response *rsp);
 
-static const char C_HOME_PAGE[] =
-   "<html>\n"
-   "<head>\n"
-   "<title>Internet Junkbuster: Information</title>\n"
-   "</head>\n"
-   BODY
-   "<h1><center>"
-   BANNER
-   "</h1></center>\n"
-   "<p><a href=\"" HOME_PAGE_URL "\">JunkBuster web site</a></p>\n"
-   "<p><a href=\"http://i.j.b/show-proxy-arg\">Proxy configuration</a></p>\n"
-   "<p><a href=\"http://i.j.b/show-url-info\">Look up a URL</a></p>\n"
-   "</body>\n"
-   "</html>\n";
+extern struct http_response *finish_http_response(struct http_response *rsp);
 
-static const char C_URL_INFO_HEADER[] =
-   "HTTP/1.0 200 OK\n"
-   "Pragma: no-cache\n"
-   "Expires:       Thu Jul 31, 1997 07:42:22 pm GMT\n"
-   "Content-Type: text/html\n\n"
-   "<html>\n"
-   "<head>\n"
-   "<title>Internet Junkbuster: URL Info</title>\n"
-   "</head>\n"
-   BODY
-   "<h1><center>"
-   BANNER
-   "</h1></center>\n"
-   "<p>Information for: <a href=\"http://%s\">http://%s</a></p>\n";
-static const char C_URL_INFO_FOOTER[] =
-   "\n</p>\n"
-   "</body>\n"
-   "</html>\n";
+extern struct map * default_exports(const struct client_state *csp, const char *caller);
+extern void map_block_killer(struct map *map, const char *name);
+extern void map_conditional(struct map *exports, const char *name, int choose_first);
 
-static const char C_URL_INFO_FORM[] =
-   "HTTP/1.0 200 OK\n"
-   "Pragma: no-cache\n"
-   "Expires:       Thu Jul 31, 1997 07:42:22 pm GMT\n"
-   "Content-Type: text/html\n\n"
-   "<html>\n"
-   "<head>\n"
-   "<title>Internet Junkbuster: URL Info</title>\n"
-   "</head>\n"
-   BODY
-   "<h1><center>"
-   BANNER
-   "</h1></center>\n"
-   "<form method=\"GET\" action=\"http://i.j.b/show-url-info\">\n"
-   "<p>Please enter a URL, without the leading &quot;http://&quot;:</p>"
-   "<p><input type=\"text\" name=\"url\" size=\"80\">"
-   "<input type=\"submit\" value=\"Info\"></p>\n"
-   "</form>\n"
-   "</body>\n"
-   "</html>\n";
+extern char *template_load(struct client_state *csp, const char *templatename);
+extern void template_fill(char ** template_ptr, struct map *exports);
 
-static const char CFAIL[] =
-   "HTTP/1.0 503 Connect failed\n"
-   "Content-Type: text/html\n\n"
-   "<html>\n"
-   "<head>\n"
-   "<title>Internet Junkbuster: Connect failed</title>\n"
-   "</head>\n"
-   BODY
-   "<h1><center>"
-   BANNER
-   "</center></h1>"
-   "TCP connection to '%s' failed: %s.\n<br>"
-   "</body>\n"
-   "</html>\n";
 
-static const char CNXDOM[] =
-   "HTTP/1.0 404 Non-existent domain\n"
-   "Content-Type: text/html\n\n"
-   "<html>\n"
-   "<head>\n"
-   "<title>Internet Junkbuster: Non-existent domain</title>\n"
-   "</head>\n"
-   BODY
-   "<h1><center>"
-   BANNER
-   "</center></h1>"
-   "No such domain: %s\n"
-   "</body>\n"
-   "</html>\n";
+/*
+ * Text generators
+ */
+extern char *make_menu(const char *self);
+extern char *dump_map(const struct map *map);
 
-static const char CNOBANNER[] =
-   "HTTP/1.0 200 No Banner\n"
-   "Content-Type: text/html\n\n"
-   "<html>\n"
-   "<head>\n"
-   "<title>Internet Junkbuster: No Banner</title>\n"
-   "</head>\n"
-   BODY
-   "<h1><center>"
-   BANNER
-   "</h1>"
-   "You asked for a banner that this proxy can't produce because either configuration does not permit.\n<br>"
-   "or the URL didn't end with .gif\n"
-   "</center></body>\n"
-   "</html>\n";
+/*
+ * Some images.
+ */
+extern const char image_junkbuster_gif_data[];
+extern const int  image_junkbuster_gif_length;
+extern const char image_blank_gif_data[];
+extern const int  image_blank_gif_length;
 
 
 /* Revision control strings from this header and associated .c file */
@@ -312,7 +176,7 @@ extern const char cgi_h_rcs[];
 } /* extern "C" */
 #endif
 
-#endif /* ndef _CGI_H */
+#endif /* ndef CGI_H_INCLUDED */
 
 /*
   Local Variables: