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,
60 _(
"Initiated daemon shutdown while \"upgraded\" connection was not closed.\n"));
63 urh->was_closed =
true;
65 was_closed = urh->was_closed;
70 if (0 < urh->in_buffer_used)
74 MHD_SC_UPGRADE_FORWARD_INCOMPLETE,
76 " bytes of data received from remote side: application shut down socket\n"),
86 if (0 != urh->out_buffer_size)
89 urh->in_buffer_used = 0;
93 urh->in_buffer_size = 0;
116 (urh->in_buffer_used < urh->in_buffer_size) )
121 buf_size = urh->in_buffer_size - urh->in_buffer_used;
122 if (buf_size > SSIZE_MAX)
123 buf_size = SSIZE_MAX;
128 &urh->in_buffer[urh->in_buffer_used],
133 if (GNUTLS_E_INTERRUPTED != res)
136 if (GNUTLS_E_AGAIN != res)
141 urh->in_buffer_size = 0;
147 urh->in_buffer_used += res;
148 if (buf_size > (
size_t)res)
160 urh->in_buffer_size = 0;
168 (urh->out_buffer_used < urh->out_buffer_size) )
173 buf_size = urh->out_buffer_size - urh->out_buffer_used;
178 &urh->out_buffer[urh->out_buffer_used],
197 urh->out_buffer_size = 0;
203 urh->out_buffer_used += res;
204 if (buf_size > (
size_t)res)
214 urh->out_buffer_size = 0;
222 (urh->out_buffer_used > 0) )
227 data_size = urh->out_buffer_used;
228 if (data_size > SSIZE_MAX)
229 data_size = SSIZE_MAX;
238 if (GNUTLS_E_INTERRUPTED != res)
241 if (GNUTLS_E_INTERRUPTED != res)
247 MHD_SC_UPGRADE_FORWARD_INCOMPLETE,
249 " bytes of data received from application: %s\n"),
255 urh->out_buffer_used = 0;
257 urh->out_buffer_size = 0;
264 const size_t next_out_buffer_used = urh->out_buffer_used - res;
265 if (0 != next_out_buffer_used)
267 memmove (urh->out_buffer,
268 &urh->out_buffer[res],
269 next_out_buffer_used);
270 if (data_size > (
size_t)res)
273 urh->out_buffer_used = next_out_buffer_used;
275 if ( (0 == urh->out_buffer_used) &&
283 urh->out_buffer_size = 0;
292 (urh->in_buffer_used > 0) )
297 data_size = urh->in_buffer_used;
317 MHD_SC_UPGRADE_FORWARD_INCOMPLETE,
319 " bytes of data received from remote side: %s\n"),
324 urh->in_buffer_used = 0;
326 urh->in_buffer_size = 0;
334 const size_t next_in_buffer_used = urh->in_buffer_used - res;
335 if (0 != next_in_buffer_used)
337 memmove (urh->in_buffer,
338 &urh->in_buffer[res],
339 next_in_buffer_used);
340 if (data_size > (
size_t)res)
343 urh->in_buffer_used = next_in_buffer_used;
345 if ( (0 == urh->in_buffer_used) &&
351 urh->in_buffer_size = 0;
360 (urh->in_buffer_used < urh->in_buffer_size) &&
365 ( (0 != urh->out_buffer_size) ||
366 (0 != urh->out_buffer_used) ) )
370 if (0 < urh->out_buffer_used)
372 MHD_SC_UPGRADE_FORWARD_INCOMPLETE,
374 " bytes of data received from application: daemon shut down\n"),
378 urh->out_buffer_used = 0;
382 urh->out_buffer_size = 0;
const char *(* strerror)(void *cls, int ec)
#define MHD_send_(s, b, l)
bool data_already_pending
MHD_mutex_lock_chk_ & daemon
#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
ssize_t(* recv)(void *cls, struct MHD_TLS_ConnectionState *cs, void *buf, size_t buf_size)
#define MHD_SCKT_SEND_MAX_SIZE_
ssize_t(* send)(void *cls, struct MHD_TLS_ConnectionState *cs, const void *buf, size_t buf_size)
#define MHD_recv_(s, b, l)
enum MHD_Bool(* check_record_pending)(void *cls, struct MHD_TLS_ConnectionState *cs)
#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)
#define MHD_SCKT_ERR_IS_LOW_RESOURCES_(err)