mirror of
https://git.gnunet.org/libmicrohttpd.git
synced 2026-09-25 04:09:31 +03:00
fix transmission stall issue with upgraded TLS connections reported by Nguyen Xuan Viet on the mailinglist
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
Sun 27 Sep 2020 10:08:03 PM CEST
|
||||
Fixed incorrect triggering of epoll edge polling for
|
||||
"upgraded" TLS connections. Fixed a few cases where
|
||||
gnutls_record_uncork() return value was still ignored,
|
||||
possibly causing buffer to not be flushed correctly. -CG
|
||||
|
||||
Sat 26 Sep 2020 08:18:02 PM CEST
|
||||
Make MHD_USE_NO_LISTEN_SOCKET work in conjunction with
|
||||
MHD internal threads. -CG/DE
|
||||
|
||||
@@ -102,10 +102,10 @@ main (int argc, char *const *argv)
|
||||
return 1;
|
||||
}
|
||||
d = MHD_start_daemon (/* MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, */
|
||||
/* MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, */
|
||||
/* MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | MHD_USE_POLL, */
|
||||
/* MHD_USE_AUTO | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, */
|
||||
/* MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG | MHD_USE_POLL, */
|
||||
MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD
|
||||
| MHD_USE_ERROR_LOG | MHD_USE_POLL, // | MHD_USE_ITC,
|
||||
| MHD_USE_ERROR_LOG | MHD_USE_POLL, // | MHD_USE_ITC,
|
||||
/* MHD_USE_THREAD_PER_CONNECTION | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG, */
|
||||
atoi (argv[1]),
|
||||
NULL, NULL, &ahc_echo, PAGE,
|
||||
|
||||
+3
-3
@@ -283,11 +283,11 @@ list_directory (struct ResponseDataContext *rdc,
|
||||
snprintf (fullname, sizeof (fullname),
|
||||
"%s/%s",
|
||||
dirname, de->d_name))
|
||||
continue; /* ugh, file too long? how can this be!? */
|
||||
continue; /* ugh, file too long? how can this be!? */
|
||||
if (0 != stat (fullname, &sbuf))
|
||||
continue; /* ugh, failed to 'stat' */
|
||||
continue; /* ugh, failed to 'stat' */
|
||||
if (! S_ISREG (sbuf.st_mode))
|
||||
continue; /* not a regular file, skip */
|
||||
continue; /* not a regular file, skip */
|
||||
if (rdc->off + 1024 > rdc->buf_len)
|
||||
{
|
||||
void *r;
|
||||
|
||||
@@ -286,11 +286,11 @@ list_directory (struct ResponseDataContext *rdc,
|
||||
snprintf (fullname, sizeof (fullname),
|
||||
"%s/%s",
|
||||
dirname, de->d_name))
|
||||
continue; /* ugh, file too long? how can this be!? */
|
||||
continue; /* ugh, file too long? how can this be!? */
|
||||
if (0 != stat (fullname, &sbuf))
|
||||
continue; /* ugh, failed to 'stat' */
|
||||
continue; /* ugh, failed to 'stat' */
|
||||
if (! S_ISREG (sbuf.st_mode))
|
||||
continue; /* not a regular file, skip */
|
||||
continue; /* not a regular file, skip */
|
||||
if (rdc->off + 1024 > rdc->buf_len)
|
||||
{
|
||||
void *r;
|
||||
|
||||
@@ -69,13 +69,13 @@ ahc_echo (void *cls,
|
||||
*ptr = &aptr;
|
||||
return MHD_YES;
|
||||
}
|
||||
*ptr = NULL; /* reset when done */
|
||||
*ptr = NULL; /* reset when done */
|
||||
/* WARNING: direct usage of url as filename is for example only!
|
||||
* NEVER pass received data directly as parameter to file manipulation
|
||||
* functions. Always check validity of data before using.
|
||||
*/
|
||||
if (NULL != strstr (url, "../")) /* Very simplified check! */
|
||||
fd = -1; /* Do not allow usage of parent directories. */
|
||||
fd = -1; /* Do not allow usage of parent directories. */
|
||||
else
|
||||
fd = open (url + 1, O_RDONLY);
|
||||
if (-1 != fd)
|
||||
|
||||
@@ -36,40 +36,40 @@
|
||||
"<title>WebSocket chat</title>\n" \
|
||||
"<script>\n" \
|
||||
"document.addEventListener('DOMContentLoaded', function() {\n" \
|
||||
" const ws = new WebSocket('ws://' + window.location.host);\n" \
|
||||
" const btn = document.getElementById('send');\n" \
|
||||
" const msg = document.getElementById('msg');\n" \
|
||||
" const log = document.getElementById('log');\n" \
|
||||
" ws.onopen = function() {\n" \
|
||||
" log.value += 'Connected\\n';\n" \
|
||||
" };\n" \
|
||||
" ws.onclose = function() {\n" \
|
||||
" log.value += 'Disconnected\\n';\n" \
|
||||
" };\n" \
|
||||
" ws.onmessage = function(ev) {\n" \
|
||||
" log.value += ev.data + '\\n';\n" \
|
||||
" };\n" \
|
||||
" btn.onclick = function() {\n" \
|
||||
" log.value += '<You>: ' + msg.value + '\\n';\n" \
|
||||
" ws.send(msg.value);\n" \
|
||||
" };\n" \
|
||||
" msg.onkeyup = function(ev) {\n" \
|
||||
" if (ev.keyCode === 13) {\n" \
|
||||
" ev.preventDefault();\n" \
|
||||
" ev.stopPropagation();\n" \
|
||||
" btn.click();\n" \
|
||||
" msg.value = '';\n" \
|
||||
" }\n" \
|
||||
" };\n" \
|
||||
"});\n" \
|
||||
"</script>\n" \
|
||||
"</head>\n" \
|
||||
"<body>\n" \
|
||||
"<input type='text' id='msg' autofocus/>\n" \
|
||||
"<input type='button' id='send' value='Send' /><br /><br />\n" \
|
||||
"<textarea id='log' rows='20' cols='28'></textarea>\n" \
|
||||
"</body>\n" \
|
||||
"</html>"
|
||||
" const ws = new WebSocket('ws:// ' + window.location.host);\n" \
|
||||
// " const btn = document.getElementById('send');\n" \
|
||||
// " const msg = document.getElementById('msg');\n" \
|
||||
// " const log = document.getElementById('log');\n" \
|
||||
// " ws.onopen = function() {\n" \
|
||||
// " log.value += 'Connected\\n';\n" \
|
||||
// " };\n" \
|
||||
// " ws.onclose = function() {\n" \
|
||||
// " log.value += 'Disconnected\\n';\n" \
|
||||
// " };\n" \
|
||||
// " ws.onmessage = function(ev) {\n" \
|
||||
// " log.value += ev.data + '\\n';\n" \
|
||||
// " };\n" \
|
||||
// " btn.onclick = function() {\n" \
|
||||
// " log.value += '<You>: ' + msg.value + '\\n';\n" \
|
||||
// " ws.send(msg.value);\n" \
|
||||
// " };\n" \
|
||||
// " msg.onkeyup = function(ev) {\n" \
|
||||
// " if (ev.keyCode === 13) {\n" \
|
||||
// " ev.preventDefault();\n" \
|
||||
// " ev.stopPropagation();\n" \
|
||||
// " btn.click();\n" \
|
||||
// " msg.value = '';\n" \
|
||||
// " }\n" \
|
||||
// " };\n" \
|
||||
// "});\n" \
|
||||
// "</script>\n" \
|
||||
// "</head>\n" \
|
||||
// "<body>\n" \
|
||||
// "<input type='text' id='msg' autofocus/>\n" \
|
||||
// "<input type='button' id='send' value='Send' /><br /><br />\n" \
|
||||
// "<textarea id='log' rows='20' cols='28'></textarea>\n" \
|
||||
// "</body>\n" \
|
||||
// "</html>"
|
||||
#define BAD_REQUEST_PAGE \
|
||||
"<html>\n" \
|
||||
"<head>\n" \
|
||||
|
||||
@@ -132,7 +132,7 @@ typedef intptr_t ssize_t;
|
||||
* Current version of the library.
|
||||
* 0x01093001 = 1.9.30-1.
|
||||
*/
|
||||
#define MHD_VERSION 0x00097104
|
||||
#define MHD_VERSION 0x00097105
|
||||
|
||||
/**
|
||||
* Operational results from MHD calls.
|
||||
|
||||
@@ -188,8 +188,8 @@ thread_main_handle_connection (void *data)
|
||||
}
|
||||
#endif /* HAVE_POLL */
|
||||
MHD_itc_clear_ (daemon->itc);
|
||||
continue; /* Check again for resume. */
|
||||
} /* End of "suspended" branch. */
|
||||
continue; /* Check again for resume. */
|
||||
} /* End of "suspended" branch. */
|
||||
|
||||
if (was_suspended)
|
||||
{
|
||||
@@ -1047,7 +1047,7 @@ MHD_accept_connection_ (struct MHD_Daemon *daemon)
|
||||
/* This could be a common occurrence with multiple worker threads */
|
||||
if (MHD_SCKT_ERR_IS_ (err,
|
||||
MHD_SCKT_EINVAL_))
|
||||
return MHD_SC_DAEMON_ALREADY_SHUTDOWN; /* can happen during shutdown, let's hope this is the cause... */
|
||||
return MHD_SC_DAEMON_ALREADY_SHUTDOWN; /* can happen during shutdown, let's hope this is the cause... */
|
||||
if (MHD_SCKT_ERR_IS_DISCNN_BEFORE_ACCEPT_ (err))
|
||||
return MHD_SC_ACCEPT_FAST_DISCONNECT; /* do not print error if client just disconnected early */
|
||||
if (MHD_SCKT_ERR_IS_EAGAIN_ (err) )
|
||||
|
||||
@@ -90,10 +90,10 @@ MHD_update_last_activity_ (struct MHD_Connection *connection)
|
||||
struct MHD_Daemon *daemon = connection->daemon;
|
||||
|
||||
if (0 == connection->connection_timeout)
|
||||
return; /* Skip update of activity for connections
|
||||
return; /* Skip update of activity for connections
|
||||
without timeout timer. */
|
||||
if (connection->suspended)
|
||||
return; /* no activity on suspended connections */
|
||||
return; /* no activity on suspended connections */
|
||||
|
||||
connection->last_activity = MHD_monotonic_sec_counter ();
|
||||
if (MHD_TM_THREAD_PER_CONNECTION == daemon->threading_mode)
|
||||
|
||||
@@ -38,10 +38,10 @@ MHD_connection_update_last_activity_ (struct MHD_Connection *connection)
|
||||
struct MHD_Daemon *daemon = connection->daemon;
|
||||
|
||||
if (0 == connection->connection_timeout)
|
||||
return; /* Skip update of activity for connections
|
||||
return; /* Skip update of activity for connections
|
||||
without timeout timer. */
|
||||
if (connection->suspended)
|
||||
return; /* no activity on suspended connections */
|
||||
return; /* no activity on suspended connections */
|
||||
|
||||
connection->last_activity = MHD_monotonic_sec_counter ();
|
||||
if (MHD_TM_THREAD_PER_CONNECTION == daemon->threading_mode)
|
||||
|
||||
@@ -294,9 +294,9 @@ MHD_daemon_poll_all_ (struct MHD_Daemon *daemon,
|
||||
prev = pos->prev;
|
||||
/* first, sanity checks */
|
||||
if (i >= num_connections)
|
||||
break; /* connection list changed somehow, retry later ... */
|
||||
break; /* connection list changed somehow, retry later ... */
|
||||
if (p[poll_server + i].fd != pos->socket_fd)
|
||||
continue; /* fd mismatch, something else happened, retry later ... */
|
||||
continue; /* fd mismatch, something else happened, retry later ... */
|
||||
MHD_connection_call_handlers_ (pos,
|
||||
0 != (p[poll_server + i].revents & POLLIN),
|
||||
0 != (p[poll_server + i].revents
|
||||
|
||||
@@ -67,11 +67,11 @@ configure_listen_reuse (struct MHD_Daemon *daemon)
|
||||
}
|
||||
return MHD_SC_OK;
|
||||
#endif /* ! MHD_WINSOCK_SOCKETS */
|
||||
/* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms.
|
||||
* Fail if SO_REUSEPORT is not defined or setsockopt fails.
|
||||
*/
|
||||
/* SO_REUSEADDR on W32 has the same semantics
|
||||
as SO_REUSEPORT on BSD/Linux */
|
||||
/* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms.
|
||||
* Fail if SO_REUSEPORT is not defined or setsockopt fails.
|
||||
*/
|
||||
/* SO_REUSEADDR on W32 has the same semantics
|
||||
as SO_REUSEPORT on BSD/Linux */
|
||||
#if defined(MHD_WINSOCK_SOCKETS) || defined(SO_REUSEPORT)
|
||||
if (0 > setsockopt (daemon->listen_socket,
|
||||
SOL_SOCKET,
|
||||
@@ -93,8 +93,8 @@ configure_listen_reuse (struct MHD_Daemon *daemon)
|
||||
}
|
||||
return MHD_SC_OK;
|
||||
#else /* !MHD_WINSOCK_SOCKETS && !SO_REUSEPORT */
|
||||
/* we're supposed to allow address:port re-use, but
|
||||
on this platform we cannot; fail hard */
|
||||
/* we're supposed to allow address:port re-use, but
|
||||
on this platform we cannot; fail hard */
|
||||
#ifdef HAVE_MESSAGES
|
||||
MHD_DLOG (daemon,
|
||||
MHD_SC_LISTEN_ADDRESS_REUSE_ENABLE_NOT_SUPPORTED,
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@
|
||||
|
||||
struct MD5Context
|
||||
{
|
||||
uint32_t state[4]; /* state */
|
||||
uint32_t state[4]; /* state */
|
||||
uint64_t count; /* number of bits, mod 2^64 */
|
||||
uint8_t buffer[MD5_BLOCK_SIZE]; /* input buffer */
|
||||
};
|
||||
|
||||
@@ -254,8 +254,8 @@ MHD_monotonic_sec_counter_init (void)
|
||||
LARGE_INTEGER freq;
|
||||
LARGE_INTEGER perf_counter;
|
||||
|
||||
QueryPerformanceFrequency (&freq); /* never fail on XP and later */
|
||||
QueryPerformanceCounter (&perf_counter); /* never fail on XP and later */
|
||||
QueryPerformanceFrequency (&freq); /* never fail on XP and later */
|
||||
QueryPerformanceCounter (&perf_counter); /* never fail on XP and later */
|
||||
perf_freq = freq.QuadPart;
|
||||
perf_start = perf_counter.QuadPart;
|
||||
mono_clock_source = _MHD_CLOCK_PERFCOUNTER;
|
||||
|
||||
@@ -49,7 +49,8 @@
|
||||
#if defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || \
|
||||
defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI)
|
||||
# define MHD_USE_THREAD_ATTR_SETNAME 1
|
||||
#endif /* HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD || HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI */
|
||||
#endif \
|
||||
/* HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD || HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI */
|
||||
|
||||
#if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || \
|
||||
defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) \
|
||||
|
||||
+14
-14
@@ -24,7 +24,7 @@ typedef struct node
|
||||
/* $NetBSD: tsearch.c,v 1.5 2005/11/29 03:12:00 christos Exp $ */
|
||||
/* find or insert datum into search tree */
|
||||
void *
|
||||
tsearch (const void *vkey, /* key to be located */
|
||||
tsearch (const void *vkey, /* key to be located */
|
||||
void **vrootp, /* address of tree root */
|
||||
int (*compar)(const void *, const void *))
|
||||
{
|
||||
@@ -38,19 +38,19 @@ tsearch (const void *vkey, /* key to be located */
|
||||
{ /* Knuth's T1: */
|
||||
int r;
|
||||
|
||||
if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
|
||||
return *rootp; /* we found it! */
|
||||
if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
|
||||
return *rootp; /* we found it! */
|
||||
|
||||
rootp = (r < 0) ?
|
||||
&(*rootp)->llink : /* T3: follow left branch */
|
||||
&(*rootp)->rlink; /* T4: follow right branch */
|
||||
}
|
||||
|
||||
q = malloc (sizeof(node_t)); /* T5: key not found */
|
||||
q = malloc (sizeof(node_t)); /* T5: key not found */
|
||||
if (q)
|
||||
{ /* make new node */
|
||||
*rootp = q; /* link new node to old */
|
||||
q->key = vkey; /* initialize new node */
|
||||
{ /* make new node */
|
||||
*rootp = q; /* link new node to old */
|
||||
q->key = vkey; /* initialize new node */
|
||||
q->llink = q->rlink = NULL;
|
||||
}
|
||||
return q;
|
||||
@@ -73,8 +73,8 @@ tfind (const void *vkey, /* key to be found */
|
||||
{ /* T1: */
|
||||
int r;
|
||||
|
||||
if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
|
||||
return *rootp; /* key found */
|
||||
if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
|
||||
return *rootp; /* key found */
|
||||
rootp = (r < 0) ?
|
||||
&(*rootp)->llink : /* T3: follow left branch */
|
||||
&(*rootp)->rlink; /* T4: follow right branch */
|
||||
@@ -112,17 +112,17 @@ tdelete (const void *__restrict vkey,
|
||||
&(*rootp)->llink : /* follow llink branch */
|
||||
&(*rootp)->rlink; /* follow rlink branch */
|
||||
if (*rootp == NULL)
|
||||
return NULL; /* key not found */
|
||||
return NULL; /* key not found */
|
||||
}
|
||||
r = (*rootp)->rlink; /* D1: */
|
||||
if ((q = (*rootp)->llink) == NULL) /* Left NULL? */
|
||||
r = (*rootp)->rlink; /* D1: */
|
||||
if ((q = (*rootp)->llink) == NULL) /* Left NULL? */
|
||||
{
|
||||
q = r;
|
||||
}
|
||||
else if (r != NULL)
|
||||
{ /* Right link is NULL? */
|
||||
if (r->llink == NULL)
|
||||
{ /* D2: Find successor */
|
||||
{ /* D2: Find successor */
|
||||
r->llink = q;
|
||||
q = r;
|
||||
}
|
||||
@@ -135,7 +135,7 @@ tdelete (const void *__restrict vkey,
|
||||
q->rlink = (*rootp)->rlink;
|
||||
}
|
||||
}
|
||||
free (*rootp); /* D4: Free node */
|
||||
free (*rootp); /* D4: Free node */
|
||||
*rootp = q; /* link parent to new node */
|
||||
return p;
|
||||
}
|
||||
|
||||
+16
-14
@@ -115,7 +115,6 @@
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* sendfile() chuck size
|
||||
*/
|
||||
@@ -250,9 +249,9 @@ MHD_get_connection_values (struct MHD_Connection *connection,
|
||||
ret++;
|
||||
if ( (NULL != iterator) &&
|
||||
(MHD_NO == iterator (iterator_cls,
|
||||
pos->kind,
|
||||
pos->header,
|
||||
pos->value)) )
|
||||
pos->kind,
|
||||
pos->header,
|
||||
pos->value)) )
|
||||
return ret;
|
||||
}
|
||||
return ret;
|
||||
@@ -764,7 +763,8 @@ MHD_connection_finish_forward_ (struct MHD_Connection *connection)
|
||||
* used with MHD_UPGRADE_ACTION_CLOSE. They will be
|
||||
* closed by MHD_cleanup_upgraded_connection_() during
|
||||
* connection's final cleanup.
|
||||
*/}
|
||||
*///
|
||||
}
|
||||
|
||||
|
||||
#endif /* HTTPS_SUPPORT && UPGRADE_SUPPORT*/
|
||||
@@ -1141,18 +1141,18 @@ try_grow_read_buffer (struct MHD_Connection *connection,
|
||||
|
||||
avail_size = MHD_pool_get_free (connection->pool);
|
||||
if (0 == avail_size)
|
||||
return false; /* No more space available */
|
||||
return false; /* No more space available */
|
||||
if (0 == connection->read_buffer_size)
|
||||
new_size = avail_size / 2; /* Use half of available buffer for reading */
|
||||
new_size = avail_size / 2; /* Use half of available buffer for reading */
|
||||
else
|
||||
{
|
||||
size_t grow_size;
|
||||
|
||||
grow_size = avail_size / 8;
|
||||
if (MHD_BUF_INC_SIZE > grow_size)
|
||||
{ /* Shortage of space */
|
||||
{ /* Shortage of space */
|
||||
if (! required)
|
||||
return false; /* Grow is not mandatory, leave some space in pool */
|
||||
return false; /* Grow is not mandatory, leave some space in pool */
|
||||
else
|
||||
{
|
||||
/* Shortage of space, but grow is mandatory */
|
||||
@@ -1403,7 +1403,8 @@ build_header_response (struct MHD_Connection *connection)
|
||||
|
||||
Note that the change from 'SHOULD NOT' to 'MUST NOT' is
|
||||
a recent development of the HTTP 1.1 specification.
|
||||
*/content_length_len
|
||||
*///
|
||||
content_length_len
|
||||
= MHD_snprintf_ (content_length_buf,
|
||||
sizeof (content_length_buf),
|
||||
MHD_HTTP_HEADER_CONTENT_LENGTH ": "
|
||||
@@ -2438,8 +2439,9 @@ static enum MHD_Result
|
||||
check_write_done (struct MHD_Connection *connection,
|
||||
enum MHD_CONNECTION_STATE next_state)
|
||||
{
|
||||
if (connection->write_buffer_append_offset !=
|
||||
connection->write_buffer_send_offset)
|
||||
if ( (connection->write_buffer_append_offset !=
|
||||
connection->write_buffer_send_offset) ||
|
||||
(connection->sk_cork_on) )
|
||||
return MHD_NO;
|
||||
connection->write_buffer_append_offset = 0;
|
||||
connection->write_buffer_send_offset = 0;
|
||||
@@ -2722,10 +2724,10 @@ MHD_update_last_activity_ (struct MHD_Connection *connection)
|
||||
struct MHD_Daemon *daemon = connection->daemon;
|
||||
|
||||
if (0 == connection->connection_timeout)
|
||||
return; /* Skip update of activity for connections
|
||||
return; /* Skip update of activity for connections
|
||||
without timeout timer. */
|
||||
if (connection->suspended)
|
||||
return; /* no activity on suspended connections */
|
||||
return; /* no activity on suspended connections */
|
||||
|
||||
connection->last_activity = MHD_monotonic_sec_counter ();
|
||||
if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
|
||||
|
||||
+84
-75
@@ -1333,6 +1333,7 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
|
||||
* this function. If 'was_closed' changed externally in the middle
|
||||
* of processing - it will be processed on next iteration. */
|
||||
bool was_closed;
|
||||
|
||||
if (daemon->shutdown)
|
||||
{
|
||||
/* Daemon shutting down, application will not receive any more data. */
|
||||
@@ -1355,10 +1356,9 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
|
||||
{
|
||||
#ifdef HAVE_MESSAGES
|
||||
MHD_DLOG (daemon,
|
||||
_ (
|
||||
"Failed to forward to application "
|
||||
MHD_UNSIGNED_LONG_LONG_PRINTF \
|
||||
" bytes of data received from remote side: application shut down socket.\n"),
|
||||
_ ("Failed to forward to application "
|
||||
MHD_UNSIGNED_LONG_LONG_PRINTF \
|
||||
" bytes of data received from remote side: application shut down socket.\n"),
|
||||
(MHD_UNSIGNED_LONG_LONG) urh->in_buffer_used);
|
||||
#endif
|
||||
|
||||
@@ -1367,7 +1367,8 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
|
||||
* check for any pending data even if socket is not marked
|
||||
* as 'ready' (signal may arrive after poll()/select()).
|
||||
* Socketpair for forwarding is always in non-blocking mode
|
||||
* so no risk that recv() will block the thread. */if (0 != urh->out_buffer_size)
|
||||
* so no risk that recv() will block the thread. *///
|
||||
if (0 != urh->out_buffer_size)
|
||||
urh->mhd.celi |= MHD_EPOLL_STATE_READ_READY;
|
||||
/* Discard any data received form remote. */
|
||||
urh->in_buffer_used = 0;
|
||||
@@ -1379,12 +1380,14 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
|
||||
connection->tls_read_ready = false;
|
||||
}
|
||||
|
||||
/* On some platforms (W32, possibly Darwin) failed send() (send() will always
|
||||
* fail after remote disconnect was detected) may discard data in system
|
||||
* buffers received by system but not yet read by recv().
|
||||
* So, before trying send() on any socket, recv() must be performed at first
|
||||
* otherwise last part of incoming data may be lost. *//* If disconnect or error was detected - try to read from socket
|
||||
* to dry data possibly pending is system buffers. */if (0 != (MHD_EPOLL_STATE_ERROR & urh->app.celi))
|
||||
/* On some platforms (W32, possibly Darwin) failed send() (send() will
|
||||
* always fail after remote disconnect was detected) may discard data in
|
||||
* system buffers received by system but not yet read by recv(). So, before
|
||||
* trying send() on any socket, recv() must be performed at first otherwise
|
||||
* last part of incoming data may be lost. If disconnect or error was
|
||||
* detected - try to read from socket to dry data possibly pending is system
|
||||
* buffers. *///
|
||||
if (0 != (MHD_EPOLL_STATE_ERROR & urh->app.celi))
|
||||
urh->app.celi |= MHD_EPOLL_STATE_READ_READY;
|
||||
if (0 != (MHD_EPOLL_STATE_ERROR & urh->mhd.celi))
|
||||
urh->mhd.celi |= MHD_EPOLL_STATE_READ_READY;
|
||||
@@ -1424,10 +1427,10 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
|
||||
else /* 0 < res */
|
||||
{
|
||||
urh->in_buffer_used += res;
|
||||
if (buf_size > (size_t) res)
|
||||
urh->app.celi &= ~MHD_EPOLL_STATE_READ_READY;
|
||||
else if (0 < gnutls_record_check_pending (connection->tls_session))
|
||||
if (0 < gnutls_record_check_pending (connection->tls_session))
|
||||
{
|
||||
connection->tls_read_ready = true;
|
||||
}
|
||||
}
|
||||
if (MHD_EPOLL_STATE_ERROR ==
|
||||
((MHD_EPOLL_STATE_ERROR | MHD_EPOLL_STATE_READ_READY) & urh->app.celi))
|
||||
@@ -1932,8 +1935,8 @@ thread_main_handle_connection (void *data)
|
||||
}
|
||||
#endif /* HAVE_POLL */
|
||||
MHD_itc_clear_ (daemon->itc);
|
||||
continue; /* Check again for resume. */
|
||||
} /* End of "suspended" branch. */
|
||||
continue; /* Check again for resume. */
|
||||
} /* End of "suspended" branch. */
|
||||
|
||||
if (was_suspended)
|
||||
{
|
||||
@@ -2228,7 +2231,8 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon);
|
||||
* and if possible.
|
||||
*/
|
||||
#define MHD_TLSLIB_NEED_PUSH_FUNC 1
|
||||
#endif /* !MHD_WINSOCK_SOCKETS && !MHD_socket_nosignal_ && (GNUTLS_VERSION_NUMBER+0 < 0x030402) */
|
||||
#endif \
|
||||
/* !MHD_WINSOCK_SOCKETS && !MHD_socket_nosignal_ && (GNUTLS_VERSION_NUMBER+0 < 0x030402) */
|
||||
|
||||
#ifdef MHD_TLSLIB_NEED_PUSH_FUNC
|
||||
/**
|
||||
@@ -3379,7 +3383,8 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon)
|
||||
this is not true as if we fail to do manually remove it,
|
||||
we are still seeing an event for this fd in epoll,
|
||||
causing grief (use-after-free...) --- at least on my
|
||||
system. */if (0 != epoll_ctl (daemon->epoll_fd,
|
||||
system. *///
|
||||
if (0 != epoll_ctl (daemon->epoll_fd,
|
||||
EPOLL_CTL_DEL,
|
||||
pos->socket_fd,
|
||||
NULL))
|
||||
@@ -3831,9 +3836,9 @@ MHD_select (struct MHD_Daemon *daemon,
|
||||
return MHD_NO;
|
||||
}
|
||||
if (MHD_NO != internal_run_from_select (daemon,
|
||||
&rs,
|
||||
&ws,
|
||||
&es))
|
||||
&rs,
|
||||
&ws,
|
||||
&es))
|
||||
return (MHD_NO == err_state) ? MHD_YES : MHD_NO;
|
||||
return MHD_NO;
|
||||
}
|
||||
@@ -3920,7 +3925,7 @@ MHD_poll_all (struct MHD_Daemon *daemon,
|
||||
timeout = 0;
|
||||
else if ( (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) ||
|
||||
(MHD_NO == MHD_get_timeout (daemon,
|
||||
<imeout)) )
|
||||
<imeout)) )
|
||||
timeout = -1;
|
||||
else
|
||||
timeout = (ltimeout > INT_MAX) ? INT_MAX : (int) ltimeout;
|
||||
@@ -4000,9 +4005,9 @@ MHD_poll_all (struct MHD_Daemon *daemon,
|
||||
prev = pos->prev;
|
||||
/* first, sanity checks */
|
||||
if (i >= num_connections)
|
||||
break; /* connection list changed somehow, retry later ... */
|
||||
break; /* connection list changed somehow, retry later ... */
|
||||
if (p[poll_server + i].fd != pos->socket_fd)
|
||||
continue; /* fd mismatch, something else happened, retry later ... */
|
||||
continue; /* fd mismatch, something else happened, retry later ... */
|
||||
call_handlers (pos,
|
||||
0 != (p[poll_server + i].revents & POLLIN),
|
||||
0 != (p[poll_server + i].revents & POLLOUT),
|
||||
@@ -4267,22 +4272,26 @@ run_epoll_for_upgrade (struct MHD_Daemon *daemon)
|
||||
|
||||
/* Update ueh state based on what is ready according to epoll() */
|
||||
if (0 != (events[i].events & EPOLLIN))
|
||||
{
|
||||
ueh->celi |= MHD_EPOLL_STATE_READ_READY;
|
||||
}
|
||||
if (0 != (events[i].events & EPOLLOUT))
|
||||
{
|
||||
ueh->celi |= MHD_EPOLL_STATE_WRITE_READY;
|
||||
}
|
||||
if (0 != (events[i].events & EPOLLHUP))
|
||||
{
|
||||
ueh->celi |= MHD_EPOLL_STATE_READ_READY | MHD_EPOLL_STATE_WRITE_READY;
|
||||
}
|
||||
|
||||
if ( (0 == (ueh->celi & MHD_EPOLL_STATE_ERROR)) &&
|
||||
(0 != (events[i].events & (EPOLLERR | EPOLLPRI))) )
|
||||
{
|
||||
/* Process new error state only one time
|
||||
* and avoid continuously marking this connection
|
||||
* as 'ready'. */
|
||||
/* Process new error state only one time and avoid continuously
|
||||
* marking this connection as 'ready'. */
|
||||
ueh->celi |= MHD_EPOLL_STATE_ERROR;
|
||||
new_err_state = true;
|
||||
}
|
||||
|
||||
if (! urh->in_eready_list)
|
||||
{
|
||||
if (new_err_state ||
|
||||
@@ -4447,7 +4456,7 @@ MHD_epoll (struct MHD_Daemon *daemon,
|
||||
if (MHD_NO != may_block)
|
||||
{
|
||||
if (MHD_NO != MHD_get_timeout (daemon,
|
||||
&timeout_ll))
|
||||
&timeout_ll))
|
||||
{
|
||||
if (timeout_ll >= (MHD_UNSIGNED_LONG_LONG) INT_MAX)
|
||||
timeout_ms = INT_MAX;
|
||||
@@ -5406,10 +5415,10 @@ parse_options_va (struct MHD_Daemon *daemon,
|
||||
case MHD_OPTION_CONNECTION_MEMORY_INCREMENT:
|
||||
case MHD_OPTION_THREAD_STACK_SIZE:
|
||||
if (MHD_NO == parse_options (daemon,
|
||||
servaddr,
|
||||
opt,
|
||||
(size_t) oa[i].value,
|
||||
MHD_OPTION_END))
|
||||
servaddr,
|
||||
opt,
|
||||
(size_t) oa[i].value,
|
||||
MHD_OPTION_END))
|
||||
return MHD_NO;
|
||||
break;
|
||||
/* all options taking 'unsigned int' */
|
||||
@@ -5423,39 +5432,39 @@ parse_options_va (struct MHD_Daemon *daemon,
|
||||
case MHD_OPTION_LISTEN_BACKLOG_SIZE:
|
||||
case MHD_OPTION_SERVER_INSANITY:
|
||||
if (MHD_NO == parse_options (daemon,
|
||||
servaddr,
|
||||
opt,
|
||||
(unsigned int) oa[i].value,
|
||||
MHD_OPTION_END))
|
||||
servaddr,
|
||||
opt,
|
||||
(unsigned int) oa[i].value,
|
||||
MHD_OPTION_END))
|
||||
return MHD_NO;
|
||||
break;
|
||||
/* all options taking 'enum' */
|
||||
#ifdef HTTPS_SUPPORT
|
||||
case MHD_OPTION_HTTPS_CRED_TYPE:
|
||||
if (MHD_NO == parse_options (daemon,
|
||||
servaddr,
|
||||
opt,
|
||||
(gnutls_credentials_type_t) oa[i].value,
|
||||
MHD_OPTION_END))
|
||||
servaddr,
|
||||
opt,
|
||||
(gnutls_credentials_type_t) oa[i].value,
|
||||
MHD_OPTION_END))
|
||||
return MHD_NO;
|
||||
break;
|
||||
#endif /* HTTPS_SUPPORT */
|
||||
/* all options taking 'MHD_socket' */
|
||||
case MHD_OPTION_LISTEN_SOCKET:
|
||||
if (MHD_NO == parse_options (daemon,
|
||||
servaddr,
|
||||
opt,
|
||||
(MHD_socket) oa[i].value,
|
||||
MHD_OPTION_END))
|
||||
servaddr,
|
||||
opt,
|
||||
(MHD_socket) oa[i].value,
|
||||
MHD_OPTION_END))
|
||||
return MHD_NO;
|
||||
break;
|
||||
/* all options taking 'int' */
|
||||
case MHD_OPTION_STRICT_FOR_CLIENT:
|
||||
if (MHD_NO == parse_options (daemon,
|
||||
servaddr,
|
||||
opt,
|
||||
(int) oa[i].value,
|
||||
MHD_OPTION_END))
|
||||
servaddr,
|
||||
opt,
|
||||
(int) oa[i].value,
|
||||
MHD_OPTION_END))
|
||||
return MHD_NO;
|
||||
break;
|
||||
/* all options taking one pointer */
|
||||
@@ -5470,10 +5479,10 @@ parse_options_va (struct MHD_Daemon *daemon,
|
||||
case MHD_OPTION_HTTPS_CERT_CALLBACK:
|
||||
case MHD_OPTION_HTTPS_CERT_CALLBACK2:
|
||||
if (MHD_NO == parse_options (daemon,
|
||||
servaddr,
|
||||
opt,
|
||||
oa[i].ptr_value,
|
||||
MHD_OPTION_END))
|
||||
servaddr,
|
||||
opt,
|
||||
oa[i].ptr_value,
|
||||
MHD_OPTION_END))
|
||||
return MHD_NO;
|
||||
break;
|
||||
/* all options taking two pointers */
|
||||
@@ -5484,21 +5493,21 @@ parse_options_va (struct MHD_Daemon *daemon,
|
||||
case MHD_OPTION_UNESCAPE_CALLBACK:
|
||||
case MHD_OPTION_GNUTLS_PSK_CRED_HANDLER:
|
||||
if (MHD_NO == parse_options (daemon,
|
||||
servaddr,
|
||||
opt,
|
||||
(void *) oa[i].value,
|
||||
oa[i].ptr_value,
|
||||
MHD_OPTION_END))
|
||||
servaddr,
|
||||
opt,
|
||||
(void *) oa[i].value,
|
||||
oa[i].ptr_value,
|
||||
MHD_OPTION_END))
|
||||
return MHD_NO;
|
||||
break;
|
||||
/* options taking size_t-number followed by pointer */
|
||||
case MHD_OPTION_DIGEST_AUTH_RANDOM:
|
||||
if (MHD_NO == parse_options (daemon,
|
||||
servaddr,
|
||||
opt,
|
||||
(size_t) oa[i].value,
|
||||
oa[i].ptr_value,
|
||||
MHD_OPTION_END))
|
||||
servaddr,
|
||||
opt,
|
||||
(size_t) oa[i].value,
|
||||
oa[i].ptr_value,
|
||||
MHD_OPTION_END))
|
||||
return MHD_NO;
|
||||
break;
|
||||
default:
|
||||
@@ -5761,7 +5770,7 @@ MHD_start_daemon_va (unsigned int flags,
|
||||
#ifdef HAVE_POLL
|
||||
*pflags |= MHD_USE_POLL;
|
||||
#else /* ! HAVE_POLL */
|
||||
/* use select() - do not modify flags */
|
||||
/* use select() - do not modify flags */
|
||||
#endif /* ! HAVE_POLL */
|
||||
}
|
||||
else if (0 != (*pflags & MHD_USE_INTERNAL_POLLING_THREAD))
|
||||
@@ -5772,7 +5781,7 @@ MHD_start_daemon_va (unsigned int flags,
|
||||
#elif defined(HAVE_POLL)
|
||||
*pflags |= MHD_USE_POLL;
|
||||
#else /* !HAVE_POLL && !EPOLL_SUPPORT */
|
||||
/* use select() - do not modify flags */
|
||||
/* use select() - do not modify flags */
|
||||
#endif /* !HAVE_POLL && !EPOLL_SUPPORT */
|
||||
}
|
||||
else
|
||||
@@ -5781,7 +5790,7 @@ MHD_start_daemon_va (unsigned int flags,
|
||||
#if defined(EPOLL_SUPPORT)
|
||||
*pflags |= MHD_USE_EPOLL;
|
||||
#else /* ! EPOLL_SUPPORT */
|
||||
/* use select() - do not modify flags */
|
||||
/* use select() - do not modify flags */
|
||||
#endif /* ! EPOLL_SUPPORT */
|
||||
}
|
||||
}
|
||||
@@ -5866,8 +5875,8 @@ MHD_start_daemon_va (unsigned int flags,
|
||||
|
||||
|
||||
if (MHD_NO == parse_options_va (daemon,
|
||||
&servaddr,
|
||||
ap))
|
||||
&servaddr,
|
||||
ap))
|
||||
{
|
||||
#ifdef HTTPS_SUPPORT
|
||||
if ( (0 != (*pflags & MHD_USE_TLS)) &&
|
||||
@@ -6057,11 +6066,11 @@ MHD_start_daemon_va (unsigned int flags,
|
||||
#endif
|
||||
}
|
||||
#endif /* ! MHD_WINSOCK_SOCKETS */
|
||||
/* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms.
|
||||
* Fail if SO_REUSEPORT is not defined or setsockopt fails.
|
||||
*/
|
||||
/* SO_REUSEADDR on W32 has the same semantics
|
||||
as SO_REUSEPORT on BSD/Linux */
|
||||
/* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms.
|
||||
* Fail if SO_REUSEPORT is not defined or setsockopt fails.
|
||||
*/
|
||||
/* SO_REUSEADDR on W32 has the same semantics
|
||||
as SO_REUSEPORT on BSD/Linux */
|
||||
#if defined(MHD_WINSOCK_SOCKETS) || defined(SO_REUSEPORT)
|
||||
if (0 > setsockopt (listen_fd,
|
||||
SOL_SOCKET,
|
||||
@@ -6081,8 +6090,8 @@ MHD_start_daemon_va (unsigned int flags,
|
||||
goto free_and_fail;
|
||||
}
|
||||
#else /* !MHD_WINSOCK_SOCKETS && !SO_REUSEPORT */
|
||||
/* we're supposed to allow address:port re-use, but
|
||||
on this platform we cannot; fail hard */
|
||||
/* we're supposed to allow address:port re-use, but
|
||||
on this platform we cannot; fail hard */
|
||||
#ifdef HAVE_MESSAGES
|
||||
MHD_DLOG (daemon,
|
||||
_ (
|
||||
|
||||
@@ -604,9 +604,9 @@ check_nonce_nc (struct MHD_Connection *connection,
|
||||
}
|
||||
/* Nonce is larger, shift bitmask and bump limit */
|
||||
if (64 > nc - nn->nc)
|
||||
nn->nmask <<= (nc - nn->nc); /* small jump, less than mask width */
|
||||
nn->nmask <<= (nc - nn->nc); /* small jump, less than mask width */
|
||||
else
|
||||
nn->nmask = 0; /* big jump, unset all bits in the mask */
|
||||
nn->nmask = 0; /* big jump, unset all bits in the mask */
|
||||
nn->nc = nc;
|
||||
#if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
|
||||
MHD_mutex_unlock_chk_ (&daemon->nnc_lock);
|
||||
|
||||
+20
-20
@@ -214,11 +214,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection,
|
||||
connection,
|
||||
args);
|
||||
if (MHD_NO == cb (connection,
|
||||
args,
|
||||
key_len,
|
||||
NULL,
|
||||
0,
|
||||
kind))
|
||||
args,
|
||||
key_len,
|
||||
NULL,
|
||||
0,
|
||||
kind))
|
||||
return MHD_NO;
|
||||
(*num_headers)++;
|
||||
break;
|
||||
@@ -235,11 +235,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection,
|
||||
connection,
|
||||
equals);
|
||||
if (MHD_NO == cb (connection,
|
||||
args,
|
||||
key_len,
|
||||
equals,
|
||||
value_len,
|
||||
kind))
|
||||
args,
|
||||
key_len,
|
||||
equals,
|
||||
value_len,
|
||||
kind))
|
||||
return MHD_NO;
|
||||
(*num_headers)++;
|
||||
break;
|
||||
@@ -256,11 +256,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection,
|
||||
connection,
|
||||
args);
|
||||
if (MHD_NO == cb (connection,
|
||||
args,
|
||||
key_len,
|
||||
NULL,
|
||||
0,
|
||||
kind))
|
||||
args,
|
||||
key_len,
|
||||
NULL,
|
||||
0,
|
||||
kind))
|
||||
return MHD_NO;
|
||||
/* continue with 'bar' */
|
||||
(*num_headers)++;
|
||||
@@ -280,11 +280,11 @@ MHD_parse_arguments_ (struct MHD_Connection *connection,
|
||||
connection,
|
||||
equals);
|
||||
if (MHD_NO == cb (connection,
|
||||
args,
|
||||
key_len,
|
||||
equals,
|
||||
value_len,
|
||||
kind))
|
||||
args,
|
||||
key_len,
|
||||
equals,
|
||||
value_len,
|
||||
kind))
|
||||
return MHD_NO;
|
||||
(*num_headers)++;
|
||||
args = amper;
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
MHD_PANIC (_ ("Failed to close FD.\n")); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
/*
|
||||
#define EXTRA_CHECKS _MHD_MACRO_NO
|
||||
* Not used. Behaviour is controlled by _DEBUG/NDEBUG macros.
|
||||
*/
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
struct MD5Context
|
||||
{
|
||||
uint32_t state[4]; /* state */
|
||||
uint32_t state[4]; /* state */
|
||||
uint64_t count; /* number of bytes, mod 2^64 */
|
||||
uint8_t buffer[MD5_BLOCK_SIZE]; /* input buffer */
|
||||
};
|
||||
|
||||
@@ -336,10 +336,10 @@ MHD_pool_reallocate (struct MemoryPool *pool,
|
||||
{ /* "old" block is the last allocated block */
|
||||
const size_t new_apos = ROUND_TO_ALIGN (old_offset + new_size);
|
||||
if (! shrinking)
|
||||
{ /* Grow in-place, check for enough space. */
|
||||
{ /* Grow in-place, check for enough space. */
|
||||
if ( (new_apos > pool->end) ||
|
||||
(new_apos < pool->pos) ) /* Value wrap */
|
||||
return NULL; /* No space */
|
||||
(new_apos < pool->pos) ) /* Value wrap */
|
||||
return NULL; /* No space */
|
||||
}
|
||||
/* Resized in-place */
|
||||
pool->pos = new_apos;
|
||||
|
||||
@@ -254,8 +254,8 @@ MHD_monotonic_sec_counter_init (void)
|
||||
LARGE_INTEGER freq;
|
||||
LARGE_INTEGER perf_counter;
|
||||
|
||||
QueryPerformanceFrequency (&freq); /* never fail on XP and later */
|
||||
QueryPerformanceCounter (&perf_counter); /* never fail on XP and later */
|
||||
QueryPerformanceFrequency (&freq); /* never fail on XP and later */
|
||||
QueryPerformanceCounter (&perf_counter); /* never fail on XP and later */
|
||||
perf_freq = freq.QuadPart;
|
||||
perf_start = perf_counter.QuadPart;
|
||||
mono_clock_source = _MHD_CLOCK_PERFCOUNTER;
|
||||
|
||||
@@ -405,7 +405,11 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection,
|
||||
(0 == buffer_size) &&
|
||||
connection->sk_cork_on)
|
||||
{
|
||||
(void) gnutls_record_uncork (connection->tls_session, 0);
|
||||
int err;
|
||||
|
||||
err = gnutls_record_uncork (connection->tls_session, 0);
|
||||
if (0 > err)
|
||||
return ret;
|
||||
connection->sk_cork_on = false;
|
||||
}
|
||||
return ret;
|
||||
@@ -434,6 +438,9 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection,
|
||||
msg.msg_iovlen = 2;
|
||||
|
||||
ret = sendmsg (s, &msg, MAYBE_MSG_NOSIGNAL);
|
||||
if ( (-1 == ret) &&
|
||||
(EAGAIN == errno) )
|
||||
return MHD_ERR_AGAIN_;
|
||||
}
|
||||
#elif HAVE_WRITEV
|
||||
{
|
||||
@@ -441,6 +448,9 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection,
|
||||
|
||||
iovcnt = sizeof (vector) / sizeof (struct iovec);
|
||||
ret = writev (s, vector, iovcnt);
|
||||
if ( (-1 == ret) &&
|
||||
(EAGAIN == errno) )
|
||||
return MHD_ERR_AGAIN_;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -49,7 +49,8 @@
|
||||
#if defined(HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD) || \
|
||||
defined(HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI)
|
||||
# define MHD_USE_THREAD_ATTR_SETNAME 1
|
||||
#endif /* HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD || HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI */
|
||||
#endif \
|
||||
/* HAVE_PTHREAD_ATTR_SETNAME_NP_NETBSD || HAVE_PTHREAD_ATTR_SETNAME_NP_IBMI */
|
||||
|
||||
#if defined(HAVE_PTHREAD_SETNAME_NP_GNU) || \
|
||||
defined(HAVE_PTHREAD_SET_NAME_NP_FREEBSD) \
|
||||
|
||||
@@ -801,13 +801,13 @@ find_boundary (struct MHD_PostProcessor *pp,
|
||||
'-',
|
||||
pp->buffer_pos);
|
||||
if (NULL == dash)
|
||||
(*ioffptr) += pp->buffer_pos; /* skip entire buffer */
|
||||
(*ioffptr) += pp->buffer_pos; /* skip entire buffer */
|
||||
else if (dash == buf)
|
||||
(*ioffptr)++; /* at least skip one byte */
|
||||
(*ioffptr)++; /* at least skip one byte */
|
||||
else
|
||||
(*ioffptr) += dash - buf; /* skip to first possible boundary */
|
||||
(*ioffptr) += dash - buf; /* skip to first possible boundary */
|
||||
}
|
||||
return MHD_NO; /* expected boundary */
|
||||
return MHD_NO; /* expected boundary */
|
||||
}
|
||||
/* remove boundary from buffer */
|
||||
(*ioffptr) += 2 + blen;
|
||||
|
||||
@@ -263,9 +263,9 @@ MHD_get_response_headers (struct MHD_Response *response,
|
||||
numHeaders++;
|
||||
if ((NULL != iterator) &&
|
||||
(MHD_NO == iterator (iterator_cls,
|
||||
pos->kind,
|
||||
pos->header,
|
||||
pos->value)))
|
||||
pos->kind,
|
||||
pos->header,
|
||||
pos->value)))
|
||||
break;
|
||||
}
|
||||
return numHeaders;
|
||||
@@ -919,7 +919,11 @@ MHD_upgrade_action (struct MHD_UpgradeResponseHandle *urh,
|
||||
#ifdef HTTPS_SUPPORT
|
||||
if (0 != (daemon->options & MHD_USE_TLS) )
|
||||
{
|
||||
gnutls_record_uncork (connection->tls_session, 0);
|
||||
int err;
|
||||
|
||||
err = gnutls_record_uncork (connection->tls_session, 0);
|
||||
if (0 > err)
|
||||
return MHD_NO;
|
||||
connection->sk_cork_on = false;
|
||||
return MHD_YES;
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ struct sha256_ctx
|
||||
{
|
||||
uint32_t H[_SHA256_DIGEST_LENGTH]; /**< Intermediate hash value / digest at end of calculation */
|
||||
uint64_t count; /**< number of bytes, mod 2^64 */
|
||||
uint8_t buffer[SHA256_BLOCK_SIZE]; /**< SHA256 input data buffer */
|
||||
uint8_t buffer[SHA256_BLOCK_SIZE]; /**< SHA256 input data buffer */
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -83,9 +83,9 @@ ahc_nothing (void *cls,
|
||||
const char *upload_data, size_t *upload_data_size,
|
||||
void **unused)
|
||||
{
|
||||
(void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */
|
||||
(void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
|
||||
(void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */
|
||||
(void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
|
||||
|
||||
return MHD_NO;
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ value_checker (void *cls,
|
||||
const char *data, uint64_t off, size_t size)
|
||||
{
|
||||
unsigned int *pos = cls;
|
||||
(void) kind; (void) key; (void) filename; (void) content_type; /* Unused. Silent compiler warning. */
|
||||
(void) kind; (void) key; (void) filename; (void) content_type; /* Unused. Silent compiler warning. */
|
||||
(void) transfer_encoding; (void) data; (void) off; /* Unused. Silent compiler warning. */
|
||||
#if 0
|
||||
fprintf (stderr,
|
||||
|
||||
@@ -44,9 +44,9 @@ ahc_echo (void *cls,
|
||||
const char *upload_data, size_t *upload_data_size,
|
||||
void **unused)
|
||||
{
|
||||
(void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */
|
||||
(void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
|
||||
(void) cls; (void) connection; (void) url; /* Unused. Silent compiler warning. */
|
||||
(void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
|
||||
|
||||
return MHD_NO;
|
||||
}
|
||||
|
||||
+70
-70
@@ -50,9 +50,9 @@ static const char *const locale_names[] = {
|
||||
"C",
|
||||
"", /* System default locale */
|
||||
#if defined(_WIN32) && ! defined(__CYGWIN__)
|
||||
".OCP", /* W32 system default OEM code page */
|
||||
".ACP", /* W32 system default ANSI code page */
|
||||
".65001", /* UTF-8 */
|
||||
".OCP", /* W32 system default OEM code page */
|
||||
".ACP", /* W32 system default ANSI code page */
|
||||
".65001", /* UTF-8 */
|
||||
".437",
|
||||
".850",
|
||||
".857",
|
||||
@@ -455,50 +455,50 @@ static const struct two_neq_strs neq_strings[] = {
|
||||
{D_STR_W_LEN ("zyxwvutsrqponwMLKJIHGFEDCBA"), D_STR_W_LEN (
|
||||
"ZYXWVUTSRQPON%mlkjihgfedcba"), 13},
|
||||
|
||||
{D_STR_W_LEN ("S\xbdur veulent plus d'\xbdufs."), /* "Sœur veulent plus d'œufs." in ISO-8859-15 */
|
||||
{D_STR_W_LEN ("S\xbdur veulent plus d'\xbdufs."), /* "Sœur veulent plus d'œufs." in ISO-8859-15 */
|
||||
D_STR_W_LEN ("S\xbcUR VEULENT PLUS D'\xbcUFS."), 1}, /* "SŒUR VEULENT PLUS D'ŒUFS." in ISO-8859-15 */
|
||||
{D_STR_W_LEN ("S\x9cur veulent plus d'\x9cufs."), /* "Sœur veulent plus d'œufs." in CP1252 */
|
||||
{D_STR_W_LEN ("S\x9cur veulent plus d'\x9cufs."), /* "Sœur veulent plus d'œufs." in CP1252 */
|
||||
D_STR_W_LEN ("S\x8cUR VEULENT PLUS D'\x8cUFS."), 1}, /* "SŒUR VEULENT PLUS D'ŒUFS." in CP1252 */
|
||||
{D_STR_W_LEN ("S\xc5\x93ur veulent plus d'\xc5\x93ufs."), /* "Sœur veulent plus d'œufs." in UTF-8 */
|
||||
{D_STR_W_LEN ("S\xc5\x93ur veulent plus d'\xc5\x93ufs."), /* "Sœur veulent plus d'œufs." in UTF-8 */
|
||||
D_STR_W_LEN ("S\xc5\x92UR VEULENT PLUS D'\xc5\x92UFS."), 2}, /* "SŒUR VEULENT PLUS D'ŒUFS." in UTF-8 */
|
||||
|
||||
{D_STR_W_LEN ("Um ein sch\x94nes M\x84" "dchen zu k\x81ssen."), /* "Um ein schönes Mädchen zu küssen." in CP850 */
|
||||
{D_STR_W_LEN ("Um ein sch\x94nes M\x84" "dchen zu k\x81ssen."), /* "Um ein schönes Mädchen zu küssen." in CP850 */
|
||||
D_STR_W_LEN ("UM EIN SCH\x99NES M\x8e" "DCHEN ZU K\x9aSSEN."), 10}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in CP850 */
|
||||
{D_STR_W_LEN ("Um ein sch\xf6nes M\xe4" "dchen zu k\xfcssen."), /* "Um ein schönes Mädchen zu küssen." in ISO-8859-1/ISO-8859-15/CP1250/CP1252 */
|
||||
{D_STR_W_LEN ("Um ein sch\xf6nes M\xe4" "dchen zu k\xfcssen."), /* "Um ein schönes Mädchen zu küssen." in ISO-8859-1/ISO-8859-15/CP1250/CP1252 */
|
||||
D_STR_W_LEN ("UM EIN SCH\xd6NES M\xc4" "DCHEN ZU K\xdcSSEN."), 10}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in ISO-8859-1/ISO-8859-15/CP1250/CP1252 */
|
||||
{D_STR_W_LEN ("Um ein sch\xc3\xb6nes M\xc3\xa4" "dchen zu k\xc3\xbcssen."), /* "Um ein schönes Mädchen zu küssen." in UTF-8 */
|
||||
{D_STR_W_LEN ("Um ein sch\xc3\xb6nes M\xc3\xa4" "dchen zu k\xc3\xbcssen."), /* "Um ein schönes Mädchen zu küssen." in UTF-8 */
|
||||
D_STR_W_LEN ("UM EIN SCH\xc3\x96NES M\xc3\x84" "DCHEN ZU K\xc3\x9cSSEN."),
|
||||
11}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in UTF-8 */
|
||||
11}, /* "UM EIN SCHÖNES MÄDCHEN ZU KÜSSEN." in UTF-8 */
|
||||
|
||||
{D_STR_W_LEN ("\x98stanbul"), /* "İstanbul" in CP857 */
|
||||
D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in CP857 */
|
||||
{D_STR_W_LEN ("\xddstanbul"), /* "İstanbul" in ISO-8859-9/CP1254 */
|
||||
D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in ISO-8859-9/CP1254 */
|
||||
{D_STR_W_LEN ("\xc4\xb0stanbul"), /* "İstanbul" in UTF-8 */
|
||||
D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in UTF-8 */
|
||||
{D_STR_W_LEN ("Diyarbak\x8dr"), /* "Diyarbakır" in CP857 */
|
||||
D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in CP857 */
|
||||
{D_STR_W_LEN ("Diyarbak\xfdr"), /* "Diyarbakır" in ISO-8859-9/CP1254 */
|
||||
D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in ISO-8859-9/CP1254 */
|
||||
{D_STR_W_LEN ("Diyarbak\xc4\xb1r"), /* "Diyarbakır" in UTF-8 */
|
||||
D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in UTF-8 */
|
||||
{D_STR_W_LEN ("\x98stanbul"), /* "İstanbul" in CP857 */
|
||||
D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in CP857 */
|
||||
{D_STR_W_LEN ("\xddstanbul"), /* "İstanbul" in ISO-8859-9/CP1254 */
|
||||
D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in ISO-8859-9/CP1254 */
|
||||
{D_STR_W_LEN ("\xc4\xb0stanbul"), /* "İstanbul" in UTF-8 */
|
||||
D_STR_W_LEN ("istanbul"), 0}, /* "istanbul" in UTF-8 */
|
||||
{D_STR_W_LEN ("Diyarbak\x8dr"), /* "Diyarbakır" in CP857 */
|
||||
D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in CP857 */
|
||||
{D_STR_W_LEN ("Diyarbak\xfdr"), /* "Diyarbakır" in ISO-8859-9/CP1254 */
|
||||
D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in ISO-8859-9/CP1254 */
|
||||
{D_STR_W_LEN ("Diyarbak\xc4\xb1r"), /* "Diyarbakır" in UTF-8 */
|
||||
D_STR_W_LEN ("DiyarbakIR"), 8}, /* "DiyarbakIR" in UTF-8 */
|
||||
|
||||
{D_STR_W_LEN ("\x92\xa5\xe1\xe2\xae\xa2\xa0\xef \x91\xe2\xe0\xae\xaa\xa0."), /* "Тестовая Строка." in CP866 */
|
||||
{D_STR_W_LEN ("\x92\xa5\xe1\xe2\xae\xa2\xa0\xef \x91\xe2\xe0\xae\xaa\xa0."), /* "Тестовая Строка." in CP866 */
|
||||
D_STR_W_LEN ("\x92\x85\x91\x92\x8e\x82\x80\x9f \x91\x92\x90\x8e\x8a\x80."),
|
||||
1}, /* "ТЕСТОВАЯ СТРОКА." in CP866 */
|
||||
{D_STR_W_LEN ("\xd2\xe5\xf1\xf2\xee\xe2\xe0\xff \xd1\xf2\xf0\xee\xea\xe0."), /* "Тестовая Строка." in CP1251 */
|
||||
1}, /* "ТЕСТОВАЯ СТРОКА." in CP866 */
|
||||
{D_STR_W_LEN ("\xd2\xe5\xf1\xf2\xee\xe2\xe0\xff \xd1\xf2\xf0\xee\xea\xe0."), /* "Тестовая Строка." in CP1251 */
|
||||
D_STR_W_LEN ("\xd2\xc5\xd1\xd2\xce\xc2\xc0\xdf \xd1\xd2\xd0\xce\xca\xc0."),
|
||||
1}, /* "ТЕСТОВАЯ СТРОКА." in CP1251 */
|
||||
{D_STR_W_LEN ("\xf4\xc5\xd3\xd4\xcf\xd7\xc1\xd1 \xf3\xd4\xd2\xcf\xcb\xc1."), /* "Тестовая Строка." in KOI8-R */
|
||||
1}, /* "ТЕСТОВАЯ СТРОКА." in CP1251 */
|
||||
{D_STR_W_LEN ("\xf4\xc5\xd3\xd4\xcf\xd7\xc1\xd1 \xf3\xd4\xd2\xcf\xcb\xc1."), /* "Тестовая Строка." in KOI8-R */
|
||||
D_STR_W_LEN ("\xf4\xe5\xf3\xf4\xef\xf7\xe1\xf1 \xf3\xf4\xf2\xef\xeb\xe1."),
|
||||
1}, /* "ТЕСТОВАЯ СТРОКА." in KOI8-R */
|
||||
{D_STR_W_LEN ("\xc2\xd5\xe1\xe2\xde\xd2\xd0\xef \xc1\xe2\xe0\xde\xda\xd0."), /* "Тестовая Строка." in ISO-8859-5 */
|
||||
1}, /* "ТЕСТОВАЯ СТРОКА." in KOI8-R */
|
||||
{D_STR_W_LEN ("\xc2\xd5\xe1\xe2\xde\xd2\xd0\xef \xc1\xe2\xe0\xde\xda\xd0."), /* "Тестовая Строка." in ISO-8859-5 */
|
||||
D_STR_W_LEN ("\xc2\xb5\xc1\xc2\xbe\xb2\xb0\xcf \xc1\xc2\xc0\xbe\xba\xb0."),
|
||||
1}, /* "ТЕСТОВАЯ СТРОКА." in ISO-8859-5 */
|
||||
1}, /* "ТЕСТОВАЯ СТРОКА." in ISO-8859-5 */
|
||||
{D_STR_W_LEN ("\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82\xd0\xbe\xd0\xb2\xd0\xb0\xd1"
|
||||
"\x8f \xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0."), /* "Тестовая Строка." in UTF-8 */
|
||||
"\x8f \xd0\xa1\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0."), /* "Тестовая Строка." in UTF-8 */
|
||||
D_STR_W_LEN ("\xd0\xa2\xd0\x95\xd0\xa1\xd0\xa2\xd0\x9e\xd0\x92\xd0\x90\xd0"
|
||||
"\xaf \xd0\xa1\xd0\xa2\xd0\xa0\xd0\x9e\xd0\x9a\xd0\x90."), 3} /* "ТЕСТОВАЯ СТРОКА." in UTF-8 */
|
||||
"\xaf \xd0\xa1\xd0\xa2\xd0\xa0\xd0\x9e\xd0\x9a\xd0\x90."), 3} /* "ТЕСТОВАЯ СТРОКА." in UTF-8 */
|
||||
};
|
||||
|
||||
|
||||
@@ -900,15 +900,15 @@ static const struct str_with_value dstrs_w_values[] = {
|
||||
{D_STR_W_LEN ("00000000000000000000000031295483"), 32, 31295483},
|
||||
|
||||
/* numbers below and above limits */
|
||||
{D_STR_W_LEN ("127"), 3, 127}, /* 0x7F, SCHAR_MAX */
|
||||
{D_STR_W_LEN ("128"), 3, 128}, /* 0x80, SCHAR_MAX+1 */
|
||||
{D_STR_W_LEN ("255"), 3, 255}, /* 0xFF, UCHAR_MAX */
|
||||
{D_STR_W_LEN ("256"), 3, 256}, /* 0x100, UCHAR_MAX+1 */
|
||||
{D_STR_W_LEN ("32767"), 5, 32767}, /* 0x7FFF, INT16_MAX */
|
||||
{D_STR_W_LEN ("32768"), 5, 32768}, /* 0x8000, INT16_MAX+1 */
|
||||
{D_STR_W_LEN ("65535"), 5, 65535}, /* 0xFFFF, UINT16_MAX */
|
||||
{D_STR_W_LEN ("65536"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */
|
||||
{D_STR_W_LEN ("2147483647"), 10, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
|
||||
{D_STR_W_LEN ("127"), 3, 127}, /* 0x7F, SCHAR_MAX */
|
||||
{D_STR_W_LEN ("128"), 3, 128}, /* 0x80, SCHAR_MAX+1 */
|
||||
{D_STR_W_LEN ("255"), 3, 255}, /* 0xFF, UCHAR_MAX */
|
||||
{D_STR_W_LEN ("256"), 3, 256}, /* 0x100, UCHAR_MAX+1 */
|
||||
{D_STR_W_LEN ("32767"), 5, 32767}, /* 0x7FFF, INT16_MAX */
|
||||
{D_STR_W_LEN ("32768"), 5, 32768}, /* 0x8000, INT16_MAX+1 */
|
||||
{D_STR_W_LEN ("65535"), 5, 65535}, /* 0xFFFF, UINT16_MAX */
|
||||
{D_STR_W_LEN ("65536"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */
|
||||
{D_STR_W_LEN ("2147483647"), 10, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
|
||||
{D_STR_W_LEN ("2147483648"), 10, UINT64_C (2147483648)}, /* 0x80000000, INT32_MAX+1 */
|
||||
{D_STR_W_LEN ("4294967295"), 10, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */
|
||||
{D_STR_W_LEN ("4294967296"), 10, UINT64_C (4294967296)}, /* 0x100000000, UINT32_MAX+1 */
|
||||
@@ -968,14 +968,14 @@ const struct str_with_len str_ovflw[] = {
|
||||
const struct str_with_len str_no_num[] = {
|
||||
D_STR_W_LEN ("zero"),
|
||||
D_STR_W_LEN ("one"),
|
||||
D_STR_W_LEN ("\xb9\xb2\xb3"), /* superscript "123" in ISO-8859-1/CP1252 */
|
||||
D_STR_W_LEN ("\xc2\xb9\xc2\xb2\xc2\xb3"), /* superscript "123" in UTF-8 */
|
||||
D_STR_W_LEN ("\xd9\xa1\xd9\xa2\xd9\xa3"), /* Arabic-Indic "١٢٣" in UTF-8 */
|
||||
D_STR_W_LEN ("\xdb\xb1\xdb\xb2\xdb\xb3"), /* Ext Arabic-Indic "۱۲۳" in UTF-8 */
|
||||
D_STR_W_LEN ("\xe0\xa5\xa7\xe0\xa5\xa8\xe0\xa5\xa9"), /* Devanagari "१२३" in UTF-8 */
|
||||
D_STR_W_LEN ("\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89"), /* Chinese "一二三" in UTF-8 */
|
||||
D_STR_W_LEN ("\xd2\xbb\xb6\xfe\xc8\xfd"), /* Chinese "一二三" in GB2312/CP936 */
|
||||
D_STR_W_LEN ("\x1B\x24\x29\x41\x0E\x52\x3B\x36\x7E\x48\x7D\x0F") /* Chinese "一二三" in ISO-2022-CN */
|
||||
D_STR_W_LEN ("\xb9\xb2\xb3"), /* superscript "123" in ISO-8859-1/CP1252 */
|
||||
D_STR_W_LEN ("\xc2\xb9\xc2\xb2\xc2\xb3"), /* superscript "123" in UTF-8 */
|
||||
D_STR_W_LEN ("\xd9\xa1\xd9\xa2\xd9\xa3"), /* Arabic-Indic "١٢٣" in UTF-8 */
|
||||
D_STR_W_LEN ("\xdb\xb1\xdb\xb2\xdb\xb3"), /* Ext Arabic-Indic "۱۲۳" in UTF-8 */
|
||||
D_STR_W_LEN ("\xe0\xa5\xa7\xe0\xa5\xa8\xe0\xa5\xa9"), /* Devanagari "१२३" in UTF-8 */
|
||||
D_STR_W_LEN ("\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89"), /* Chinese "一二三" in UTF-8 */
|
||||
D_STR_W_LEN ("\xd2\xbb\xb6\xfe\xc8\xfd"), /* Chinese "一二三" in GB2312/CP936 */
|
||||
D_STR_W_LEN ("\x1B\x24\x29\x41\x0E\x52\x3B\x36\x7E\x48\x7D\x0F") /* Chinese "一二三" in ISO-2022-CN */
|
||||
};
|
||||
|
||||
/* valid hex string for conversion to unsigned integer value */
|
||||
@@ -1013,25 +1013,25 @@ static const struct str_with_value xdstrs_w_values[] = {
|
||||
{D_STR_W_LEN ("0000000000000000000000003A29e4C3"), 32, 0x3A29E4C3},
|
||||
|
||||
/* numbers below and above limits */
|
||||
{D_STR_W_LEN ("7F"), 2, 127}, /* 0x7F, SCHAR_MAX */
|
||||
{D_STR_W_LEN ("7f"), 2, 127}, /* 0x7F, SCHAR_MAX */
|
||||
{D_STR_W_LEN ("80"), 2, 128}, /* 0x80, SCHAR_MAX+1 */
|
||||
{D_STR_W_LEN ("fF"), 2, 255}, /* 0xFF, UCHAR_MAX */
|
||||
{D_STR_W_LEN ("Ff"), 2, 255}, /* 0xFF, UCHAR_MAX */
|
||||
{D_STR_W_LEN ("FF"), 2, 255}, /* 0xFF, UCHAR_MAX */
|
||||
{D_STR_W_LEN ("ff"), 2, 255}, /* 0xFF, UCHAR_MAX */
|
||||
{D_STR_W_LEN ("100"), 3, 256}, /* 0x100, UCHAR_MAX+1 */
|
||||
{D_STR_W_LEN ("7fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */
|
||||
{D_STR_W_LEN ("7FFF"), 4, 32767}, /* 0x7FFF, INT16_MAX */
|
||||
{D_STR_W_LEN ("7Fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */
|
||||
{D_STR_W_LEN ("8000"), 4, 32768}, /* 0x8000, INT16_MAX+1 */
|
||||
{D_STR_W_LEN ("ffff"), 4, 65535}, /* 0xFFFF, UINT16_MAX */
|
||||
{D_STR_W_LEN ("FFFF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */
|
||||
{D_STR_W_LEN ("FffF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */
|
||||
{D_STR_W_LEN ("10000"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */
|
||||
{D_STR_W_LEN ("7FFFFFFF"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
|
||||
{D_STR_W_LEN ("7fffffff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
|
||||
{D_STR_W_LEN ("7FFffFff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
|
||||
{D_STR_W_LEN ("7F"), 2, 127}, /* 0x7F, SCHAR_MAX */
|
||||
{D_STR_W_LEN ("7f"), 2, 127}, /* 0x7F, SCHAR_MAX */
|
||||
{D_STR_W_LEN ("80"), 2, 128}, /* 0x80, SCHAR_MAX+1 */
|
||||
{D_STR_W_LEN ("fF"), 2, 255}, /* 0xFF, UCHAR_MAX */
|
||||
{D_STR_W_LEN ("Ff"), 2, 255}, /* 0xFF, UCHAR_MAX */
|
||||
{D_STR_W_LEN ("FF"), 2, 255}, /* 0xFF, UCHAR_MAX */
|
||||
{D_STR_W_LEN ("ff"), 2, 255}, /* 0xFF, UCHAR_MAX */
|
||||
{D_STR_W_LEN ("100"), 3, 256}, /* 0x100, UCHAR_MAX+1 */
|
||||
{D_STR_W_LEN ("7fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */
|
||||
{D_STR_W_LEN ("7FFF"), 4, 32767}, /* 0x7FFF, INT16_MAX */
|
||||
{D_STR_W_LEN ("7Fff"), 4, 32767}, /* 0x7FFF, INT16_MAX */
|
||||
{D_STR_W_LEN ("8000"), 4, 32768}, /* 0x8000, INT16_MAX+1 */
|
||||
{D_STR_W_LEN ("ffff"), 4, 65535}, /* 0xFFFF, UINT16_MAX */
|
||||
{D_STR_W_LEN ("FFFF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */
|
||||
{D_STR_W_LEN ("FffF"), 4, 65535}, /* 0xFFFF, UINT16_MAX */
|
||||
{D_STR_W_LEN ("10000"), 5, 65536}, /* 0x10000, UINT16_MAX+1 */
|
||||
{D_STR_W_LEN ("7FFFFFFF"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
|
||||
{D_STR_W_LEN ("7fffffff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
|
||||
{D_STR_W_LEN ("7FFffFff"), 8, 2147483647}, /* 0x7FFFFFFF, INT32_MAX */
|
||||
{D_STR_W_LEN ("80000000"), 8, UINT64_C (2147483648)}, /* 0x80000000, INT32_MAX+1 */
|
||||
{D_STR_W_LEN ("FFFFFFFF"), 8, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */
|
||||
{D_STR_W_LEN ("ffffffff"), 8, UINT64_C (4294967295)}, /* 0xFFFFFFFF, UINT32_MAX */
|
||||
@@ -1124,8 +1124,8 @@ const struct str_with_len strx_ovflw[] = {
|
||||
D_STR_W_LEN ("434532891232591226417"),
|
||||
D_STR_W_LEN ("10000000000000000a"),
|
||||
D_STR_W_LEN ("10000000000000000E"),
|
||||
D_STR_W_LEN ("100000000000000000 and nothing"), /* 0x10000000000000000, UINT64_MAX+1 */
|
||||
D_STR_W_LEN ("100000000000000000xx"), /* 0x10000000000000000, UINT64_MAX+1 */
|
||||
D_STR_W_LEN ("100000000000000000 and nothing"), /* 0x10000000000000000, UINT64_MAX+1 */
|
||||
D_STR_W_LEN ("100000000000000000xx"), /* 0x10000000000000000, UINT64_MAX+1 */
|
||||
D_STR_W_LEN ("99999999999999999999"),
|
||||
D_STR_W_LEN ("18446744073709551616abcd"),
|
||||
D_STR_W_LEN ("20000000000000000000 suffix"),
|
||||
|
||||
@@ -53,10 +53,164 @@
|
||||
#include "test_helpers.h"
|
||||
|
||||
#define LARGE_STRING \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello"
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelXloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello" \
|
||||
"HelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHelloHello\n"
|
||||
|
||||
|
||||
#define LARGE_REPLY_STRING \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld"
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld" \
|
||||
"WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld\n"
|
||||
|
||||
#ifdef HTTPS_SUPPORT
|
||||
#include <gnutls/gnutls.h>
|
||||
@@ -338,6 +492,7 @@ wr_handshake (struct wr_socket *s)
|
||||
|
||||
/**
|
||||
* Send data to remote by socket.
|
||||
*
|
||||
* @param s the socket to use
|
||||
* @param buf the buffer with data to send
|
||||
* @param len the length of data in @a buf
|
||||
@@ -351,15 +506,24 @@ wr_send (struct wr_socket *s,
|
||||
size_t len)
|
||||
{
|
||||
if (wr_plain == s->t)
|
||||
return MHD_send_ (s->fd, buf, len);
|
||||
{
|
||||
ssize_t ret;
|
||||
|
||||
ret = MHD_send_ (s->fd, buf, len);
|
||||
(void) MHD_socket_cork_ (s->fd,
|
||||
false);
|
||||
return ret;
|
||||
}
|
||||
#ifdef HTTPS_SUPPORT
|
||||
if (wr_tls == s->t)
|
||||
{
|
||||
ssize_t ret;
|
||||
|
||||
if (! s->tls_connected && ! wr_handshake (s))
|
||||
return -1;
|
||||
|
||||
ret = gnutls_record_send (s->tls_s, buf, len);
|
||||
ret = gnutls_record_send (s->tls_s,
|
||||
buf,
|
||||
len);
|
||||
if (ret > 0)
|
||||
return ret;
|
||||
if (GNUTLS_E_AGAIN == ret)
|
||||
@@ -591,7 +755,7 @@ kick_select ()
|
||||
{
|
||||
if (MHD_ITC_IS_VALID_ (kicker))
|
||||
{
|
||||
MHD_itc_activate_ (kicker, "K");
|
||||
(void) MHD_itc_activate_ (kicker, "K");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -698,6 +862,8 @@ recv_all (struct wr_socket *sock,
|
||||
}
|
||||
abort ();
|
||||
}
|
||||
if (0 != strncmp (text, buf, off + ret))
|
||||
abort ();
|
||||
}
|
||||
if (0 != strncmp (text, buf, len))
|
||||
abort ();
|
||||
@@ -715,8 +881,10 @@ run_usock (void *cls)
|
||||
{
|
||||
struct MHD_UpgradeResponseHandle *urh = cls;
|
||||
|
||||
MHD_upgrade_action (urh,
|
||||
MHD_UPGRADE_ACTION_CORK_OFF);
|
||||
if (MHD_YES !=
|
||||
MHD_upgrade_action (urh,
|
||||
MHD_UPGRADE_ACTION_CORK_OFF))
|
||||
abort ();
|
||||
send_all (usock,
|
||||
LARGE_STRING);
|
||||
recv_all (usock,
|
||||
@@ -953,7 +1121,7 @@ run_mhd_select_loop (struct MHD_Daemon *daemon)
|
||||
&ws,
|
||||
&es);
|
||||
}
|
||||
MHD_itc_destroy_ (kicker);
|
||||
(void) MHD_itc_destroy_ (kicker);
|
||||
MHD_itc_set_invalid_ (kicker);
|
||||
}
|
||||
|
||||
@@ -991,7 +1159,6 @@ run_mhd_epoll_loop (struct MHD_Daemon *daemon)
|
||||
MHD_UNSIGNED_LONG_LONG to;
|
||||
struct timeval tv;
|
||||
int ret;
|
||||
char drain[128];
|
||||
|
||||
di = MHD_get_daemon_info (daemon,
|
||||
MHD_DAEMON_INFO_EPOLL_FD);
|
||||
@@ -1023,7 +1190,7 @@ run_mhd_epoll_loop (struct MHD_Daemon *daemon)
|
||||
MHD_itc_clear_ (kicker);
|
||||
MHD_run (daemon);
|
||||
}
|
||||
MHD_itc_destroy_ (kicker);
|
||||
(void) MHD_itc_destroy_ (kicker);
|
||||
MHD_itc_set_invalid_ (kicker);
|
||||
}
|
||||
|
||||
@@ -1203,7 +1370,6 @@ main (int argc,
|
||||
if (has_param (argc, argv, "-q") ||
|
||||
has_param (argc, argv, "--quiet"))
|
||||
verbose = 0;
|
||||
|
||||
if (test_tls)
|
||||
{
|
||||
#ifdef HTTPS_SUPPORT
|
||||
@@ -1247,7 +1413,6 @@ main (int argc,
|
||||
return 77;
|
||||
#endif /* ! HTTPS_SUPPORT */
|
||||
}
|
||||
|
||||
/* run tests */
|
||||
if (verbose)
|
||||
printf ("Starting HTTP \"Upgrade\" tests with %s connections.\n",
|
||||
@@ -1262,7 +1427,6 @@ main (int argc,
|
||||
res);
|
||||
else if (verbose)
|
||||
printf ("PASSED: Upgrade with external select.\n");
|
||||
|
||||
/* Try external auto */
|
||||
res = test_upgrade (MHD_USE_AUTO,
|
||||
0);
|
||||
|
||||
+14
-14
@@ -24,7 +24,7 @@ typedef struct node
|
||||
/* $NetBSD: tsearch.c,v 1.5 2005/11/29 03:12:00 christos Exp $ */
|
||||
/* find or insert datum into search tree */
|
||||
void *
|
||||
tsearch (const void *vkey, /* key to be located */
|
||||
tsearch (const void *vkey, /* key to be located */
|
||||
void **vrootp, /* address of tree root */
|
||||
int (*compar)(const void *, const void *))
|
||||
{
|
||||
@@ -38,19 +38,19 @@ tsearch (const void *vkey, /* key to be located */
|
||||
{ /* Knuth's T1: */
|
||||
int r;
|
||||
|
||||
if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
|
||||
return *rootp; /* we found it! */
|
||||
if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
|
||||
return *rootp; /* we found it! */
|
||||
|
||||
rootp = (r < 0) ?
|
||||
&(*rootp)->llink : /* T3: follow left branch */
|
||||
&(*rootp)->rlink; /* T4: follow right branch */
|
||||
}
|
||||
|
||||
q = malloc (sizeof(node_t)); /* T5: key not found */
|
||||
q = malloc (sizeof(node_t)); /* T5: key not found */
|
||||
if (q)
|
||||
{ /* make new node */
|
||||
*rootp = q; /* link new node to old */
|
||||
q->key = vkey; /* initialize new node */
|
||||
{ /* make new node */
|
||||
*rootp = q; /* link new node to old */
|
||||
q->key = vkey; /* initialize new node */
|
||||
q->llink = q->rlink = NULL;
|
||||
}
|
||||
return q;
|
||||
@@ -73,8 +73,8 @@ tfind (const void *vkey, /* key to be found */
|
||||
{ /* T1: */
|
||||
int r;
|
||||
|
||||
if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
|
||||
return *rootp; /* key found */
|
||||
if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */
|
||||
return *rootp; /* key found */
|
||||
rootp = (r < 0) ?
|
||||
&(*rootp)->llink : /* T3: follow left branch */
|
||||
&(*rootp)->rlink; /* T4: follow right branch */
|
||||
@@ -112,17 +112,17 @@ tdelete (const void *__restrict vkey,
|
||||
&(*rootp)->llink : /* follow llink branch */
|
||||
&(*rootp)->rlink; /* follow rlink branch */
|
||||
if (*rootp == NULL)
|
||||
return NULL; /* key not found */
|
||||
return NULL; /* key not found */
|
||||
}
|
||||
r = (*rootp)->rlink; /* D1: */
|
||||
if ((q = (*rootp)->llink) == NULL) /* Left NULL? */
|
||||
r = (*rootp)->rlink; /* D1: */
|
||||
if ((q = (*rootp)->llink) == NULL) /* Left NULL? */
|
||||
{
|
||||
q = r;
|
||||
}
|
||||
else if (r != NULL)
|
||||
{ /* Right link is NULL? */
|
||||
if (r->llink == NULL)
|
||||
{ /* D2: Find successor */
|
||||
{ /* D2: Find successor */
|
||||
r->llink = q;
|
||||
q = r;
|
||||
}
|
||||
@@ -135,7 +135,7 @@ tdelete (const void *__restrict vkey,
|
||||
q->rlink = (*rootp)->rlink;
|
||||
}
|
||||
}
|
||||
free (*rootp); /* D4: Free node */
|
||||
free (*rootp); /* D4: Free node */
|
||||
*rootp = q; /* link parent to new node */
|
||||
return p;
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ ahc_echo (void *cls,
|
||||
{
|
||||
struct MHD_Response *response;
|
||||
enum MHD_Result ret;
|
||||
(void) cls; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */
|
||||
(void) cls; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data; (void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
|
||||
|
||||
response = MHD_create_response_from_buffer (0, NULL,
|
||||
|
||||
@@ -107,9 +107,9 @@ ahc_empty (void *cls,
|
||||
(void) cls;
|
||||
(void) url;
|
||||
(void) url;
|
||||
(void) version; /* Unused. Silent compiler warning. */
|
||||
(void) version; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data;
|
||||
(void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (0 != strcasecmp ("GET",
|
||||
method))
|
||||
|
||||
@@ -50,7 +50,7 @@ query_session_ahc (void *cls, struct MHD_Connection *connection,
|
||||
struct MHD_Response *response;
|
||||
enum MHD_Result ret;
|
||||
int gret;
|
||||
(void) cls; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */
|
||||
(void) cls; (void) url; (void) method; (void) version; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (NULL == *ptr)
|
||||
|
||||
@@ -189,7 +189,7 @@ http_ahc (void *cls,
|
||||
static int aptr;
|
||||
struct MHD_Response *response;
|
||||
enum MHD_Result ret;
|
||||
(void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */
|
||||
(void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (0 != strcmp (method, MHD_HTTP_METHOD_GET))
|
||||
|
||||
@@ -91,7 +91,7 @@ ahc_echo (void *cls,
|
||||
const char *password = "testpass";
|
||||
const char *realm = "test@example.com";
|
||||
enum MHD_Result ret;
|
||||
(void) cls; (void) url; /* Unused. Silent compiler warning. */
|
||||
(void) cls; (void) url; /* Unused. Silent compiler warning. */
|
||||
(void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ ahc_echo (void *cls,
|
||||
const char *password = "testpass";
|
||||
const char *realm = "test@example.com";
|
||||
enum MHD_Result ret;
|
||||
(void) cls; (void) url; /* Unused. Silent compiler warning. */
|
||||
(void) cls; (void) url; /* Unused. Silent compiler warning. */
|
||||
(void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data_size; (void) unused; /* Unused. Silent compiler warning. */
|
||||
|
||||
|
||||
@@ -730,9 +730,9 @@ ahc_empty (void *cls,
|
||||
(void) cls;
|
||||
(void) url;
|
||||
(void) url;
|
||||
(void) version; /* Unused. Silent compiler warning. */
|
||||
(void) version; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data;
|
||||
(void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (0 != strcasecmp ("GET", method))
|
||||
return MHD_NO; /* unexpected method */
|
||||
|
||||
@@ -121,7 +121,7 @@ ahc_echo (void *cls,
|
||||
enum MHD_Result ret;
|
||||
|
||||
(void) url;
|
||||
(void) version; /* Unused. Silent compiler warning. */
|
||||
(void) version; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data;
|
||||
(void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
|
||||
|
||||
@@ -687,9 +687,9 @@ ahc_empty (void *cls,
|
||||
(void) cls;
|
||||
(void) url;
|
||||
(void) url;
|
||||
(void) version; /* Unused. Silence compiler warning. */
|
||||
(void) version; /* Unused. Silence compiler warning. */
|
||||
(void) upload_data;
|
||||
(void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (0 != strcasecmp ("GET", method))
|
||||
return MHD_NO; /* unexpected method */
|
||||
|
||||
@@ -573,7 +573,7 @@ ahc_cancel (void *cls,
|
||||
{
|
||||
struct MHD_Response *response;
|
||||
enum MHD_Result ret;
|
||||
(void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */
|
||||
(void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (0 != strcasecmp ("POST", method))
|
||||
|
||||
@@ -84,7 +84,7 @@ ahc_echo (void *cls,
|
||||
static int marker;
|
||||
struct MHD_Response *response;
|
||||
enum MHD_Result ret;
|
||||
(void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */
|
||||
(void) cls; (void) url; (void) version; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data; (void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
|
||||
if (0 != strcmp ("POST", method))
|
||||
|
||||
@@ -143,7 +143,7 @@ http_AccessHandlerCallback (void *cls,
|
||||
void **con_cls)
|
||||
{
|
||||
enum MHD_Result ret;
|
||||
(void) cls; (void) url; /* Unused. Silent compiler warning. */
|
||||
(void) cls; (void) url; /* Unused. Silent compiler warning. */
|
||||
(void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ connection_handler (void *cls,
|
||||
void **ptr)
|
||||
{
|
||||
static int i;
|
||||
(void) cls; (void) url; /* Unused. Silent compiler warning. */
|
||||
(void) cls; (void) url; /* Unused. Silent compiler warning. */
|
||||
(void) method; (void) version; (void) upload_data; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@ ahc_echo (void *cls,
|
||||
enum MHD_Result ret;
|
||||
|
||||
(void) url;
|
||||
(void) version; /* Unused. Silent compiler warning. */
|
||||
(void) version; /* Unused. Silent compiler warning. */
|
||||
(void) upload_data;
|
||||
(void) upload_data_size; /* Unused. Silent compiler warning. */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user