mirror of
https://git.gnunet.org/libmicrohttpd.git
synced 2026-09-25 04:09:31 +03:00
release
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
Wed Mar 18 17:46:58 MDT 2009
|
||||||
|
Always RECV/SEND with MSG_DONTWAIT to (possibly) address
|
||||||
|
strange deadlock reported by Erik on the mailinglist ---
|
||||||
|
and/or issues with blocking read after select on GNU/Linux
|
||||||
|
(see select man page under bugs). -CG
|
||||||
|
|
||||||
Tue Mar 17 01:19:50 MDT 2009
|
Tue Mar 17 01:19:50 MDT 2009
|
||||||
Added support for thread-pools. -CG/RA
|
Added support for thread-pools. -CG/RA
|
||||||
|
|
||||||
|
|||||||
@@ -73,7 +73,11 @@ reasonably complete.
|
|||||||
|
|
||||||
Missing features:
|
Missing features:
|
||||||
=================
|
=================
|
||||||
- MHD_get_daemon_info is not implemented
|
- MHD_get_daemon_info is not implemented (always returns NULL)
|
||||||
|
- SSL support does not work with SELECT-based threading modes
|
||||||
|
(issue is that the gnutls state machine does not like EAGAIN/EINTR
|
||||||
|
return values from send/recv, despite having tons of
|
||||||
|
branches on those values).
|
||||||
- SSL code is still too large:
|
- SSL code is still too large:
|
||||||
* libgcrypt is used, and is also bloated
|
* libgcrypt is used, and is also bloated
|
||||||
=> integrate required portions of libgcrypt into our tree
|
=> integrate required portions of libgcrypt into our tree
|
||||||
|
|||||||
+2
-2
@@ -21,8 +21,8 @@
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
AC_PREREQ(2.57)
|
AC_PREREQ(2.57)
|
||||||
AC_INIT([libmicrohttpd], [0.4.0a],[libmicrohttpd@gnunet.org])
|
AC_INIT([libmicrohttpd], [0.4.1],[libmicrohttpd@gnunet.org])
|
||||||
AM_INIT_AUTOMAKE([libmicrohttpd], [0.4.0a])
|
AM_INIT_AUTOMAKE([libmicrohttpd], [0.4.1])
|
||||||
AM_CONFIG_HEADER([MHD_config.h])
|
AM_CONFIG_HEADER([MHD_config.h])
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
AH_TOP([#define _GNU_SOURCE 1])
|
AH_TOP([#define _GNU_SOURCE 1])
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
DOXYFILE_ENCODING = UTF-8
|
DOXYFILE_ENCODING = UTF-8
|
||||||
PROJECT_NAME = "GNU libmicrohttpd"
|
PROJECT_NAME = "GNU libmicrohttpd"
|
||||||
PROJECT_NUMBER = 0.4.0
|
PROJECT_NUMBER = 0.4.1
|
||||||
OUTPUT_DIRECTORY = doc/doxygen/
|
OUTPUT_DIRECTORY = doc/doxygen/
|
||||||
CREATE_SUBDIRS = YES
|
CREATE_SUBDIRS = YES
|
||||||
OUTPUT_LANGUAGE = English
|
OUTPUT_LANGUAGE = English
|
||||||
|
|||||||
+9
-2
@@ -522,7 +522,10 @@ recv_param_adapter (struct MHD_Connection *connection, void *other, size_t i)
|
|||||||
{
|
{
|
||||||
if (connection->socket_fd == -1)
|
if (connection->socket_fd == -1)
|
||||||
return -1;
|
return -1;
|
||||||
return RECV (connection->socket_fd, other, i, MSG_NOSIGNAL);
|
if (0 != (connection->daemon->options & MHD_USE_SSL))
|
||||||
|
return RECV (connection->socket_fd, other, i, MSG_NOSIGNAL);
|
||||||
|
else
|
||||||
|
return RECV (connection->socket_fd, other, i, MSG_NOSIGNAL | MSG_DONTWAIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -539,7 +542,10 @@ send_param_adapter (struct MHD_Connection *connection,
|
|||||||
{
|
{
|
||||||
if (connection->socket_fd == -1)
|
if (connection->socket_fd == -1)
|
||||||
return -1;
|
return -1;
|
||||||
return SEND (connection->socket_fd, other, i, MSG_NOSIGNAL);
|
if (0 != (connection->daemon->options & MHD_USE_SSL))
|
||||||
|
return SEND (connection->socket_fd, other, i, MSG_NOSIGNAL);
|
||||||
|
else
|
||||||
|
return SEND (connection->socket_fd, other, i, MSG_NOSIGNAL | MSG_DONTWAIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -991,6 +997,7 @@ MHD_start_daemon (unsigned int options,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start a webserver on the given port.
|
* Start a webserver on the given port.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -222,7 +222,6 @@ MHD__gnutls_read (MHD_gtls_session_t session, void *iptr,
|
|||||||
size_t left;
|
size_t left;
|
||||||
ssize_t i = 0;
|
ssize_t i = 0;
|
||||||
char *ptr = iptr;
|
char *ptr = iptr;
|
||||||
unsigned j, x, sum = 0;
|
|
||||||
MHD_gnutls_transport_ptr_t fd = session->internals.transport_recv_ptr;
|
MHD_gnutls_transport_ptr_t fd = session->internals.transport_recv_ptr;
|
||||||
|
|
||||||
session->internals.direction = 0;
|
session->internals.direction = 0;
|
||||||
@@ -259,31 +258,18 @@ MHD__gnutls_read (MHD_gtls_session_t session, void *iptr,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
i = session->internals.MHD__gnutls_pull_func (fd,
|
i = session->internals.MHD__gnutls_pull_func (fd,
|
||||||
&ptr[sizeOfPtr - left],
|
&ptr[sizeOfPtr - left],
|
||||||
left);
|
left);
|
||||||
|
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
{
|
{
|
||||||
int err = session->internals.errnum ? session->internals.errnum
|
int err = session->internals.errnum ? session->internals.errnum
|
||||||
: errno;
|
: errno;
|
||||||
|
if ( (err == EAGAIN) || (err == EINTR) )
|
||||||
MHD__gnutls_read_log
|
|
||||||
("READ: %d returned from %d, errno=%d gerrno=%d\n", i, fd, errno,
|
|
||||||
session->internals.errnum);
|
|
||||||
|
|
||||||
if (err == EAGAIN || err == EINTR)
|
|
||||||
{
|
{
|
||||||
if (sizeOfPtr - left > 0)
|
if (sizeOfPtr - left > 0)
|
||||||
{
|
goto finish;
|
||||||
|
MHD_gnutls_assert ();
|
||||||
MHD__gnutls_read_log ("READ: returning %d bytes from %d\n",
|
|
||||||
sizeOfPtr - left, fd);
|
|
||||||
|
|
||||||
goto finish;
|
|
||||||
}
|
|
||||||
MHD_gnutls_assert ();
|
|
||||||
|
|
||||||
if (err == EAGAIN)
|
if (err == EAGAIN)
|
||||||
return GNUTLS_E_AGAIN;
|
return GNUTLS_E_AGAIN;
|
||||||
return GNUTLS_E_INTERRUPTED;
|
return GNUTLS_E_INTERRUPTED;
|
||||||
@@ -296,46 +282,13 @@ MHD__gnutls_read (MHD_gtls_session_t session, void *iptr,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
MHD__gnutls_read_log ("READ: Got %d bytes from %d\n", i, fd);
|
|
||||||
|
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
break; /* EOF */
|
break; /* EOF */
|
||||||
}
|
}
|
||||||
|
|
||||||
left -= i;
|
left -= i;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
finish:
|
finish:
|
||||||
|
|
||||||
if (MHD__gnutls_log_level >= 7)
|
|
||||||
{
|
|
||||||
char line[128];
|
|
||||||
char tmp[16];
|
|
||||||
|
|
||||||
MHD__gnutls_read_log ("READ: read %d bytes from %d\n",
|
|
||||||
(sizeOfPtr - left), fd);
|
|
||||||
|
|
||||||
for (x = 0; x < ((sizeOfPtr - left) / 16) + 1; x++)
|
|
||||||
{
|
|
||||||
line[0] = 0;
|
|
||||||
|
|
||||||
sprintf (tmp, "%.4x - ", x);
|
|
||||||
MHD_gtls_str_cat (line, sizeof (line), tmp);
|
|
||||||
|
|
||||||
for (j = 0; j < 16; j++)
|
|
||||||
{
|
|
||||||
if (sum < (sizeOfPtr - left))
|
|
||||||
{
|
|
||||||
sprintf (tmp, "%.2x ", ((unsigned char *) ptr)[sum++]);
|
|
||||||
MHD_gtls_str_cat (line, sizeof (line), tmp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
MHD__gnutls_read_log ("%s\n", line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (sizeOfPtr - left);
|
return (sizeOfPtr - left);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -368,8 +321,9 @@ MHD_gtls_io_clear_peeked_data (MHD_gtls_session_t session)
|
|||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
sum += ret;
|
sum += ret;
|
||||||
}
|
}
|
||||||
while (ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN || sum
|
while ( (ret == GNUTLS_E_INTERRUPTED) ||
|
||||||
< RCVLOWAT);
|
(ret == GNUTLS_E_AGAIN) ||
|
||||||
|
(sum < RCVLOWAT) );
|
||||||
|
|
||||||
MHD_gnutls_afree (peekdata);
|
MHD_gnutls_afree (peekdata);
|
||||||
|
|
||||||
@@ -721,15 +675,13 @@ MHD_gtls_io_write_buffered (MHD_gtls_session_t session,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
i =
|
i = session->internals.MHD__gnutls_push_func (fd, &ptr[n - left], left);
|
||||||
session->internals.MHD__gnutls_push_func (fd, &ptr[n - left], left);
|
|
||||||
|
|
||||||
if (i == -1)
|
if (i == -1)
|
||||||
{
|
{
|
||||||
int err = session->internals.errnum ? session->internals.errnum
|
int err = session->internals.errnum ? session->internals.errnum
|
||||||
: errno;
|
: errno;
|
||||||
|
|
||||||
if (err == EAGAIN || err == EINTR)
|
if ( (err == EAGAIN) || (err == EINTR) )
|
||||||
{
|
{
|
||||||
session->internals.record_send_buffer_prev_size += n - left;
|
session->internals.record_send_buffer_prev_size += n - left;
|
||||||
|
|
||||||
@@ -742,11 +694,6 @@ MHD_gtls_io_write_buffered (MHD_gtls_session_t session,
|
|||||||
MHD_gnutls_assert ();
|
MHD_gnutls_assert ();
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
MHD__gnutls_write_log
|
|
||||||
("WRITE: Interrupted. Stored %d bytes to buffer. Already sent %d bytes.\n",
|
|
||||||
left, n - left);
|
|
||||||
|
|
||||||
if (err == EAGAIN)
|
if (err == EAGAIN)
|
||||||
return GNUTLS_E_AGAIN;
|
return GNUTLS_E_AGAIN;
|
||||||
return GNUTLS_E_INTERRUPTED;
|
return GNUTLS_E_INTERRUPTED;
|
||||||
|
|||||||
@@ -309,7 +309,7 @@ enum MHD_CONNECTION_STATE
|
|||||||
|
|
||||||
MHD_TLS_HANDSHAKE_FAILED,
|
MHD_TLS_HANDSHAKE_FAILED,
|
||||||
|
|
||||||
MHD_TLS_HANDSHAKE_COMPLETE,
|
MHD_TLS_HANDSHAKE_COMPLETE
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -242,6 +242,11 @@ main (int argc, char *const *argv)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
setup_session (&session, &key, &cert, &xcred);
|
||||||
|
errorCount += test_hello_extension (session, ext_arr[i], 1, 16);
|
||||||
|
teardown_session (session, &key, &cert, xcred);
|
||||||
|
#if 0
|
||||||
i = 0;
|
i = 0;
|
||||||
while (ext_arr[i] != -1)
|
while (ext_arr[i] != -1)
|
||||||
{
|
{
|
||||||
@@ -259,6 +264,7 @@ main (int argc, char *const *argv)
|
|||||||
teardown_session (session, &key, &cert, xcred);
|
teardown_session (session, &key, &cert, xcred);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
print_test_result (errorCount, argv[0]);
|
print_test_result (errorCount, argv[0]);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user