Annotation of libaitwww/inc/aitwww.h, revision 1.5
1.1 misho 1: /*************************************************************************
2: * (C) 2012 AITNET ltd - Sofia/Bulgaria - <misho@aitnet.org>
3: * by Michael Pounov <misho@elwix.org>
4: *
5: * $Author: misho $
1.5 ! misho 6: * $Id: aitwww.h,v 1.4.2.5 2012/09/17 13:05:47 misho Exp $
1.1 misho 7: *
8: **************************************************************************
9: The ELWIX and AITNET software is distributed under the following
10: terms:
11:
12: All of the documentation and software included in the ELWIX and AITNET
13: Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
14:
15: Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
16: by Michael Pounov <misho@elwix.org>. All rights reserved.
17:
18: Redistribution and use in source and binary forms, with or without
19: modification, are permitted provided that the following conditions
20: are met:
21: 1. Redistributions of source code must retain the above copyright
22: notice, this list of conditions and the following disclaimer.
23: 2. Redistributions in binary form must reproduce the above copyright
24: notice, this list of conditions and the following disclaimer in the
25: documentation and/or other materials provided with the distribution.
26: 3. All advertising materials mentioning features or use of this software
27: must display the following acknowledgement:
28: This product includes software developed by Michael Pounov <misho@elwix.org>
29: ELWIX - Embedded LightWeight unIX and its contributors.
30: 4. Neither the name of AITNET nor the names of its contributors
31: may be used to endorse or promote products derived from this software
32: without specific prior written permission.
33:
34: THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND
35: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
36: IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
37: ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
38: FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
39: DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
40: OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
41: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
42: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
43: OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
44: SUCH DAMAGE.
45: */
46: #ifndef __AITWWW_H
47: #define __AITWWW_H
48:
49:
1.2 misho 50: #include <sys/types.h>
51: #include <sys/queue.h>
52: #include <sys/uio.h>
1.4 misho 53: #include <aitio.h>
1.2 misho 54:
55:
1.3 misho 56: /* URL staff ... */
57:
58: typedef struct _tagURLItem {
59: int vallen;
60: char *value;
61: } url_Item_t;
62:
63: struct tagIOURL {
1.5 ! misho 64: ait_val_t url_line;
1.3 misho 65:
1.5 ! misho 66: ait_val_t url_tech;
! 67: ait_val_t url_user;
! 68: ait_val_t url_pass;
! 69: ait_val_t url_host;
! 70: ait_val_t url_port;
! 71: ait_val_t url_path;
! 72: ait_val_t url_args;
1.3 misho 73:
1.5 ! misho 74: unsigned char *url_reserved;
1.3 misho 75: };
76:
77: struct tagReqXML {
78: unsigned char xml_line[BUFSIZ];
79:
80: url_Item_t xml_namespace;
81: union {
82: url_Item_t container;
83: url_Item_t path;
84: } xml_node;
85: url_Item_t xml_data;
86: url_Item_t xml_attribute;
87: url_Item_t xml_value;
88: };
89:
90: /* CGI variables */
91:
1.1 misho 92: struct tagCGI {
1.4 misho 93: ait_val_t *cgi_name;
94: ait_val_t *cgi_value;
1.1 misho 95:
96: SLIST_ENTRY(tagCGI) cgi_node;
97: };
98: typedef SLIST_HEAD(, tagCGI) cgi_t;
99:
100: struct tagMIME;
101: typedef SLIST_HEAD(, tagMIME) mime_t;
102:
103: struct tagMIME {
104: cgi_t mime_header;
105:
106: struct iovec mime_body;
107: struct iovec mime_prolog;
108: struct iovec mime_epilog;
109:
110: mime_t *mime_attach;
111:
112: SLIST_ENTRY(tagMIME) mime_node;
113: };
114:
1.2 misho 115: typedef int (*list_cb_t)(struct tagCGI *, void *);
116:
117:
118: // www_GetErrno() Get error code of last operation
119: inline int www_GetErrno();
120: // www_GetError() Get error text of last operation
121: inline const char *www_GetError();
122:
1.1 misho 123:
124: /*
125: * www_initCGI() - Init CGI program
126: *
127: * return: NULL error or allocated cgi session
128: */
129: cgi_t *www_initCGI(void);
130: /*
131: * www_closeCGI() - Close and free all CGI resources
132: *
133: * @cgi = Inited cgi session
134: * return: none
135: */
136: void www_closeCGI(cgi_t ** __restrict cgi);
1.4 misho 137: #define www_freeAttributes www_closeCGI
1.1 misho 138: /*
139: * www_parseQuery() - Parse CGI query string
140: *
141: * @str = String
142: * return: NULL error or allocated cgi session
143: */
144: cgi_t *www_parseQuery(const char *str);
145: /*
146: * www_parseMultiPart() - Parse Multi part POST CGI query string
147: *
148: * @str = String
149: * @ctlen = Content length
150: * @ct = Content type
151: * return: NULL error or allocated cgi session
152: */
153: cgi_t *www_parseMultiPart(const char *str, int ctlen, const char *ct);
154: /*
155: * www_getValue() - Get Value from CGI session
156: *
157: * @cgi = Inited cgi session
158: * @name = Name of cgi variable
159: * return: NULL not found or !=NULL value
160: */
161: inline const char *www_getValue(cgi_t * __restrict cgi, const char *name);
162: /*
163: * www_addValue() - Add new or update if exists CGI variable
164: *
165: * @cgi = Inited cgi session
166: * @name = Name of cgi variable
167: * @value = Value of cgi variable
168: * return: -1 error, 0 add new one or 1 updated variable
169: */
170: int www_addValue(cgi_t * __restrict cgi, const char *name, const char *value);
171: /*
172: * www_delPair() - Delete CGI variable from session
173: *
174: * @cgi = Inited cgi session
175: * @name = Name of cgi variable
176: * return: -1 error, 0 not found or 1 deleted ok
177: */
178: int www_delPair(cgi_t * __restrict cgi, const char *name);
1.2 misho 179: /*
180: * www_listPairs() - Walk over CGI session variables
181: *
182: * @cgi = Cgi session
183: * @func = If !=NULL call function for each element
184: * @arg = Optional argument pass through callback
185: * return: -1 error or >-1 number of elements
186: */
187: inline int www_listPairs(cgi_t * __restrict cgi, list_cb_t func, void *arg);
1.1 misho 188:
189: /*
190: * www_header() - Output initial html header
191: *
192: * @output = file handle
193: * return: <1 error or >0 writed bytes
194: */
195: inline int www_header(FILE *output);
196:
197: /*
198: * www_parseAttributes() - Parse attributes
199: *
200: * @ct = Content type
201: * return: NULL error or !=NULL attributes
202: */
203: inline cgi_t *www_parseAttributes(const char **ct);
204: /*
1.4 misho 205: * www_getAttribute() - Get Attribute from attribute session
1.1 misho 206: *
1.4 misho 207: * @cgi = Inited attribute session
208: * @name = Name of attribute variable
209: * return: NULL not found or !=NULL value
210: */
211: inline ait_val_t *www_getAttribute(cgi_t * __restrict cgi, const char *name);
212:
213:
214: /*
215: * www_cmp() - Compare two string
216: *
217: * @ct = content text from www
218: * @s = string
219: * return: 0 are equal or !0 are different
220: */
221: int www_cmp(const char *ct, const char *s);
222: /*
223: * www_cmptype() - Compare context type
224: *
225: * @ct = content text from www
226: * @type = content type
227: * return: 0 are equal or !0 are different
228: */
229: int www_cmptype(const char *ct, const char *type);
230: /*
231: * www_getpair() - Get AV pair from WWW query string
232: *
233: * @str = query string
234: * @delim = delimiter
235: * return: NULL error or AV pair, must be io_free() after use!
236: */
237: ait_val_t *www_getpair(char ** __restrict str, const char *delim);
238: /*
239: * www_x2c() - Hex from string to digit
240: *
241: * @str = string
242: * return: digit
1.1 misho 243: */
1.4 misho 244: inline char www_x2c(const char *str);
1.1 misho 245: /*
1.4 misho 246: * www_unescape() - Unescape/decode WWW query string to host string
1.1 misho 247: *
1.4 misho 248: * @str = string
249: * return: none
1.1 misho 250: */
1.4 misho 251: inline void www_unescape(char * __restrict str);
1.5 ! misho 252: /*
! 253: * www_undot() - Undotted and clean WWW query filename
! 254: *
! 255: * @pname = query filename
! 256: * return: =NULL error or !=NULL allocated valid filename, after use you must call io_freeVar()
! 257: */
! 258: ait_val_t *www_undot(const char * __restrict pname);
1.1 misho 259:
260:
1.3 misho 261: /*
1.5 ! misho 262: * www_URLInit() - Init URL structure and free old one
! 263: *
! 264: * @url = Input URL
! 265: * return: -1 error or 0 ok
! 266: */
! 267: inline int www_URLInit(struct tagIOURL * __restrict url);
! 268: /*
! 269: * www_URLFree() - URL free structure
! 270: *
! 271: * @url = Input parsed URL
! 272: * return: none
! 273: */
! 274: inline void www_URLFree(struct tagIOURL * __restrict url);
! 275: /*
1.3 misho 276: * www_URLGet() - Parse and get data from input URL
277: *
278: * @csURL = Input URL line
279: * @url = Output parsed URL
280: * return: 0 error format not find tech:// and return URL like path;
281: * -1 error:: can`t read; >0 ok, up bits for known elements
282: */
1.5 ! misho 283: int www_URLGet(const char *csURL, struct tagIOURL * __restrict url);
1.3 misho 284: /*
285: * www_URLGetFile() - Get file from parsed URL
286: *
287: * @url = Input parsed URL
1.5 ! misho 288: * @value = Return filename, if not specified file in url path, replace with /
! 289: * return: -1 error, 0 filename from path, 1 filename or 2 not specified filename
1.3 misho 290: */
1.5 ! misho 291: int www_URLGetFile(struct tagIOURL * __restrict url, ait_val_t * __restrict value);
1.3 misho 292:
293: /*
294: * www_XMLGet() - Parse and get data from input XML request string
295: * [ns:]container[|attribute[=value]][?data]
296: *
297: * @csXML = Input XML request line
298: * @xml = Output parsed XML request
299: * return: 0 error format incorrect, -1 error:: can`t read; >0 ok readed elements bits
300: */
301: int www_XMLGet(const char *csXML, struct tagReqXML *xml);
302:
1.5 ! misho 303: /*
! 304: * www_b64encode() - Base64 encode function
! 305: *
! 306: * @src = source data
! 307: * return: NULL error or !=NULL encoded variable, after use call io_freeVar()
! 308: */
! 309: ait_val_t *www_b64encode(ait_val_t * __restrict src);
! 310: /*
! 311: * www_b64decode() - Base64 decode function
! 312: *
! 313: * @src = source encoded data
! 314: * return: NULL error or !=NULL decoded variable, after use call io_freeVar()
! 315: */
! 316: ait_val_t *www_b64decode(ait_val_t * __restrict src);
! 317:
1.3 misho 318:
1.1 misho 319: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>