|
|
| version 1.1.1.1.2.2, 2012/03/09 10:03:21 | version 1.2.2.1, 2012/03/10 15:55:42 |
|---|---|
| Line 99 www_initCGI(void) | Line 99 www_initCGI(void) |
| str = getenv("REQUEST_METHOD"); | str = getenv("REQUEST_METHOD"); |
| if (!str) { | if (!str) { |
| www_SetErr(EBADMSG, "Request method not found"); | www_SetErr(EFAULT, "Request method not found"); |
| return NULL; | return NULL; |
| } | } |
| if (!strcmp(str, "GET") || !strcmp(str, "HEAD")) { | if (!strcmp(str, "GET") || !strcmp(str, "HEAD")) { |
| /* GET | HEAD */ | /* GET | HEAD */ |
| str = getenv("QUERY_STRING"); | str = getenv("QUERY_STRING"); |
| if (!str) { | if (!str) { |
| www_SetErr(EBADMSG, "Query string not found"); | www_SetErr(EFAULT, "Query string not found"); |
| return NULL; | return NULL; |
| } | } |
| cgi = www_parseQuery(str); | cgi = www_parseQuery(str); |
| Line 114 www_initCGI(void) | Line 114 www_initCGI(void) |
| /* POST */ | /* POST */ |
| str = getenv("CONTENT_LENGTH"); | str = getenv("CONTENT_LENGTH"); |
| if (!str) { | if (!str) { |
| www_SetErr(EBADMSG, "Content length not found"); | www_SetErr(EFAULT, "Content length not found"); |
| return NULL; | return NULL; |
| } else | } else |
| ctlen = strtol(str, NULL, 0); | ctlen = strtol(str, NULL, 0); |
| s = getenv("CONTENT_TYPE"); | s = getenv("CONTENT_TYPE"); |
| if (!s) { | if (!s) { |
| www_SetErr(EBADMSG, "Content type not found"); | www_SetErr(EFAULT, "Content type not found"); |
| return NULL; | return NULL; |
| } | } |
| if (www_cmp(s, "multipart/form-data") && | if (www_cmp(s, "multipart/form-data") && |
| www_cmp(s, "application/x-www-form-urlencoded")) { | www_cmp(s, "application/x-www-form-urlencoded")) { |
| www_SetErr(EBADMSG, "MIME parts are broken"); | www_SetErr(EFAULT, "MIME parts are broken"); |
| return NULL; | return NULL; |
| } | } |
| Line 135 www_initCGI(void) | Line 135 www_initCGI(void) |
| if (!str) { | if (!str) { |
| LOGERR; | LOGERR; |
| return NULL; | return NULL; |
| } | } else |
| memset(str, 0, ctlen + 1); | |
| for (i = 0; i < ctlen && (rlen = | for (i = 0; i < ctlen && (rlen = |
| read(STDIN_FILENO, (void*) str + i, ctlen - i)) > 0; i += rlen); | read(STDIN_FILENO, (void*) str + i, ctlen - i)) > 0; i += rlen); |
| str[ctlen] = 0; | str[ctlen] = 0; |
| Line 148 www_initCGI(void) | Line 149 www_initCGI(void) |
| free(str); | free(str); |
| } else { | } else { |
| /* Unknown method */ | /* Unknown method */ |
| www_SetErr(EBADMSG, "Unknown request method"); | www_SetErr(EFAULT, "Unknown request method"); |
| return NULL; | return NULL; |
| } | } |
| Line 348 www_delPair(cgi_t * __restrict cgi, const char *name) | Line 349 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 | |
| */ | |
| inline int | |
| www_listPairs(cgi_t * __restrict cgi, list_cb_t func, void *arg) | |
| { | |
| register int ret = 0; | |
| struct tagCGI *t; | |
| if (!cgi) { | |
| www_SetErr(EINVAL, "Invalid CGI session argument"); | |
| return -1; | |
| } | |
| SLIST_FOREACH(t, cgi, cgi_node) { | |
| ret++; | |
| if (func) | |
| func(t, arg); | |
| } | |
| return ret; | |
| } | |
| /* | |
| * www_header() - Output initial html header | * www_header() - Output initial html header |
| * | * |
| * @output = file handle | * @output = file handle |
| Line 495 www_parseMultiPart(const char *str, int ctlen, const c | Line 525 www_parseMultiPart(const char *str, int ctlen, const c |
| } | } |
| mime = mime_parseMultiPart(str, ctlen, www_getAttribute(attr, "boundary"), NULL); | mime = mime_parseMultiPart(str, ctlen, www_getAttribute(attr, "boundary"), NULL); |
| www_freeAttributes(&attr); | www_freeAttributes(&attr); |
| if (!mime) { | |
| www_closeCGI(&cgi); | |
| return NULL; | |
| } | |
| SLIST_FOREACH(m, mime, mime_node) { | SLIST_FOREACH(m, mime, mime_node) { |
| s = mime_getValue(m, "content-disposition"); | s = mime_getValue(m, "content-disposition"); |
| attr = www_parseAttributes(&s); | attr = www_parseAttributes(&s); |
| if (!www_getAttribute(attr, "name")) { | |
| www_freeAttributes(&attr); | |
| continue; | |
| } | |
| t = malloc(sizeof(struct tagCGI)); | t = malloc(sizeof(struct tagCGI)); |
| if (!t) { | if (!t) { |