version 1.4, 2012/08/01 00:40:41
|
version 1.5.6.1, 2016/09/14 15:08:24
|
Line 12 terms:
|
Line 12 terms:
|
All of the documentation and software included in the ELWIX and AITNET |
All of the documentation and software included in the ELWIX and AITNET |
Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> |
Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> |
|
|
Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 | Copyright 2004 - 2016 |
by Michael Pounov <misho@elwix.org>. All rights reserved. |
by Michael Pounov <misho@elwix.org>. All rights reserved. |
|
|
Redistribution and use in source and binary forms, with or without |
Redistribution and use in source and binary forms, with or without |
Line 55 char www_Error[STRSIZ];
|
Line 55 char www_Error[STRSIZ];
|
#pragma GCC visibility pop |
#pragma GCC visibility pop |
|
|
// www_GetErrno() Get error code of last operation |
// www_GetErrno() Get error code of last operation |
inline int | int |
www_GetErrno() |
www_GetErrno() |
{ |
{ |
return www_Errno; |
return www_Errno; |
} |
} |
|
|
// www_GetError() Get error text of last operation |
// www_GetError() Get error text of last operation |
inline const char * | const char * |
www_GetError() |
www_GetError() |
{ |
{ |
return www_Error; |
return www_Error; |
} |
} |
|
|
// www_SetErr() Set error to variables for internal use!!! |
// www_SetErr() Set error to variables for internal use!!! |
inline void | void |
www_SetErr(int eno, char *estr, ...) |
www_SetErr(int eno, char *estr, ...) |
{ |
{ |
va_list lst; |
va_list lst; |
Line 130 www_initCGI(void)
|
Line 130 www_initCGI(void)
|
} |
} |
|
|
/* allocated space for post data */ |
/* allocated space for post data */ |
str = io_malloc(ctlen + 1); | str = e_malloc(ctlen + 1); |
if (!str) { |
if (!str) { |
www_SetErr(io_GetErrno(), "%s", io_GetError()); | www_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); |
return NULL; |
return NULL; |
} else |
} else |
memset(str, 0, ctlen + 1); |
memset(str, 0, ctlen + 1); |
Line 145 www_initCGI(void)
|
Line 145 www_initCGI(void)
|
else if (!www_cmp(s, "multipart/form-data")) |
else if (!www_cmp(s, "multipart/form-data")) |
cgi = www_parseMultiPart(str, ctlen, s); |
cgi = www_parseMultiPart(str, ctlen, s); |
|
|
io_free(str); | e_free(str); |
} else { |
} else { |
/* Unknown method */ |
/* Unknown method */ |
www_SetErr(EFAULT, "Unknown request method"); |
www_SetErr(EFAULT, "Unknown request method"); |
Line 170 www_closeCGI(cgi_t ** __restrict cgi)
|
Line 170 www_closeCGI(cgi_t ** __restrict cgi)
|
return; |
return; |
|
|
while ((t = SLIST_FIRST(*cgi))) { |
while ((t = SLIST_FIRST(*cgi))) { |
io_freeVar(&t->cgi_name); | ait_freeVar(&t->cgi_name); |
io_freeVar(&t->cgi_value); | ait_freeVar(&t->cgi_value); |
|
|
SLIST_REMOVE_HEAD(*cgi, cgi_node); |
SLIST_REMOVE_HEAD(*cgi, cgi_node); |
io_free(t); | e_free(t); |
} |
} |
|
|
io_free(*cgi); | e_free(*cgi); |
*cgi = NULL; |
*cgi = NULL; |
} |
} |
|
|
Line 199 www_parseQuery(const char *str)
|
Line 199 www_parseQuery(const char *str)
|
return NULL; |
return NULL; |
} |
} |
|
|
cgi = io_malloc(sizeof(cgi_t)); | cgi = e_malloc(sizeof(cgi_t)); |
if (!cgi) { |
if (!cgi) { |
www_SetErr(io_GetErrno(), "%s", io_GetError()); | www_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); |
return NULL; |
return NULL; |
} else { |
} else { |
memset(cgi, 0, sizeof(cgi_t)); |
memset(cgi, 0, sizeof(cgi_t)); |
SLIST_INIT(cgi); |
SLIST_INIT(cgi); |
} |
} |
|
|
base = wrk = io_strdup(str); | base = wrk = e_strdup(str); |
|
|
while (*wrk) { |
while (*wrk) { |
t = io_malloc(sizeof(struct tagCGI)); | t = e_malloc(sizeof(struct tagCGI)); |
if (!t) { |
if (!t) { |
www_SetErr(io_GetErrno(), "%s", io_GetError()); | www_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); |
www_closeCGI(&cgi); |
www_closeCGI(&cgi); |
return NULL; |
return NULL; |
} else |
} else |
Line 232 www_parseQuery(const char *str)
|
Line 232 www_parseQuery(const char *str)
|
old = t; |
old = t; |
} |
} |
|
|
io_free(base); | e_free(base); |
return cgi; |
return cgi; |
} |
} |
|
|
Line 243 www_parseQuery(const char *str)
|
Line 243 www_parseQuery(const char *str)
|
* @name = Name of cgi variable |
* @name = Name of cgi variable |
* return: NULL not found or !=NULL value |
* return: NULL not found or !=NULL value |
*/ |
*/ |
inline const char * | const char * |
www_getValue(cgi_t * __restrict cgi, const char *name) |
www_getValue(cgi_t * __restrict cgi, const char *name) |
{ |
{ |
struct tagCGI *t; |
struct tagCGI *t; |
Line 292 www_addValue(cgi_t * __restrict cgi, const char *name,
|
Line 292 www_addValue(cgi_t * __restrict cgi, const char *name,
|
} |
} |
|
|
/* add new one */ |
/* add new one */ |
tmp = io_malloc(sizeof(struct tagCGI)); | tmp = e_malloc(sizeof(struct tagCGI)); |
if (!tmp) { |
if (!tmp) { |
www_SetErr(io_GetErrno(), "%s", io_GetError()); | www_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); |
return -1; |
return -1; |
} else |
} else |
memset(tmp, 0, sizeof(struct tagCGI)); |
memset(tmp, 0, sizeof(struct tagCGI)); |
|
|
tmp->cgi_name = io_allocVar(); | tmp->cgi_name = ait_allocVar(); |
if (!tmp->cgi_name) { |
if (!tmp->cgi_name) { |
www_SetErr(io_GetErrno(), "%s", io_GetError()); | www_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); |
io_free(tmp); | e_free(tmp); |
return -1; |
return -1; |
} else |
} else |
AIT_SET_STR(tmp->cgi_name, name); |
AIT_SET_STR(tmp->cgi_name, name); |
tmp->cgi_value = io_allocVar(); | tmp->cgi_value = ait_allocVar(); |
if (!tmp->cgi_name) { |
if (!tmp->cgi_name) { |
www_SetErr(io_GetErrno(), "%s", io_GetError()); | www_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); |
io_freeVar(&tmp->cgi_name); | ait_freeVar(&tmp->cgi_name); |
io_free(tmp); | e_free(tmp); |
return -1; |
return -1; |
} else |
} else |
AIT_SET_STR(tmp->cgi_value, value); |
AIT_SET_STR(tmp->cgi_value, value); |
Line 344 www_delPair(cgi_t * __restrict cgi, const char *name)
|
Line 344 www_delPair(cgi_t * __restrict cgi, const char *name)
|
if (t->cgi_name && !strcmp(name, AIT_GET_STR(t->cgi_name))) { |
if (t->cgi_name && !strcmp(name, AIT_GET_STR(t->cgi_name))) { |
SLIST_REMOVE(cgi, t, tagCGI, cgi_node); |
SLIST_REMOVE(cgi, t, tagCGI, cgi_node); |
|
|
io_freeVar(&t->cgi_name); | ait_freeVar(&t->cgi_name); |
io_freeVar(&t->cgi_value); | ait_freeVar(&t->cgi_value); |
io_free(t); | e_free(t); |
return 1; |
return 1; |
} |
} |
|
|
Line 361 www_delPair(cgi_t * __restrict cgi, const char *name)
|
Line 361 www_delPair(cgi_t * __restrict cgi, const char *name)
|
* @arg = Optional argument pass through callback |
* @arg = Optional argument pass through callback |
* return: -1 error or >-1 number of elements |
* return: -1 error or >-1 number of elements |
*/ |
*/ |
inline int | int |
www_listPairs(cgi_t * __restrict cgi, list_cb_t func, void *arg) |
www_listPairs(cgi_t * __restrict cgi, list_cb_t func, void *arg) |
{ |
{ |
register int ret = 0; |
register int ret = 0; |
Line 388 www_listPairs(cgi_t * __restrict cgi, list_cb_t func,
|
Line 388 www_listPairs(cgi_t * __restrict cgi, list_cb_t func,
|
* @output = file handle |
* @output = file handle |
* return: <1 error or >0 writed bytes |
* return: <1 error or >0 writed bytes |
*/ |
*/ |
inline int | int |
www_header(FILE *output) |
www_header(FILE *output) |
{ |
{ |
FILE *f = output ? output : stdout; |
FILE *f = output ? output : stdout; |
Line 408 quotStr(const char *str, const char **end)
|
Line 408 quotStr(const char *str, const char **end)
|
if (*str != '"') { |
if (*str != '"') { |
n = strspn(str, "!#$%&'*+-.0123456789?ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
n = strspn(str, "!#$%&'*+-.0123456789?ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
"^_`abcdefghijklmnopqrstuvwxyz{|}~"); |
"^_`abcdefghijklmnopqrstuvwxyz{|}~"); |
s = io_allocVar(); | s = ait_allocVar(); |
if (!s) { |
if (!s) { |
www_SetErr(io_GetErrno(), "%s", io_GetError()); | www_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); |
return NULL; |
return NULL; |
} else { |
} else { |
AIT_SET_STRSIZ(s, n + 1); |
AIT_SET_STRSIZ(s, n + 1); |
Line 426 quotStr(const char *str, const char **end)
|
Line 426 quotStr(const char *str, const char **end)
|
else |
else |
len = e - str; |
len = e - str; |
|
|
s = io_allocVar(); | s = ait_allocVar(); |
if (!s) { |
if (!s) { |
www_SetErr(io_GetErrno(), "%s", io_GetError()); | www_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); |
return NULL; |
return NULL; |
} else { |
} else { |
AIT_SET_STRSIZ(s, len + 1); |
AIT_SET_STRSIZ(s, len + 1); |
Line 466 addAttr(const char **ct)
|
Line 466 addAttr(const char **ct)
|
if (!(eq = strchr(c, '='))) |
if (!(eq = strchr(c, '='))) |
return NULL; |
return NULL; |
|
|
a = io_malloc(sizeof(struct tagCGI)); | a = e_malloc(sizeof(struct tagCGI)); |
if (!a) { |
if (!a) { |
www_SetErr(io_GetErrno(), "%s", io_GetError()); | www_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); |
return NULL; |
return NULL; |
} |
} |
a->cgi_name = io_allocVar(); | a->cgi_name = ait_allocVar(); |
if (!a->cgi_name) { |
if (!a->cgi_name) { |
www_SetErr(io_GetErrno(), "%s", io_GetError()); | www_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); |
io_free(a); | e_free(a); |
return NULL; |
return NULL; |
} |
} |
|
|
Line 482 addAttr(const char **ct)
|
Line 482 addAttr(const char **ct)
|
AIT_SET_STR(a->cgi_name, c); |
AIT_SET_STR(a->cgi_name, c); |
a->cgi_value = quotStr(eq, &c); |
a->cgi_value = quotStr(eq, &c); |
if (!a->cgi_value) { |
if (!a->cgi_value) { |
io_freeVar(&a->cgi_name); | ait_freeVar(&a->cgi_name); |
io_free(a); | e_free(a); |
return NULL; |
return NULL; |
} |
} |
|
|
Line 515 www_parseMultiPart(const char *str, int ctlen, const c
|
Line 515 www_parseMultiPart(const char *str, int ctlen, const c
|
return NULL; |
return NULL; |
} |
} |
|
|
cgi = io_malloc(sizeof(cgi_t)); | cgi = e_malloc(sizeof(cgi_t)); |
if (!cgi) { |
if (!cgi) { |
www_SetErr(io_GetErrno(), "%s", io_GetError()); | www_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); |
return NULL; |
return NULL; |
} else { |
} else { |
memset(cgi, 0, sizeof(cgi_t)); |
memset(cgi, 0, sizeof(cgi_t)); |
Line 546 www_parseMultiPart(const char *str, int ctlen, const c
|
Line 546 www_parseMultiPart(const char *str, int ctlen, const c
|
continue; |
continue; |
} |
} |
|
|
t = io_malloc(sizeof(struct tagCGI)); | t = e_malloc(sizeof(struct tagCGI)); |
if (!t) { |
if (!t) { |
www_SetErr(io_GetErrno(), "%s", io_GetError()); | www_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); |
mime_close(&mime); |
mime_close(&mime); |
www_closeCGI(&cgi); |
www_closeCGI(&cgi); |
return NULL; |
return NULL; |
Line 557 www_parseMultiPart(const char *str, int ctlen, const c
|
Line 557 www_parseMultiPart(const char *str, int ctlen, const c
|
|
|
AIT_COPY_VAL(t->cgi_name, www_getAttribute(attr, "name")); |
AIT_COPY_VAL(t->cgi_name, www_getAttribute(attr, "name")); |
len = mime_calcRawSize(m); |
len = mime_calcRawSize(m); |
t->cgi_value = io_allocVar(); | t->cgi_value = ait_allocVar(); |
if (!t->cgi_value) { |
if (!t->cgi_value) { |
www_SetErr(io_GetErrno(), "%s", io_GetError()); | www_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); |
io_freeVar(&t->cgi_name); | ait_freeVar(&t->cgi_name); |
io_free(t); | e_free(t); |
mime_close(&mime); |
mime_close(&mime); |
www_closeCGI(&cgi); |
www_closeCGI(&cgi); |
return NULL; |
return NULL; |
Line 589 www_parseMultiPart(const char *str, int ctlen, const c
|
Line 589 www_parseMultiPart(const char *str, int ctlen, const c
|
* @ct = Content type |
* @ct = Content type |
* return: NULL error or !=NULL attributes |
* return: NULL error or !=NULL attributes |
*/ |
*/ |
inline cgi_t * | cgi_t * |
www_parseAttributes(const char **ct) |
www_parseAttributes(const char **ct) |
{ |
{ |
struct tagCGI *t, *old = NULL; |
struct tagCGI *t, *old = NULL; |
Line 600 www_parseAttributes(const char **ct)
|
Line 600 www_parseAttributes(const char **ct)
|
return NULL; |
return NULL; |
} |
} |
|
|
attr = io_malloc(sizeof(cgi_t)); | attr = e_malloc(sizeof(cgi_t)); |
if (!attr) { |
if (!attr) { |
www_SetErr(io_GetErrno(), "%s", io_GetError()); | www_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); |
return NULL; |
return NULL; |
} else { |
} else { |
memset(attr, 0, sizeof(cgi_t)); |
memset(attr, 0, sizeof(cgi_t)); |
Line 628 www_parseAttributes(const char **ct)
|
Line 628 www_parseAttributes(const char **ct)
|
* @name = Name of attribute variable |
* @name = Name of attribute variable |
* return: NULL not found or !=NULL value |
* return: NULL not found or !=NULL value |
*/ |
*/ |
inline ait_val_t * | ait_val_t * |
www_getAttribute(cgi_t * __restrict cgi, const char *name) |
www_getAttribute(cgi_t * __restrict cgi, const char *name) |
{ |
{ |
struct tagCGI *t; |
struct tagCGI *t; |