Update to the new FSF address
[infodrom/cgilib] / cgi.h
1 /*
2     cgi.h - Routines for CGI programming
3     Copyright (c) 1996-8,2007,8  Martin Schulze <joey@infodrom.org>
4
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, write to the Free Software Foundation
17     Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19
20 #ifndef _CGI_H_
21 #define _CGI_H_
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 typedef struct var_s {
28         char    *name,
29                 *value;
30 } s_var;
31
32 typedef struct cookie_s {
33         char    *version,
34                 *name,
35                 *value,
36                 *path,
37                 *domain;
38 } s_cookie;
39
40 typedef struct file_s {
41         char    *name,
42                 *type,
43                 *filename,
44                 *tmpfile;
45 } s_file;
46
47 typedef struct cgi_s {
48         s_var **vars;
49         s_cookie **cookies;
50         s_file **files;
51 } s_cgi;
52
53 /* cgiSetHeader
54  * 
55  *  Sets additional HTTP header lines to be printed with cgiHeader
56  */
57 int cgiSetHeader (const char *name, const char *value);
58
59 /* cgiSetType
60  * 
61  *  Sets result type for HTTP
62  */
63 int cgiSetType (const char *type);
64
65 /* cgiHeader
66  * 
67  *  Prints a valid CGI Header (Content-type...) etc.
68  */
69 void cgiHeader ();
70
71 /* cgiDebug
72  * 
73  *  Set/unsets debugging
74  */
75 void cgiDebug (int level, int where);
76
77 /* cgiInit
78  *
79  *  Reads in variables set via POST or stdin, reads HTTP Cookies.
80  */
81 s_cgi *cgiInit ();
82
83 /* cgiGetValue
84  *
85  *  Returns the value of the specified variable or NULL if it's empty
86  *  or doesn't exist.
87  */
88 char *cgiGetValue (s_cgi *parms, const char *name);
89
90 /* cgiGetVariables
91  *
92  *  Returns the names of all form variables.
93  */
94 char **cgiGetVariables (s_cgi *parms);
95
96 /* cgiRedirect
97  *
98  *  Provides a valid redirect for web pages.
99  */
100 void cgiRedirect (const char *url);
101
102 /* cgiGetCookie
103  *
104  *  Returns the cookie referenced by the given name or NULL if it
105  *  doesn't exist or is empty.
106  */
107 s_cookie *cgiGetCookie (s_cgi *parms, const char *name);
108
109 /* cgiGetCookies
110  *
111  * Returns a list of names of all cookies.
112  */
113 char **cgiGetCookies (s_cgi *parms);
114
115 /* cgiGetFiles
116  *
117  * Returns a list of names of all files.
118  */
119 char **cgiGetFiles (s_cgi *parms);
120
121 /* cgiGetFile
122  *
123  * Return data structure for CGI file variable
124  */
125 s_file *cgiGetFile (s_cgi *parms, const char *name);
126
127 /* cgiFreeList
128  *
129  * Frees a list as returned by cgiGetVariables() and cgiGetCookies()
130  */
131 void cgiFreeList (char **list);
132
133 /* cgiFree
134  *
135  * Frees the internal data structures
136  */
137 void cgiFree (s_cgi *parms);
138
139 /* cgiEscape
140  *
141  * Escapes <&> in a string
142  */
143 char *cgiEscape (char *string);
144
145 #ifdef __cplusplus
146 extern }
147 #endif
148
149 #endif /* _CGI_H_ */