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"),
89 if (0 != urh->out_buffer_size)
92 urh->in_buffer_used = 0;
96 urh->in_buffer_size = 0;
119 (urh->in_buffer_used < urh->in_buffer_size) )
124 buf_size = urh->in_buffer_size - urh->in_buffer_used;
131 &urh->in_buffer[urh->in_buffer_used],
136 if (GNUTLS_E_INTERRUPTED != res)
139 if (GNUTLS_E_AGAIN != res)
144 urh->in_buffer_size = 0;
150 urh->in_buffer_used += res;
151 if (buf_size > (
size_t) res)
163 urh->in_buffer_size = 0;
171 (urh->out_buffer_used < urh->out_buffer_size) )
176 buf_size = urh->out_buffer_size - urh->out_buffer_used;
181 &urh->out_buffer[urh->out_buffer_used],
200 urh->out_buffer_size = 0;
206 urh->out_buffer_used += res;
207 if (buf_size > (
size_t) res)
217 urh->out_buffer_size = 0;
225 (urh->out_buffer_used > 0) )
230 data_size = urh->out_buffer_used;
241 if (GNUTLS_E_INTERRUPTED != res)
244 if (GNUTLS_E_INTERRUPTED != res)
250 MHD_SC_UPGRADE_FORWARD_INCOMPLETE,
252 "Failed to forward to remote client " 254 " bytes of data received from application: %s\n"),
260 urh->out_buffer_used = 0;
262 urh->out_buffer_size = 0;
269 const size_t next_out_buffer_used = urh->out_buffer_used - res;
270 if (0 != next_out_buffer_used)
272 memmove (urh->out_buffer,
273 &urh->out_buffer[res],
274 next_out_buffer_used);
275 if (data_size > (
size_t) res)
278 urh->out_buffer_used = next_out_buffer_used;
280 if ( (0 == urh->out_buffer_used) &&
288 urh->out_buffer_size = 0;
297 (urh->in_buffer_used > 0) )
302 data_size = urh->in_buffer_used;
322 MHD_SC_UPGRADE_FORWARD_INCOMPLETE,
324 "Failed to forward to application " 326 " bytes of data received from remote side: %s\n"),
331 urh->in_buffer_used = 0;
333 urh->in_buffer_size = 0;
341 const size_t next_in_buffer_used = urh->in_buffer_used - res;
342 if (0 != next_in_buffer_used)
344 memmove (urh->in_buffer,
345 &urh->in_buffer[res],
346 next_in_buffer_used);
347 if (data_size > (
size_t) res)
350 urh->in_buffer_used = next_in_buffer_used;
352 if ( (0 == urh->in_buffer_used) &&
358 urh->in_buffer_size = 0;
367 (urh->in_buffer_used < urh->in_buffer_size) &&
372 ( (0 != urh->out_buffer_size) ||
373 (0 != urh->out_buffer_used) ) )
377 if (0 < urh->out_buffer_used)
379 MHD_SC_UPGRADE_FORWARD_INCOMPLETE,
381 "Failed to forward to remote client " 383 " bytes of data received from application: daemon shut down\n"),
387 urh->out_buffer_used = 0;
391 urh->out_buffer_size = 0;
#define MHD_send_(s, b, l)
ssize_t(* send)(void *cls, struct MHD_TLS_ConnectionState *cs, const void *buf, size_t buf_size)
bool data_already_pending
#define MHD_socket_get_error_()
#define MHD_socket_strerr_(err)
#define MHD_SCKT_ERR_IS_EAGAIN_(err)
internal shared structures
#define MHD_UNSIGNED_LONG_LONG
struct MHD_Daemon * daemon
const char *(* strerror)(void *cls, int ec)
#define MHD_SCKT_SEND_MAX_SIZE_
ssize_t(* recv)(void *cls, struct MHD_TLS_ConnectionState *cs, void *buf, size_t buf_size)
#define MHD_recv_(s, b, l)
#define MHD_UNSIGNED_LONG_LONG_PRINTF
enum MHD_ThreadingMode threading_mode
#define MHD_SCKT_ERR_IS_EINTR_(err)
function to process upgrade activity (over TLS)
enum MHD_Bool(* check_record_pending)(void *cls, struct MHD_TLS_ConnectionState *cs)
#define MHD_SCKT_ERR_IS_LOW_RESOURCES_(err)