aboutsummaryrefslogtreecommitdiff
path: root/src/microhttpd/connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/microhttpd/connection.c')
-rw-r--r--src/microhttpd/connection.c32
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