add ways for application to control corking for upgraded sockets

This commit is contained in:
Christian Grothoff
2019-08-01 21:40:47 +02:00
parent 97fd0a6557
commit 26368ac8f1
4 changed files with 52 additions and 2 deletions
+11 -1
View File
@@ -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
};
+1 -1
View File
@@ -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_() */
+38
View File
@@ -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;
+2
View File
@@ -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,