mirror of
https://git.gnunet.org/libmicrohttpd.git
synced 2026-09-27 04:09:31 +03:00
add ways for application to control corking for upgraded sockets
This commit is contained in:
@@ -3132,7 +3132,17 @@ enum MHD_UpgradeAction
|
||||
*
|
||||
* Takes no extra arguments.
|
||||
*/
|
||||
MHD_UPGRADE_ACTION_CLOSE = 0
|
||||
MHD_UPGRADE_ACTION_CLOSE = 0,
|
||||
|
||||
/**
|
||||
* Enable CORKing on the underlying socket.
|
||||
*/
|
||||
MHD_UPGRADE_ACTION_CORK_ON = 1,
|
||||
|
||||
/**
|
||||
* Disable CORKing on the underlying socket.
|
||||
*/
|
||||
MHD_UPGRADE_ACTION_CORK_OFF = 2
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -3181,7 +3181,7 @@ MHD_connection_handle_write (struct MHD_Connection *connection)
|
||||
return;
|
||||
case MHD_CONNECTION_HEADERS_SENDING:
|
||||
{
|
||||
const size_t wb_ready =connection->write_buffer_append_offset -
|
||||
const size_t wb_ready = connection->write_buffer_append_offset -
|
||||
connection->write_buffer_send_offset;
|
||||
|
||||
/* if the response body is not available, we use MHD_send_on_connection_() */
|
||||
|
||||
@@ -825,6 +825,44 @@ MHD_upgrade_action (struct MHD_UpgradeResponseHandle *urh,
|
||||
* be moved to cleanup list by MHD_resume_connection(). */
|
||||
MHD_resume_connection (connection);
|
||||
return MHD_YES;
|
||||
case MHD_UPGRADE_ACTION_CORK_ON:
|
||||
if (connection->sk_cork_on)
|
||||
return MHD_YES;
|
||||
#ifdef HTTPS_SUPPORT
|
||||
if (0 != (daemon->options & MHD_USE_TLS) )
|
||||
{
|
||||
gnutls_record_cork (connection->tls_session);
|
||||
connection->sk_cork_on = true;
|
||||
return MHD_YES;
|
||||
}
|
||||
else
|
||||
#else
|
||||
{
|
||||
if (0 ==
|
||||
MHD_socket_cork_ (connection->socket_fd,
|
||||
true))
|
||||
connection->sk_cork_on = true;
|
||||
}
|
||||
#endif
|
||||
case MHD_UPGRADE_ACTION_CORK_OFF:
|
||||
if (! connection->sk_cork_on)
|
||||
return MHD_YES;
|
||||
#ifdef HTTPS_SUPPORT
|
||||
if (0 != (daemon->options & MHD_USE_TLS) )
|
||||
{
|
||||
gnutls_record_uncork (connection->tls_session, 0);
|
||||
connection->sk_cork_on = false;
|
||||
return MHD_YES;
|
||||
}
|
||||
else
|
||||
#else
|
||||
{
|
||||
if (0 ==
|
||||
MHD_socket_cork_ (connection->socket_fd,
|
||||
false))
|
||||
connection->sk_cork_on = false;
|
||||
}
|
||||
#endif
|
||||
default:
|
||||
/* we don't understand this one */
|
||||
return MHD_NO;
|
||||
|
||||
@@ -685,6 +685,8 @@ run_usock (void *cls)
|
||||
{
|
||||
struct MHD_UpgradeResponseHandle *urh = cls;
|
||||
|
||||
MHD_upgrade_action (urh,
|
||||
MHD_UPGRADE_ACTION_CORK_OFF);
|
||||
send_all (usock,
|
||||
"Hello");
|
||||
recv_all (usock,
|
||||
|
||||
Reference in New Issue
Block a user