aboutsummaryrefslogtreecommitdiff
path: root/src/microhttpd/daemon.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/microhttpd/daemon.c')
-rw-r--r--src/microhttpd/daemon.c69
1 files changed, 40 insertions, 29 deletions
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index 69203be7..3eed6619 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -841,8 +841,10 @@ urh_from_fdset (struct MHD_UpgradeResponseHandle *urh,
841 const MHD_socket mhd_sckt = urh->mhd.socket; 841 const MHD_socket mhd_sckt = urh->mhd.socket;
842 842
843 /* Reset read/write ready, preserve error state. */ 843 /* Reset read/write ready, preserve error state. */
844 urh->app.celi &= (~MHD_EPOLL_STATE_READ_READY & ~MHD_EPOLL_STATE_WRITE_READY); 844 urh->app.celi &= (~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY)
845 urh->mhd.celi &= (~MHD_EPOLL_STATE_READ_READY & ~MHD_EPOLL_STATE_WRITE_READY); 845 & ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY));
846 urh->mhd.celi &= (~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY)
847 & ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY));
846 848
847 if (MHD_INVALID_SOCKET != conn_sckt) 849 if (MHD_INVALID_SOCKET != conn_sckt)
848 { 850 {
@@ -937,8 +939,10 @@ urh_from_pollfd (struct MHD_UpgradeResponseHandle *urh,
937 struct pollfd p[2]) 939 struct pollfd p[2])
938{ 940{
939 /* Reset read/write ready, preserve error state. */ 941 /* Reset read/write ready, preserve error state. */
940 urh->app.celi &= (~MHD_EPOLL_STATE_READ_READY & ~MHD_EPOLL_STATE_WRITE_READY); 942 urh->app.celi &= (~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY)
941 urh->mhd.celi &= (~MHD_EPOLL_STATE_READ_READY & ~MHD_EPOLL_STATE_WRITE_READY); 943 & ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY));
944 urh->mhd.celi &= (~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY)
945 & ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY));
942 946
943 if (0 != (p[0].revents & POLLIN)) 947 if (0 != (p[0].revents & POLLIN))
944 urh->app.celi |= MHD_EPOLL_STATE_READ_READY; 948 urh->app.celi |= MHD_EPOLL_STATE_READ_READY;
@@ -1394,10 +1398,10 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1394 /* Discard any data received form remote. */ 1398 /* Discard any data received form remote. */
1395 urh->in_buffer_used = 0; 1399 urh->in_buffer_used = 0;
1396 /* Do not try to push data to application. */ 1400 /* Do not try to push data to application. */
1397 urh->mhd.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1401 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1398 /* Reading from remote client is not required anymore. */ 1402 /* Reading from remote client is not required anymore. */
1399 urh->in_buffer_size = 0; 1403 urh->in_buffer_size = 0;
1400 urh->app.celi &= ~MHD_EPOLL_STATE_READ_READY; 1404 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1401 connection->tls_read_ready = false; 1405 connection->tls_read_ready = false;
1402 } 1406 }
1403 1407
@@ -1435,7 +1439,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1435 { 1439 {
1436 if (GNUTLS_E_INTERRUPTED != res) 1440 if (GNUTLS_E_INTERRUPTED != res)
1437 { 1441 {
1438 urh->app.celi &= ~MHD_EPOLL_STATE_READ_READY; 1442 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1439 if (GNUTLS_E_AGAIN != res) 1443 if (GNUTLS_E_AGAIN != res)
1440 { 1444 {
1441 /* Unrecoverable error on socket was detected or 1445 /* Unrecoverable error on socket was detected or
@@ -1486,7 +1490,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1486 ((! MHD_SCKT_ERR_IS_EINTR_ (err)) && 1490 ((! MHD_SCKT_ERR_IS_EINTR_ (err)) &&
1487 (! MHD_SCKT_ERR_IS_LOW_RESOURCES_ (err)))) 1491 (! MHD_SCKT_ERR_IS_LOW_RESOURCES_ (err))))
1488 { 1492 {
1489 urh->mhd.celi &= ~MHD_EPOLL_STATE_READ_READY; 1493 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1490 if ((0 == res) || 1494 if ((0 == res) ||
1491 (was_closed) || 1495 (was_closed) ||
1492 (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) || 1496 (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) ||
@@ -1504,7 +1508,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1504 { 1508 {
1505 urh->out_buffer_used += res; 1509 urh->out_buffer_used += res;
1506 if (buf_size > (size_t) res) 1510 if (buf_size > (size_t) res)
1507 urh->mhd.celi &= ~MHD_EPOLL_STATE_READ_READY; 1511 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1508 } 1512 }
1509 if ( (0 == (MHD_EPOLL_STATE_READ_READY & urh->mhd.celi)) && 1513 if ( (0 == (MHD_EPOLL_STATE_READ_READY & urh->mhd.celi)) &&
1510 ( (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) || 1514 ( (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) ||
@@ -1537,7 +1541,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1537 { 1541 {
1538 if (GNUTLS_E_INTERRUPTED != res) 1542 if (GNUTLS_E_INTERRUPTED != res)
1539 { 1543 {
1540 urh->app.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1544 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1541 if (GNUTLS_E_AGAIN != res) 1545 if (GNUTLS_E_AGAIN != res)
1542 { 1546 {
1543 /* TLS connection shut down or 1547 /* TLS connection shut down or
@@ -1555,7 +1559,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1555 urh->out_buffer_used = 0; 1559 urh->out_buffer_used = 0;
1556 /* Do not try to pull more data from application. */ 1560 /* Do not try to pull more data from application. */
1557 urh->out_buffer_size = 0; 1561 urh->out_buffer_size = 0;
1558 urh->mhd.celi &= ~MHD_EPOLL_STATE_READ_READY; 1562 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1559 } 1563 }
1560 } 1564 }
1561 } 1565 }
@@ -1568,7 +1572,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1568 &urh->out_buffer[res], 1572 &urh->out_buffer[res],
1569 next_out_buffer_used); 1573 next_out_buffer_used);
1570 if (data_size > (size_t) res) 1574 if (data_size > (size_t) res)
1571 urh->app.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1575 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1572 } 1576 }
1573 urh->out_buffer_used = next_out_buffer_used; 1577 urh->out_buffer_used = next_out_buffer_used;
1574 } 1578 }
@@ -1578,10 +1582,10 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1578 /* Unrecoverable error on socket was detected and all 1582 /* Unrecoverable error on socket was detected and all
1579 * pending data was sent to remote. */ 1583 * pending data was sent to remote. */
1580 /* Do not try to send to remote anymore. */ 1584 /* Do not try to send to remote anymore. */
1581 urh->app.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1585 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1582 /* Do not try to pull more data from application. */ 1586 /* Do not try to pull more data from application. */
1583 urh->out_buffer_size = 0; 1587 urh->out_buffer_size = 0;
1584 urh->mhd.celi &= ~MHD_EPOLL_STATE_READ_READY; 1588 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1585 } 1589 }
1586 } 1590 }
1587 1591
@@ -1607,7 +1611,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1607 if ( (! MHD_SCKT_ERR_IS_EINTR_ (err)) && 1611 if ( (! MHD_SCKT_ERR_IS_EINTR_ (err)) &&
1608 (! MHD_SCKT_ERR_IS_LOW_RESOURCES_ (err)) ) 1612 (! MHD_SCKT_ERR_IS_LOW_RESOURCES_ (err)) )
1609 { 1613 {
1610 urh->mhd.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1614 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1611 if (! MHD_SCKT_ERR_IS_EAGAIN_ (err)) 1615 if (! MHD_SCKT_ERR_IS_EAGAIN_ (err))
1612 { 1616 {
1613 /* Socketpair connection shut down or 1617 /* Socketpair connection shut down or
@@ -1625,7 +1629,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1625 urh->in_buffer_used = 0; 1629 urh->in_buffer_used = 0;
1626 /* Reading from remote client is not required anymore. */ 1630 /* Reading from remote client is not required anymore. */
1627 urh->in_buffer_size = 0; 1631 urh->in_buffer_size = 0;
1628 urh->app.celi &= ~MHD_EPOLL_STATE_READ_READY; 1632 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1629 connection->tls_read_ready = false; 1633 connection->tls_read_ready = false;
1630 } 1634 }
1631 } 1635 }
@@ -1639,7 +1643,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1639 &urh->in_buffer[res], 1643 &urh->in_buffer[res],
1640 next_in_buffer_used); 1644 next_in_buffer_used);
1641 if (data_size > (size_t) res) 1645 if (data_size > (size_t) res)
1642 urh->mhd.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1646 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1643 } 1647 }
1644 urh->in_buffer_used = next_in_buffer_used; 1648 urh->in_buffer_used = next_in_buffer_used;
1645 } 1649 }
@@ -1647,10 +1651,10 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1647 (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) ) 1651 (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi)) )
1648 { 1652 {
1649 /* Do not try to push data to application. */ 1653 /* Do not try to push data to application. */
1650 urh->mhd.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1654 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1651 /* Reading from remote client is not required anymore. */ 1655 /* Reading from remote client is not required anymore. */
1652 urh->in_buffer_size = 0; 1656 urh->in_buffer_size = 0;
1653 urh->app.celi &= ~MHD_EPOLL_STATE_READ_READY; 1657 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1654 connection->tls_read_ready = false; 1658 connection->tls_read_ready = false;
1655 } 1659 }
1656 } 1660 }
@@ -1679,10 +1683,10 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
1679 /* Discard any data unsent to remote. */ 1683 /* Discard any data unsent to remote. */
1680 urh->out_buffer_used = 0; 1684 urh->out_buffer_used = 0;
1681 /* Do not try to sent to remote anymore. */ 1685 /* Do not try to sent to remote anymore. */
1682 urh->app.celi &= ~MHD_EPOLL_STATE_WRITE_READY; 1686 urh->app.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_WRITE_READY);
1683 /* Do not try to pull more data from application. */ 1687 /* Do not try to pull more data from application. */
1684 urh->out_buffer_size = 0; 1688 urh->out_buffer_size = 0;
1685 urh->mhd.celi &= ~MHD_EPOLL_STATE_READ_READY; 1689 urh->mhd.celi &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_READ_READY);
1686 } 1690 }
1687} 1691}
1688 1692
@@ -3099,7 +3103,8 @@ internal_suspend_connection_ (struct MHD_Connection *connection)
3099 EDLL_remove (daemon->eready_head, 3103 EDLL_remove (daemon->eready_head,
3100 daemon->eready_tail, 3104 daemon->eready_tail,
3101 connection); 3105 connection);
3102 connection->epoll_state &= ~MHD_EPOLL_STATE_IN_EREADY_EDLL; 3106 connection->epoll_state &=
3107 ~((enum MHD_EpollState) MHD_EPOLL_STATE_IN_EREADY_EDLL);
3103 } 3108 }
3104 if (0 != (connection->epoll_state & MHD_EPOLL_STATE_IN_EPOLL_SET)) 3109 if (0 != (connection->epoll_state & MHD_EPOLL_STATE_IN_EPOLL_SET))
3105 { 3110 {
@@ -3108,7 +3113,8 @@ internal_suspend_connection_ (struct MHD_Connection *connection)
3108 connection->socket_fd, 3113 connection->socket_fd,
3109 NULL)) 3114 NULL))
3110 MHD_PANIC (_ ("Failed to remove FD from epoll set.\n")); 3115 MHD_PANIC (_ ("Failed to remove FD from epoll set.\n"));
3111 connection->epoll_state &= ~MHD_EPOLL_STATE_IN_EPOLL_SET; 3116 connection->epoll_state &=
3117 ~((enum MHD_EpollState) MHD_EPOLL_STATE_IN_EPOLL_SET);
3112 } 3118 }
3113 connection->epoll_state |= MHD_EPOLL_STATE_SUSPENDED; 3119 connection->epoll_state |= MHD_EPOLL_STATE_SUSPENDED;
3114 } 3120 }
@@ -3308,7 +3314,7 @@ resume_suspended_connections (struct MHD_Daemon *daemon)
3308 pos->epoll_state |= MHD_EPOLL_STATE_IN_EREADY_EDLL \ 3314 pos->epoll_state |= MHD_EPOLL_STATE_IN_EREADY_EDLL \
3309 | MHD_EPOLL_STATE_READ_READY 3315 | MHD_EPOLL_STATE_READ_READY
3310 | MHD_EPOLL_STATE_WRITE_READY; 3316 | MHD_EPOLL_STATE_WRITE_READY;
3311 pos->epoll_state &= ~MHD_EPOLL_STATE_SUSPENDED; 3317 pos->epoll_state &= ~((enum MHD_EpollState) MHD_EPOLL_STATE_SUSPENDED);
3312 } 3318 }
3313#endif 3319#endif
3314 } 3320 }
@@ -3758,7 +3764,8 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon)
3758 EDLL_remove (daemon->eready_head, 3764 EDLL_remove (daemon->eready_head,
3759 daemon->eready_tail, 3765 daemon->eready_tail,
3760 pos); 3766 pos);
3761 pos->epoll_state &= ~MHD_EPOLL_STATE_IN_EREADY_EDLL; 3767 pos->epoll_state &=
3768 ~((enum MHD_EpollState) MHD_EPOLL_STATE_IN_EREADY_EDLL);
3762 } 3769 }
3763 if ( (-1 != daemon->epoll_fd) && 3770 if ( (-1 != daemon->epoll_fd) &&
3764 (0 != (pos->epoll_state & MHD_EPOLL_STATE_IN_EPOLL_SET)) ) 3771 (0 != (pos->epoll_state & MHD_EPOLL_STATE_IN_EPOLL_SET)) )
@@ -3773,8 +3780,11 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon)
3773 EPOLL_CTL_DEL, 3780 EPOLL_CTL_DEL,
3774 pos->socket_fd, 3781 pos->socket_fd,
3775 NULL)) 3782 NULL))
3776 MHD_PANIC (_ ("Failed to remove FD from epoll set.\n")); 3783 MHD_PANIC (_ (
3777 pos->epoll_state &= ~MHD_EPOLL_STATE_IN_EPOLL_SET; 3784 "Failed to remove FD from epoll set.\n"));
3785 pos->epoll_state &=
3786 ~((enum MHD_EpollState)
3787 MHD_EPOLL_STATE_IN_EPOLL_SET);
3778 } 3788 }
3779 } 3789 }
3780#endif 3790#endif
@@ -5125,7 +5135,8 @@ MHD_epoll (struct MHD_Daemon *daemon,
5125 EDLL_remove (daemon->eready_head, 5135 EDLL_remove (daemon->eready_head,
5126 daemon->eready_tail, 5136 daemon->eready_tail,
5127 pos); 5137 pos);
5128 pos->epoll_state &= ~MHD_EPOLL_STATE_IN_EREADY_EDLL; 5138 pos->epoll_state &=
5139 ~((enum MHD_EpollState) MHD_EPOLL_STATE_IN_EREADY_EDLL);
5129 } 5140 }
5130 } 5141 }
5131 } 5142 }
@@ -6502,7 +6513,7 @@ MHD_start_daemon_va (unsigned int flags,
6502 *pflags |= MHD_USE_INTERNAL_POLLING_THREAD; 6513 *pflags |= MHD_USE_INTERNAL_POLLING_THREAD;
6503 } 6514 }
6504 if (0 == (*pflags & MHD_USE_INTERNAL_POLLING_THREAD)) 6515 if (0 == (*pflags & MHD_USE_INTERNAL_POLLING_THREAD))
6505 *pflags = (*pflags & ((enum MHD_FLAG) ~MHD_USE_ITC)); /* useless if we are using 'external' select */ 6516 *pflags = (*pflags & ~((enum MHD_FLAG) MHD_USE_ITC)); /* useless if we are using 'external' select */
6506 else 6517 else
6507 { 6518 {
6508#ifdef HAVE_LISTEN_SHUTDOWN 6519#ifdef HAVE_LISTEN_SHUTDOWN