diff options
Diffstat (limited to 'src/microhttpd/connection.c')
-rw-r--r-- | src/microhttpd/connection.c | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c index b3c43b63..6223b994 100644 --- a/src/microhttpd/connection.c +++ b/src/microhttpd/connection.c | |||
@@ -483,6 +483,19 @@ MHD_connection_close_ (struct MHD_Connection *connection, | |||
483 | &connection->client_context, | 483 | &connection->client_context, |
484 | termination_code); | 484 | termination_code); |
485 | connection->client_aware = MHD_NO; | 485 | connection->client_aware = MHD_NO; |
486 | |||
487 | /* if we were at the connection limit before and are in | ||
488 | thread-per-connection mode, signal the main thread | ||
489 | to resume accepting connections */ | ||
490 | if ( (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) && | ||
491 | (MHD_INVALID_PIPE_ != daemon->wpipe[1]) && | ||
492 | (1 != MHD_pipe_write_ (daemon->wpipe[1], "c", 1)) ) | ||
493 | { | ||
494 | #ifdef HAVE_MESSAGES | ||
495 | MHD_DLOG (daemon, | ||
496 | "failed to signal end of connection via pipe"); | ||
497 | #endif | ||
498 | } | ||
486 | } | 499 | } |
487 | 500 | ||
488 | 501 | ||
@@ -1527,6 +1540,7 @@ parse_initial_message_line (struct MHD_Connection *connection, | |||
1527 | size_t line_len) | 1540 | size_t line_len) |
1528 | { | 1541 | { |
1529 | struct MHD_Daemon *daemon = connection->daemon; | 1542 | struct MHD_Daemon *daemon = connection->daemon; |
1543 | const char *curi; | ||
1530 | char *uri; | 1544 | char *uri; |
1531 | char *http_version; | 1545 | char *http_version; |
1532 | char *args; | 1546 | char *args; |
@@ -1539,16 +1553,19 @@ parse_initial_message_line (struct MHD_Connection *connection, | |||
1539 | uri++; | 1553 | uri++; |
1540 | /* Skip any spaces. Not required by standard but allow | 1554 | /* Skip any spaces. Not required by standard but allow |
1541 | to be more tolerant. */ | 1555 | to be more tolerant. */ |
1542 | while (' ' == uri[0] && (size_t)(uri - line) < line_len) | 1556 | while ( (' ' == uri[0]) && |
1557 | ( (size_t)(uri - line) < line_len) ) | ||
1543 | uri++; | 1558 | uri++; |
1544 | if (uri - line == line_len) | 1559 | if (uri - line == line_len) |
1545 | { | 1560 | { |
1546 | uri = ""; | 1561 | curi = ""; |
1562 | uri = NULL; | ||
1547 | connection->version = ""; | 1563 | connection->version = ""; |
1548 | args = NULL; | 1564 | args = NULL; |
1549 | } | 1565 | } |
1550 | else | 1566 | else |
1551 | { | 1567 | { |
1568 | curi = uri; | ||
1552 | /* Search from back to accept misformed URI with space */ | 1569 | /* Search from back to accept misformed URI with space */ |
1553 | http_version = line + line_len - 1; | 1570 | http_version = line + line_len - 1; |
1554 | /* Skip any trailing spaces */ | 1571 | /* Skip any trailing spaces */ |
@@ -1572,7 +1589,7 @@ parse_initial_message_line (struct MHD_Connection *connection, | |||
1572 | if (NULL != daemon->uri_log_callback) | 1589 | if (NULL != daemon->uri_log_callback) |
1573 | connection->client_context | 1590 | connection->client_context |
1574 | = daemon->uri_log_callback (daemon->uri_log_callback_cls, | 1591 | = daemon->uri_log_callback (daemon->uri_log_callback_cls, |
1575 | uri, | 1592 | curi, |
1576 | connection); | 1593 | connection); |
1577 | if (NULL != args) | 1594 | if (NULL != args) |
1578 | { | 1595 | { |
@@ -1585,10 +1602,11 @@ parse_initial_message_line (struct MHD_Connection *connection, | |||
1585 | &connection_add_header, | 1602 | &connection_add_header, |
1586 | &unused_num_headers); | 1603 | &unused_num_headers); |
1587 | } | 1604 | } |
1588 | daemon->unescape_callback (daemon->unescape_callback_cls, | 1605 | if (NULL != uri) |
1589 | connection, | 1606 | daemon->unescape_callback (daemon->unescape_callback_cls, |
1590 | uri); | 1607 | connection, |
1591 | connection->url = uri; | 1608 | uri); |
1609 | connection->url = curi; | ||
1592 | return MHD_YES; | 1610 | return MHD_YES; |
1593 | } | 1611 | } |
1594 | 1612 | ||