handler: add new event: UH_EV_HEAD_COMPLETE

Signed-off-by: Jianhui Zhao <zhaojh329@gmail.com>
main
Jianhui Zhao 2020-12-26 17:30:28 +08:00
parent 0a7a38a467
commit 06e3d76dc9
3 changed files with 22 additions and 2 deletions

View File

@ -64,7 +64,21 @@ static void upload_handler(struct uh_connection *conn, int event)
{
static int fd = -1;
if (event == UH_EV_BODY) {
if (event == UH_EV_HEAD_COMPLETE) {
struct uh_str str = conn->get_header(conn, "Content-Length");
int content_length;
char buf[128];
sprintf(buf, "%.*s\n", (int)str.len, str.p);
content_length = atoi(buf);
if (content_length > 1024 * 1024 * 1024) {
conn->error(conn, HTTP_STATUS_INTERNAL_SERVER_ERROR, "Too big");
return;
}
} if (event == UH_EV_BODY) {
struct uh_str body = conn->extract_body(conn);
if (fd < 0) {
@ -80,7 +94,7 @@ static void upload_handler(struct uh_connection *conn, int event)
close(fd);
return;
}
} else {
} else if (event == UH_EV_COMPLETE) {
struct stat st;
size_t size = 0;

View File

@ -389,6 +389,11 @@ done:
return -1;
}
conn->handler(conn, UH_EV_HEAD_COMPLETE);
if (conn->flags & CONN_F_SEND_AND_CLOSE)
return -1;
return 0;
}

View File

@ -45,6 +45,7 @@ struct uh_plugin {
};
enum {
UH_EV_HEAD_COMPLETE,
UH_EV_BODY,
UH_EV_COMPLETE
};