[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r7662 - in libmicrohttpd/src/daemon: . https/tls
From: |
gnunet |
Subject: |
[GNUnet-SVN] r7662 - in libmicrohttpd/src/daemon: . https/tls |
Date: |
Sun, 7 Sep 2008 01:44:33 -0600 (MDT) |
Author: grothoff
Date: 2008-09-07 01:44:32 -0600 (Sun, 07 Sep 2008)
New Revision: 7662
Modified:
libmicrohttpd/src/daemon/connection.c
libmicrohttpd/src/daemon/connection_https.c
libmicrohttpd/src/daemon/daemon.c
libmicrohttpd/src/daemon/https/tls/gnutls_handshake.c
libmicrohttpd/src/daemon/https/tls/gnutls_str.c
libmicrohttpd/src/daemon/internal.h
Log:
code cleanup
Modified: libmicrohttpd/src/daemon/connection.c
===================================================================
--- libmicrohttpd/src/daemon/connection.c 2008-09-07 07:43:55 UTC (rev
7661)
+++ libmicrohttpd/src/daemon/connection.c 2008-09-07 07:44:32 UTC (rev
7662)
@@ -93,14 +93,6 @@
#define INTERNAL_ERROR ""
#endif
-#define EXTRA_CHECKS MHD_YES
-
-#if EXTRA_CHECKS
-#define EXTRA_CHECK(a) if (!(a)) abort();
-#else
-#define EXTRA_CHECK(a)
-#endif
-
/**
* Add extra debug messages with reasons for closing connections
* (non-error reasons).
Modified: libmicrohttpd/src/daemon/connection_https.c
===================================================================
--- libmicrohttpd/src/daemon/connection_https.c 2008-09-07 07:43:55 UTC (rev
7661)
+++ libmicrohttpd/src/daemon/connection_https.c 2008-09-07 07:44:32 UTC (rev
7662)
@@ -225,7 +225,7 @@
* determined by peeking into the first message type byte of the
* stream.
*
- * Error message handling : all fatal level messages cause the
+ * Error message handling: all fatal level messages cause the
* connection to be terminated.
*
* Application data is forwarded to the underlying daemon for
@@ -252,7 +252,7 @@
#endif
/* discover content type */
- if (recv (connection->socket_fd, &msg_type, 1, MSG_PEEK) == -1)
+ if (RECV (connection->socket_fd, &msg_type, 1, MSG_PEEK) == -1)
{
#if HAVE_MESSAGES
MHD_DLOG (connection->daemon, "Failed to peek into TLS content type\n");
@@ -339,7 +339,7 @@
MHD_TLS_REQUEST_TERMINATED_WITH_FATAL_ALERT);
return MHD_NO;
}
- /* this should never execut */
+ /* this should never execute */
else
{
#if HAVE_MESSAGES
@@ -414,3 +414,5 @@
connection->write_handler = &MHD_tls_connection_handle_write;
connection->idle_handler = &MHD_tls_connection_handle_idle;
}
+
+/* end of connection_https.c */
Modified: libmicrohttpd/src/daemon/daemon.c
===================================================================
--- libmicrohttpd/src/daemon/daemon.c 2008-09-07 07:43:55 UTC (rev 7661)
+++ libmicrohttpd/src/daemon/daemon.c 2008-09-07 07:44:32 UTC (rev 7662)
@@ -1,23 +1,23 @@
/*
- This file is part of libmicrohttpd
- (C) 2007 Daniel Pittman and Christian Grothoff
+ This file is part of libmicrohttpd
+ (C) 2007 Daniel Pittman and Christian Grothoff
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA
+
+*/
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
- */
-
/**
* @file daemon.c
* @brief A minimal-HTTP server library
@@ -131,7 +131,9 @@
return -1;
}
-/* initialize security aspects of the HTTPS daemon */
+/**
+ * initialize security aspects of the HTTPS daemon
+ */
static int
MHD_TLS_init (struct MHD_Daemon *daemon)
{
@@ -290,52 +292,60 @@
return NULL;
}
-#if 0
-/* TODO rm if unused - gnutls parameter adapter , used to set gnutls pull
function */
-static long
-gnutls_pull_param_adapter (void *connection, void *other, unsigned long i)
+#if HTTPS_SUPPORT
+/**
+ * Callback for receiving data from the socket (for gnutls).
+ *
+ * @param conn the MHD connection structure
+ * @param other where to write received data to
+ * @param i maximum size of other (in bytes)
+ * @return number of bytes actually received
+ */
+static ssize_t
+pull_param_adapter (gnutls_transport_ptr_t conn,
+ void *other,
+ size_t i)
{
- ssize_t bytes;
- bytes = ((struct MHD_Connection *) connection)->read_buffer_offset;
- MHD_handle_connection (connection);
- bytes = ((struct MHD_Connection *) connection)->read_buffer_offset - bytes;
- return bytes;
+ struct MHD_Connection * connection = (struct MHD_Connection*) conn;
+ if (connection->socket_fd == -1)
+ return -1;
+ return RECV(connection->socket_fd, other, i, MSG_NOSIGNAL);
}
-static long
-gnutls_push_param_adapter (void *connection,
- const void *other, unsigned long i)
+/**
+ * Callback for writing data to the socket (for gnutls).
+ *
+ * @param conn the MHD connection structure
+ * @param other data to write
+ * @param i number of bytes to write
+ * @return actual number of bytes written
+ */
+static ssize_t
+push_param_adapter (void *conn,
+ const void *other,
+ size_t i)
{
- ssize_t bytes;
- bytes = ((struct MHD_Connection *) connection)->write_buffer_send_offset;
- MHD_handle_connection (connection);
- bytes = ((struct MHD_Connection *) connection)->write_buffer_send_offset
- - bytes;
- return bytes;
+ struct MHD_Connection * connection = (struct MHD_Connection*) conn;
+
+ if (connection->socket_fd == -1)
+ return -1;
+ return SEND(connection->socket_fd, other, i, MSG_NOSIGNAL);
}
-#endif
-
/**
- * Handle an individual TLS connection.
+ * Handle an individual TLS connection (main function
+ * of the thread handling a TLS connection).
*/
-#if HTTPS_SUPPORT
static void *
MHD_TLS_init_connection (void *data)
{
struct MHD_Connection *con = data;
- if (con == NULL)
- abort ();
-
- /* initialize connection state */
+ EXTRA_CHECK (con->state == MHD_CONNECTION_INIT);
con->state = MHD_TLS_CONNECTION_INIT;
MHD_gnutls_init (&con->tls_session, GNUTLS_SERVER);
-
- /* sets cipher priorities */
MHD_gnutls_priority_set (con->tls_session, con->daemon->priority_cache);
-
switch (con->daemon->cred_type)
{
/* set needed credentials for certificate authentication. */
@@ -351,24 +361,17 @@
MHD_gnutls_dh_set_prime_bits (con->tls_session, 1024);
break;
default:
-
#if HAVE_MESSAGES
MHD_DLOG (con->daemon,
- "Error: couldn't init HTTPS session. no appropriate KX
algorithm found. f: %s, l: %d\n",
- __FUNCTION__, __LINE__);
+ "Failed to setup TLS credentials: unknown credential type
%d\n",
+ con->daemon->cred_type);
#endif
- break;
+ abort();
}
-
- /* TODO avoid gnutls blocking recv / write calls
- MHD_gnutls_transport_set_pull_function(tls_session, &recv);
- MHD_gnutls_transport_set_push_function(tls_session, &send);
- */
-
MHD_gnutls_transport_set_ptr (con->tls_session,
- (gnutls_transport_ptr_t) ((void *)
- con->socket_fd));
-
+ (gnutls_transport_ptr_t) con);
+ MHD_gnutls_transport_set_pull_function(con->tls_session,
&pull_param_adapter);
+ MHD_gnutls_transport_set_push_function(con->tls_session,
&push_param_adapter);
return MHD_handle_connection (data);
}
#endif
@@ -512,32 +515,25 @@
connection->addr_len = addrlen;
connection->socket_fd = s;
connection->daemon = daemon;
+ connection->last_activity = time (NULL);
/* set default connection handlers */
MHD_set_http_calbacks (connection);
-
#if HTTPS_SUPPORT
- if (daemon->options & MHD_USE_SSL)
- {
- MHD_set_https_calbacks (connection);
- }
+ if (0 != (daemon->options & MHD_USE_SSL))
+ MHD_set_https_calbacks (connection);
#endif
/* attempt to create handler thread */
if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
{
+ res_thread_create = pthread_create (&connection->pid, NULL,
#if HTTPS_SUPPORT
- if (daemon->options & MHD_USE_SSL)
- res_thread_create = pthread_create (&connection->pid, NULL,
- &MHD_TLS_init_connection,
- connection);
- else
+ (0 != (daemon->options &
MHD_USE_SSL)) ?
+ &MHD_TLS_init_connection :
#endif
- {
- res_thread_create = pthread_create (&connection->pid, NULL,
- &MHD_handle_connection,
- connection);
- }
+ &MHD_handle_connection,
+ connection);
if (res_thread_create != 0)
{
#if HAVE_MESSAGES
@@ -550,11 +546,8 @@
free (connection);
return MHD_NO;
}
- }
-
- connection->last_activity = time (NULL);
+ }
connection->next = daemon->connections;
-
daemon->connections = connection;
daemon->max_connections--;
return MHD_YES;
@@ -720,7 +713,7 @@
if (errno == EINTR)
return MHD_YES;
#if HAVE_MESSAGES
- MHD_DLOG (daemon, "Select failed: %s\n", STRERROR (errno));
+ MHD_DLOG (daemon, "select failed: %s\n", STRERROR (errno));
#endif
return MHD_NO;
}
@@ -876,9 +869,6 @@
}
#endif
- /*
- * analyze daemon options
- */
while (MHD_OPTION_END != (opt = va_arg (ap, enum MHD_OPTION)))
{
switch (opt)
@@ -981,13 +971,9 @@
/* check for user supplied sockaddr */
if ((options & MHD_USE_IPv6) != 0)
- {
- addrlen = sizeof (struct sockaddr_in6);
- }
+ addrlen = sizeof (struct sockaddr_in6);
else
- {
- addrlen = sizeof (struct sockaddr_in);
- }
+ addrlen = sizeof (struct sockaddr_in);
if (NULL == servaddr)
{
if ((options & MHD_USE_IPv6) != 0)
@@ -1036,7 +1022,7 @@
if ((options & MHD_USE_SSL) && MHD_TLS_init (retVal))
{
#if HAVE_MESSAGES
- MHD_DLOG (retVal, "Failed to initialize HTTPS daemon\n");
+ MHD_DLOG (retVal, "Failed to initialize TLS support\n");
#endif
CLOSE (socket_fd);
free (retVal);
@@ -1079,11 +1065,8 @@
#endif
#endif
CLOSE (fd);
- if ((0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) || (0
- !=
- (daemon->
- options &
-
MHD_USE_SELECT_INTERNALLY)))
+ if ((0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) ||
+ (0 != (daemon->options & MHD_USE_SELECT_INTERNALLY)))
{
pthread_kill (daemon->pid, SIGALRM);
pthread_join (daemon->pid, &unused);
@@ -1114,19 +1097,16 @@
if (daemon->options & MHD_USE_SSL)
{
MHD_gnutls_priority_deinit (daemon->priority_cache);
-
if (daemon->x509_cred)
MHD_gnutls_certificate_free_credentials (daemon->x509_cred);
if (daemon->anon_cred)
MHD_gnutls_anon_free_server_credentials (daemon->anon_cred);
-
/* lock gnutls_global mutex since it uses reference counting */
pthread_mutex_lock (&gnutls_init_mutex);
MHD_gnutls_global_deinit ();
pthread_mutex_unlock (&gnutls_init_mutex);
}
#endif
-
free (daemon);
}
Modified: libmicrohttpd/src/daemon/https/tls/gnutls_handshake.c
===================================================================
--- libmicrohttpd/src/daemon/https/tls/gnutls_handshake.c 2008-09-07
07:43:55 UTC (rev 7661)
+++ libmicrohttpd/src/daemon/https/tls/gnutls_handshake.c 2008-09-07
07:44:32 UTC (rev 7662)
@@ -2223,16 +2223,12 @@
gnutls_assert ();
return ret;
}
-#if MHD_DEBUG_TLS
if (session->security_parameters.entity == GNUTLS_CLIENT)
{
- ret = mhd_gtls_handshake_client (session);
+ gnutls_assert ();
+ return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
- else
-#endif
- {
- ret = mhd_gtls_handshake_server (session);
- }
+ ret = mhd_gtls_handshake_server (session);
if (ret < 0)
{
/* In the case of a rehandshake abort
@@ -2273,126 +2269,6 @@
-/*
- * mhd_gtls_handshake_client
- * This function performs the client side of the handshake of the TLS/SSL
protocol.
- */
-int
-mhd_gtls_handshake_client (mhd_gtls_session_t session)
-{
- int ret = 0;
-
-#ifdef HANDSHAKE_DEBUG
- char buf[64];
-
- if (session->internals.resumed_security_parameters.session_id_size > 0)
- _gnutls_handshake_log ("HSK[%x]: Ask to resume: %s\n", session,
- mhd_gtls_bin2hex (session->internals.
- resumed_security_parameters.
- session_id,
- session->internals.
- resumed_security_parameters.
- session_id_size, buf,
- sizeof (buf)));
-#endif
-
- switch (STATE)
- {
- case STATE0:
- case STATE1:
- ret = mhd_gtls_send_hello (session, AGAIN (STATE1));
- STATE = STATE1;
- IMED_RET ("send hello", ret);
-
- case STATE2:
- /* receive the server hello */
- ret =
- mhd_gtls_recv_handshake (session, NULL, NULL,
- GNUTLS_HANDSHAKE_SERVER_HELLO,
- MANDATORY_PACKET);
- STATE = STATE2;
- IMED_RET ("recv hello", ret);
-
- case STATE70:
- if (session->security_parameters.extensions.do_recv_supplemental)
- {
- ret = _gnutls_recv_supplemental (session);
- STATE = STATE70;
- IMED_RET ("recv supplemental", ret);
- }
-
- case STATE3:
- /* RECV CERTIFICATE */
- if (session->internals.resumed == RESUME_FALSE) /* if we are not
resuming */
- ret = mhd_gtls_recv_server_certificate (session);
- STATE = STATE3;
- IMED_RET ("recv server certificate", ret);
-
- case STATE4:
- /* receive the server key exchange */
- if (session->internals.resumed == RESUME_FALSE) /* if we are not
resuming */
- ret = mhd_gtls_recv_server_kx_message (session);
- STATE = STATE4;
- IMED_RET ("recv server kx message", ret);
-
- case STATE5:
- /* receive the server certificate request - if any
- */
-
- if (session->internals.resumed == RESUME_FALSE) /* if we are not
resuming */
- ret = mhd_gtls_recv_server_certificate_request (session);
- STATE = STATE5;
- IMED_RET ("recv server certificate request message", ret);
-
- case STATE6:
- /* receive the server hello done */
- if (session->internals.resumed == RESUME_FALSE) /* if we are not
resuming */
- ret =
- mhd_gtls_recv_handshake (session, NULL, NULL,
- GNUTLS_HANDSHAKE_SERVER_HELLO_DONE,
- MANDATORY_PACKET);
- STATE = STATE6;
- IMED_RET ("recv server hello done", ret);
-
- case STATE71:
- if (session->security_parameters.extensions.do_send_supplemental)
- {
- ret = _gnutls_send_supplemental (session, AGAIN (STATE71));
- STATE = STATE71;
- IMED_RET ("send supplemental", ret);
- }
-
- case STATE7:
- /* send our certificate - if any and if requested
- */
- if (session->internals.resumed == RESUME_FALSE) /* if we are not
resuming */
- ret = mhd_gtls_send_client_certificate (session, AGAIN (STATE7));
- STATE = STATE7;
- IMED_RET ("send client certificate", ret);
-
- case STATE8:
- if (session->internals.resumed == RESUME_FALSE) /* if we are not
resuming */
- ret = mhd_gtls_send_client_kx_message (session, AGAIN (STATE8));
- STATE = STATE8;
- IMED_RET ("send client kx", ret);
-
- case STATE9:
- /* send client certificate verify */
- if (session->internals.resumed == RESUME_FALSE) /* if we are not
resuming */
- ret =
- mhd_gtls_send_client_certificate_verify (session, AGAIN (STATE9));
- STATE = STATE9;
- IMED_RET ("send client certificate verify", ret);
-
- STATE = STATE0;
- default:
- break;
- }
-
-
- return 0;
-}
-
/* This function sends the final handshake packets and initializes connection
*/
static int
Modified: libmicrohttpd/src/daemon/https/tls/gnutls_str.c
===================================================================
--- libmicrohttpd/src/daemon/https/tls/gnutls_str.c 2008-09-07 07:43:55 UTC
(rev 7661)
+++ libmicrohttpd/src/daemon/https/tls/gnutls_str.c 2008-09-07 07:44:32 UTC
(rev 7662)
@@ -212,7 +212,6 @@
{
size_t new_len =
MAX (data_size, MIN_CHUNK) + MAX (dest->max_length, MIN_CHUNK);
-
dest->data = dest->realloc_func (dest->data, new_len);
if (dest->data == NULL)
{
Modified: libmicrohttpd/src/daemon/internal.h
===================================================================
--- libmicrohttpd/src/daemon/internal.h 2008-09-07 07:43:55 UTC (rev 7661)
+++ libmicrohttpd/src/daemon/internal.h 2008-09-07 07:44:32 UTC (rev 7662)
@@ -33,6 +33,7 @@
#include "gnutls.h"
#endif
+#define EXTRA_CHECKS MHD_YES
#define MHD_MAX(a,b) ((a)<(b)) ? (b) : (a)
#define MHD_MIN(a,b) ((a)<(b)) ? (a) : (b)
@@ -537,14 +538,14 @@
int (*idle_handler) (struct MHD_Connection * connection);
- /*
+ /**
* function pointers to the appropriate send & receive funtions
* according to whether this is a HTTPS / HTTP daemon
*/
- ssize_t (*recv_cls) (struct MHD_Connection * connection);
-
- ssize_t (*send_cls) (struct MHD_Connection * connection);
-
+ ssize_t (*recv_cls) (struct MHD_Connection * connection);
+
+ ssize_t (*send_cls) (struct MHD_Connection * connection);
+
#if HTTPS_SUPPORT
/* TODO rename as this might be an SSL connection */
mhd_gtls_session_t tls_session;
@@ -649,4 +650,13 @@
#endif
};
+
+#if EXTRA_CHECKS
+#define EXTRA_CHECK(a) if (!(a)) abort();
+#else
+#define EXTRA_CHECK(a)
#endif
+
+
+
+#endif
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r7662 - in libmicrohttpd/src/daemon: . https/tls,
gnunet <=