28 #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
38 MHD_upgrade_response_handle_process_ (
struct MHD_UpgradeResponseHandle *urh)
56 if (! urh->was_closed)
59 MHD_SC_DAEMON_ALREADY_SHUTDOWN,
61 "Initiated daemon shutdown while \"upgraded\" connection was not closed.\n"));
64 urh->was_closed =
true;
66 was_closed = urh->was_closed;
71 if (0 < urh->in_buffer_used)
75 MHD_SC_UPGRADE_FORWARD_INCOMPLETE,
77 "Failed to forward to application "
79 " bytes of data received from remote side: application shut down socket.\n"),
88 if (0 != urh->out_buffer_size)
91 urh->in_buffer_used = 0;
95 urh->in_buffer_size = 0;
115 (urh->in_buffer_used < urh->in_buffer_size) )
120 buf_size = urh->in_buffer_size - urh->in_buffer_used;
127 &urh->in_buffer[urh->in_buffer_used],
132 if (GNUTLS_E_INTERRUPTED != res)
135 if (GNUTLS_E_AGAIN != res)
140 urh->in_buffer_size = 0;
146 urh->in_buffer_used += res;
147 if (buf_size > (
size_t) res)
159 urh->in_buffer_size = 0;
167 (urh->out_buffer_used < urh->out_buffer_size) )
172 buf_size = urh->out_buffer_size - urh->out_buffer_used;
177 &urh->out_buffer[urh->out_buffer_used],
196 urh->out_buffer_size = 0;
202 urh->out_buffer_used += res;
203 if (buf_size > (
size_t) res)
213 urh->out_buffer_size = 0;
221 (urh->out_buffer_used > 0) )
226 data_size = urh->out_buffer_used;
237 if (GNUTLS_E_INTERRUPTED != res)
240 if (GNUTLS_E_INTERRUPTED != res)
246 MHD_SC_UPGRADE_FORWARD_INCOMPLETE,
248 "Failed to forward to remote client "
250 " bytes of data received from application: %s\n"),
256 urh->out_buffer_used = 0;
258 urh->out_buffer_size = 0;
265 const size_t next_out_buffer_used = urh->out_buffer_used - res;
266 if (0 != next_out_buffer_used)
268 memmove (urh->out_buffer,
269 &urh->out_buffer[res],
270 next_out_buffer_used);
271 if (data_size > (
size_t) res)
274 urh->out_buffer_used = next_out_buffer_used;
276 if ( (0 == urh->out_buffer_used) &&
284 urh->out_buffer_size = 0;
293 (urh->in_buffer_used > 0) )
298 data_size = urh->in_buffer_used;
318 MHD_SC_UPGRADE_FORWARD_INCOMPLETE,
320 "Failed to forward to application "
322 " bytes of data received from remote side: %s\n"),
327 urh->in_buffer_used = 0;
329 urh->in_buffer_size = 0;
337 const size_t next_in_buffer_used = urh->in_buffer_used - res;
338 if (0 != next_in_buffer_used)
340 memmove (urh->in_buffer,
341 &urh->in_buffer[res],
342 next_in_buffer_used);
343 if (data_size > (
size_t) res)
346 urh->in_buffer_used = next_in_buffer_used;
348 if ( (0 == urh->in_buffer_used) &&
354 urh->in_buffer_size = 0;
363 (urh->in_buffer_used < urh->in_buffer_size) &&
368 ( (0 != urh->out_buffer_size) ||
369 (0 != urh->out_buffer_used) ) )
373 if (0 < urh->out_buffer_used)
375 MHD_SC_UPGRADE_FORWARD_INCOMPLETE,
377 "Failed to forward to remote client "
379 " bytes of data received from application: daemon shut down.\n"),
383 urh->out_buffer_used = 0;
387 urh->out_buffer_size = 0;
@ MHD_EPOLL_STATE_READ_READY
@ MHD_EPOLL_STATE_WRITE_READY
#define MHD_SCKT_ERR_IS_EAGAIN_(err)
#define MHD_SCKT_ERR_IS_LOW_RESOURCES_(err)
#define MHD_socket_strerr_(err)
#define MHD_socket_get_error_()
#define MHD_SCKT_ERR_IS_EINTR_(err)
#define MHD_SCKT_SEND_MAX_SIZE_
#define MHD_recv_(s, b, l)
#define MHD_send_(s, b, l)
internal shared structures
#define MHD_UNSIGNED_LONG_LONG
#define MHD_UNSIGNED_LONG_LONG_PRINTF
struct MHD_Daemon * daemon
bool data_already_pending
enum MHD_ThreadingMode threading_mode
ssize_t(* recv)(void *cls, struct MHD_TLS_ConnectionState *cs, void *buf, size_t buf_size)
const char *(* strerror)(void *cls, int ec)
enum MHD_Bool(* check_record_pending)(void *cls, struct MHD_TLS_ConnectionState *cs)
ssize_t(* send)(void *cls, struct MHD_TLS_ConnectionState *cs, const void *buf, size_t buf_size)
function to process upgrade activity (over TLS)