mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-09-17 20:24:24 +00:00
httpd: move httpd_cgi_handler() call
This patch moves in advance httpd_cgi_handler() call, before assigning variables like hs->file and hs->left. In this way, CGI handler could prepare the reply data and set the "file properties", like file->data and file->len. At the exit, hs->file and hs->left is correctly assigned. The handler prototype says it can't access file pointer, however it is simple to obtain it after setting LWIP_HTTPD_FILE_STATE that enables a "file state" pointer. It is sufficient to assign file->state to file itself in fs_open_custom(). For example, I have the request GET /login.cgi?user=admin&pwd=admin and I have to reply with some JSON data. The answer depends on parameters user and pwd passed in the query string.
This commit is contained in:
parent
7edbd95b50
commit
ab281cb750
@ -2292,6 +2292,27 @@ http_init_file(struct http_state *hs, struct fs_file *file, int is_09, const cha
|
|||||||
LWIP_UNUSED_ARG(tag_check);
|
LWIP_UNUSED_ARG(tag_check);
|
||||||
#endif /* LWIP_HTTPD_SSI */
|
#endif /* LWIP_HTTPD_SSI */
|
||||||
hs->handle = file;
|
hs->handle = file;
|
||||||
|
#if LWIP_HTTPD_CGI_SSI
|
||||||
|
if (params != NULL) {
|
||||||
|
/* URI contains parameters, call generic CGI handler */
|
||||||
|
int count;
|
||||||
|
#if LWIP_HTTPD_CGI
|
||||||
|
if (http_cgi_paramcount >= 0) {
|
||||||
|
count = http_cgi_paramcount;
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
count = extract_uri_parameters(hs, params);
|
||||||
|
}
|
||||||
|
httpd_cgi_handler(uri, count, http_cgi_params, http_cgi_param_vals
|
||||||
|
#if defined(LWIP_HTTPD_FILE_STATE) && LWIP_HTTPD_FILE_STATE
|
||||||
|
, hs->handle->state
|
||||||
|
#endif /* LWIP_HTTPD_FILE_STATE */
|
||||||
|
);
|
||||||
|
}
|
||||||
|
#else /* LWIP_HTTPD_CGI_SSI */
|
||||||
|
LWIP_UNUSED_ARG(params);
|
||||||
|
#endif /* LWIP_HTTPD_CGI_SSI */
|
||||||
hs->file = file->data;
|
hs->file = file->data;
|
||||||
LWIP_ASSERT("File length must be positive!", (file->len >= 0));
|
LWIP_ASSERT("File length must be positive!", (file->len >= 0));
|
||||||
#if LWIP_HTTPD_CUSTOM_FILES
|
#if LWIP_HTTPD_CUSTOM_FILES
|
||||||
@ -2323,27 +2344,6 @@ http_init_file(struct http_state *hs, struct fs_file *file, int is_09, const cha
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* LWIP_HTTPD_SUPPORT_V09*/
|
#endif /* LWIP_HTTPD_SUPPORT_V09*/
|
||||||
#if LWIP_HTTPD_CGI_SSI
|
|
||||||
if (params != NULL) {
|
|
||||||
/* URI contains parameters, call generic CGI handler */
|
|
||||||
int count;
|
|
||||||
#if LWIP_HTTPD_CGI
|
|
||||||
if (http_cgi_paramcount >= 0) {
|
|
||||||
count = http_cgi_paramcount;
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
count = extract_uri_parameters(hs, params);
|
|
||||||
}
|
|
||||||
httpd_cgi_handler(uri, count, http_cgi_params, http_cgi_param_vals
|
|
||||||
#if defined(LWIP_HTTPD_FILE_STATE) && LWIP_HTTPD_FILE_STATE
|
|
||||||
, hs->handle->state
|
|
||||||
#endif /* LWIP_HTTPD_FILE_STATE */
|
|
||||||
);
|
|
||||||
}
|
|
||||||
#else /* LWIP_HTTPD_CGI_SSI */
|
|
||||||
LWIP_UNUSED_ARG(params);
|
|
||||||
#endif /* LWIP_HTTPD_CGI_SSI */
|
|
||||||
} else {
|
} else {
|
||||||
hs->handle = NULL;
|
hs->handle = NULL;
|
||||||
hs->file = NULL;
|
hs->file = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user