--- libaitwww/inc/aitwww.h 2012/03/08 23:40:21 1.1 +++ libaitwww/inc/aitwww.h 2013/05/30 09:25:35 1.6 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitwww.h,v 1.1 2012/03/08 23:40:21 misho Exp $ +* $Id: aitwww.h,v 1.6 2013/05/30 09:25:35 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -12,7 +12,7 @@ terms: All of the documentation and software included in the ELWIX and AITNET Releases is copyrighted by ELWIX - Sofia/Bulgaria -Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 +Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -47,9 +47,51 @@ SUCH DAMAGE. #define __AITWWW_H +#include +#include +#include +#include + + +/* URL staff ... */ + +typedef struct _tagURLItem { + int vallen; + char *value; +} url_Item_t; + +struct tagIOURL { + ait_val_t url_line; + + ait_val_t url_tech; + ait_val_t url_user; + ait_val_t url_pass; + ait_val_t url_host; + ait_val_t url_port; + ait_val_t url_path; + ait_val_t url_args; + + unsigned char *url_reserved; +}; + +struct tagReqXML { + unsigned char xml_line[BUFSIZ]; + + url_Item_t xml_namespace; + union { + url_Item_t container; + url_Item_t path; + } xml_node; + url_Item_t xml_data; + url_Item_t xml_attribute; + url_Item_t xml_value; +}; + +/* CGI variables */ + struct tagCGI { - char *cgi_name; - char *cgi_value; + ait_val_t *cgi_name; + ait_val_t *cgi_value; SLIST_ENTRY(tagCGI) cgi_node; }; @@ -70,7 +112,15 @@ struct tagMIME { SLIST_ENTRY(tagMIME) mime_node; }; +typedef int (*list_cb_t)(struct tagCGI *, void *); + +// www_GetErrno() Get error code of last operation +int www_GetErrno(); +// www_GetError() Get error text of last operation +const char *www_GetError(); + + /* * www_initCGI() - Init CGI program * @@ -84,6 +134,7 @@ cgi_t *www_initCGI(void); * return: none */ void www_closeCGI(cgi_t ** __restrict cgi); +#define www_freeAttributes www_closeCGI /* * www_parseQuery() - Parse CGI query string * @@ -107,7 +158,7 @@ cgi_t *www_parseMultiPart(const char *str, int ctlen, * @name = Name of cgi variable * return: NULL not found or !=NULL value */ -inline const char *www_getValue(cgi_t * __restrict cgi, const char *name); +const char *www_getValue(cgi_t * __restrict cgi, const char *name); /* * www_addValue() - Add new or update if exists CGI variable * @@ -125,6 +176,15 @@ int www_addValue(cgi_t * __restrict cgi, const char *n * return: -1 error, 0 not found or 1 deleted ok */ int www_delPair(cgi_t * __restrict cgi, const char *name); +/* + * www_listPairs() - Walk over CGI session variables + * + * @cgi = Cgi session + * @func = If !=NULL call function for each element + * @arg = Optional argument pass through callback + * return: -1 error or >-1 number of elements + */ +int www_listPairs(cgi_t * __restrict cgi, list_cb_t func, void *arg); /* * www_header() - Output initial html header @@ -132,7 +192,7 @@ int www_delPair(cgi_t * __restrict cgi, const char *na * @output = file handle * return: <1 error or >0 writed bytes */ -inline int www_header(FILE *output); +int www_header(FILE *output); /* * www_parseAttributes() - Parse attributes @@ -140,22 +200,120 @@ inline int www_header(FILE *output); * @ct = Content type * return: NULL error or !=NULL attributes */ -inline cgi_t *www_parseAttributes(const char **ct); +cgi_t *www_parseAttributes(const char **ct); /* - * www_freeAttributes() - Free attributes + * www_getAttribute() - Get Attribute from attribute session * - * @attr = Attributes + * @cgi = Inited attribute session + * @name = Name of attribute variable + * return: NULL not found or !=NULL value + */ +ait_val_t *www_getAttribute(cgi_t * __restrict cgi, const char *name); + + +/* + * www_cmp() - Compare two string + * + * @ct = content text from www + * @s = string + * return: 0 are equal or !0 are different + */ +int www_cmp(const char *ct, const char *s); +/* + * www_cmptype() - Compare context type + * + * @ct = content text from www + * @type = content type + * return: 0 are equal or !0 are different + */ +int www_cmptype(const char *ct, const char *type); +/* + * www_getpair() - Get AV pair from WWW query string + * + * @str = query string + * @delim = delimiter + * return: NULL error or AV pair, must be e_free() after use! + */ +ait_val_t *www_getpair(char ** __restrict str, const char *delim); +/* + * www_x2c() - Hex from string to digit + * + * @str = string + * return: digit + */ +char www_x2c(const char *str); +/* + * www_unescape() - Unescape/decode WWW query string to host string + * + * @str = string * return: none */ -inline void www_freeAttributes(cgi_t ** __restrict attr); +void www_unescape(char * __restrict str); /* - * www_getAttribute() - Get attribute by name + * www_undot() - Undotted and clean WWW query filename * - * @attr = Attributes - * @name = Name of attribute - * return: NULL not found or !=NULL attribute value + * @pname = query filename + * return: =NULL error or !=NULL allocated valid filename, after use you must call ait_freeVar() */ -inline const char *www_getAttribute(cgi_t * __restrict attr, const char *name); +ait_val_t *www_undot(const char * __restrict pname); + + +/* + * www_URLInit() - Init URL structure and free old one + * + * @url = Input URL + * return: -1 error or 0 ok + */ +int www_URLInit(struct tagIOURL * __restrict url); +/* + * www_URLFree() - URL free structure + * + * @url = Input parsed URL + * return: none + */ +void www_URLFree(struct tagIOURL * __restrict url); +/* + * www_URLGet() - Parse and get data from input URL + * + * @csURL = Input URL line + * @url = Output parsed URL + * return: 0 error format not find tech:// and return URL like path; + * -1 error:: can`t read; >0 ok, up bits for known elements + */ +int www_URLGet(const char *csURL, struct tagIOURL * __restrict url); +/* + * www_URLGetFile() - Get file from parsed URL + * + * @url = Input parsed URL + * @value = Return filename, if not specified file in url path, replace with / + * return: -1 error, 0 filename from path, 1 filename or 2 not specified filename + */ +int www_URLGetFile(struct tagIOURL * __restrict url, ait_val_t * __restrict value); + +/* + * www_XMLGet() - Parse and get data from input XML request string + * [ns:]container[|attribute[=value]][?data] + * + * @csXML = Input XML request line + * @xml = Output parsed XML request + * return: 0 error format incorrect, -1 error:: can`t read; >0 ok readed elements bits + */ +int www_XMLGet(const char *csXML, struct tagReqXML *xml); + +/* + * www_b64encode() - Base64 encode function + * + * @src = source data + * return: NULL error or !=NULL encoded variable, after use call ait_freeVar() + */ +ait_val_t *www_b64encode(ait_val_t * __restrict src); +/* + * www_b64decode() - Base64 decode function + * + * @src = source encoded data + * return: NULL error or !=NULL decoded variable, after use call ait_freeVar() + */ +ait_val_t *www_b64decode(ait_val_t * __restrict src); #endif