diff options
Diffstat (limited to 'src/daemon/session.c')
-rw-r--r-- | src/daemon/session.c | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/src/daemon/session.c b/src/daemon/session.c index e3aa1241..9cba0d28 100644 --- a/src/daemon/session.c +++ b/src/daemon/session.c | |||
@@ -111,7 +111,7 @@ MHD_queue_response(struct MHD_Session * session, | |||
111 | (response == NULL) || | 111 | (response == NULL) || |
112 | (session->response != NULL) || | 112 | (session->response != NULL) || |
113 | (session->bodyReceived == 0) || | 113 | (session->bodyReceived == 0) || |
114 | (session->headers_received == 0) ) | 114 | (session->headersReceived == 0) ) |
115 | return MHD_NO; | 115 | return MHD_NO; |
116 | MHD_increment_response_rc(response); | 116 | MHD_increment_response_rc(response); |
117 | session->response = response; | 117 | session->response = response; |
@@ -131,13 +131,13 @@ MHD_session_get_fdset(struct MHD_Session * session, | |||
131 | fd_set * write_fd_set, | 131 | fd_set * write_fd_set, |
132 | fd_set * except_fd_set, | 132 | fd_set * except_fd_set, |
133 | int * max_fd) { | 133 | int * max_fd) { |
134 | if ( (session->headers_received == 0) || | 134 | if ( (session->headersReceived == 0) || |
135 | (session->readLoc < session->read_buffer_size) ) | 135 | (session->readLoc < session->read_buffer_size) ) |
136 | FD_SET(session->socket_fd, read_fd_set); | 136 | FD_SET(session->socket_fd, read_fd_set); |
137 | if (session->response != NULL) | 137 | if (session->response != NULL) |
138 | FD_SET(session->socket_fd, write_fd_set); | 138 | FD_SET(session->socket_fd, write_fd_set); |
139 | if ( (session->socket_fd > *max_fd) && | 139 | if ( (session->socket_fd > *max_fd) && |
140 | ( (session->headers_received == 0) || | 140 | ( (session->headersReceived == 0) || |
141 | (session->readLoc < session->read_buffer_size) || | 141 | (session->readLoc < session->read_buffer_size) || |
142 | (session->response != NULL) ) ) | 142 | (session->response != NULL) ) ) |
143 | *max_fd = session->socket_fd; | 143 | *max_fd = session->socket_fd; |
@@ -310,7 +310,7 @@ MHD_call_session_handler(struct MHD_Session * session) { | |||
310 | struct MHD_Access_Handler * ah; | 310 | struct MHD_Access_Handler * ah; |
311 | unsigned int processed; | 311 | unsigned int processed; |
312 | 312 | ||
313 | if (session->headers_received == 0) | 313 | if (session->headersReceived == 0) |
314 | abort(); /* bad timing... */ | 314 | abort(); /* bad timing... */ |
315 | ah = MHD_find_access_handler(session); | 315 | ah = MHD_find_access_handler(session); |
316 | processed = session->readLoc; | 316 | processed = session->readLoc; |
@@ -356,7 +356,7 @@ MHD_session_handle_read(struct MHD_Session * session) { | |||
356 | 356 | ||
357 | 357 | ||
358 | if ( (session->readLoc >= session->read_buffer_size) && | 358 | if ( (session->readLoc >= session->read_buffer_size) && |
359 | (session->headers_received == 0) ) { | 359 | (session->headersReceived == 0) ) { |
360 | /* need to grow read buffer */ | 360 | /* need to grow read buffer */ |
361 | tmp = malloc(session->read_buffer_size * 2 + MHD_MAX_BUF_SIZE); | 361 | tmp = malloc(session->read_buffer_size * 2 + MHD_MAX_BUF_SIZE); |
362 | memcpy(tmp, | 362 | memcpy(tmp, |
@@ -405,6 +405,34 @@ MHD_session_handle_read(struct MHD_Session * session) { | |||
405 | } | 405 | } |
406 | 406 | ||
407 | /** | 407 | /** |
408 | * Check if we need to set some additional headers | ||
409 | * for http-compiliance. | ||
410 | */ | ||
411 | static void | ||
412 | MHD_add_extra_headers(struct MHD_Session * session) { | ||
413 | const char * have; | ||
414 | char buf[128]; | ||
415 | |||
416 | if (session->response->total_size == -1) { | ||
417 | have = MHD_get_response_header(session->response, | ||
418 | "Connection"); | ||
419 | if (have == NULL) | ||
420 | MHD_add_response_header(session->response, | ||
421 | "Connection", | ||
422 | "close"); | ||
423 | } else if (NULL == MHD_get_response_header(session->response, | ||
424 | "Content-length")) { | ||
425 | snprintf(buf, | ||
426 | 128, | ||
427 | "%llu", | ||
428 | (unsigned long long) session->response->total_size); | ||
429 | MHD_add_response_header(session->response, | ||
430 | "Content-length", | ||
431 | buf); | ||
432 | } | ||
433 | } | ||
434 | |||
435 | /** | ||
408 | * Allocate the session's write buffer and | 436 | * Allocate the session's write buffer and |
409 | * fill it with all of the headers from the | 437 | * fill it with all of the headers from the |
410 | * HTTPd's response. | 438 | * HTTPd's response. |
@@ -417,6 +445,7 @@ MHD_build_header_response(struct MHD_Session * session) { | |||
417 | char code[32]; | 445 | char code[32]; |
418 | char * data; | 446 | char * data; |
419 | 447 | ||
448 | MHD_add_extra_headers(session); | ||
420 | sprintf(code, | 449 | sprintf(code, |
421 | "HTTP/1.1 %u\r\n", | 450 | "HTTP/1.1 %u\r\n", |
422 | session->responseCode); | 451 | session->responseCode); |
@@ -551,7 +580,7 @@ MHD_session_handle_write(struct MHD_Session * session) { | |||
551 | abort(); /* internal error */ | 580 | abort(); /* internal error */ |
552 | if (session->messagePos == response->data_size) { | 581 | if (session->messagePos == response->data_size) { |
553 | if ( (session->bodyReceived == 0) || | 582 | if ( (session->bodyReceived == 0) || |
554 | (session->headers_received == 0) ) | 583 | (session->headersReceived == 0) ) |
555 | abort(); /* internal error */ | 584 | abort(); /* internal error */ |
556 | MHD_destroy_response(response); | 585 | MHD_destroy_response(response); |
557 | session->responseCode = 0; | 586 | session->responseCode = 0; |