gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r7368 - in libmicrohttpd/src: daemon daemon/https daemon/ht


From: gnunet
Subject: [GNUnet-SVN] r7368 - in libmicrohttpd/src: daemon daemon/https daemon/https/tls examples
Date: Sun, 29 Jun 2008 15:33:00 -0600 (MDT)

Author: lv-426
Date: 2008-06-29 15:33:00 -0600 (Sun, 29 Jun 2008)
New Revision: 7368

Removed:
   libmicrohttpd/src/daemon/https/tls/gnutls_session.h
Modified:
   libmicrohttpd/src/daemon/
   libmicrohttpd/src/daemon/connection.c
   libmicrohttpd/src/daemon/daemon.c
   libmicrohttpd/src/daemon/https/
   libmicrohttpd/src/daemon/https/https_common.c
   libmicrohttpd/src/daemon/https/tls/
   libmicrohttpd/src/daemon/https/tls/gnutls_db.c
   libmicrohttpd/src/daemon/https/tls/gnutls_int.h
   libmicrohttpd/src/daemon/https/tls/gnutls_record.c
   libmicrohttpd/src/examples/
   libmicrohttpd/src/examples/https_server_example.c
Log:
- gnutls alert handling
- simplified HTTPS example use
- added alert level to tls-session structs
- some gnutls removed code


Property changes on: libmicrohttpd/src/daemon
___________________________________________________________________
Name: svn:ignore
   + .libs

.deps

daemon.loT

daemon_test

libmicrohttpd_la-internal.loT

libmicrohttpd_la-connection.loT

libmicrohttpd_la-postprocessor.loT

libmicrohttpd_la-daemon.loT

Makefile

Makefile.in


Modified: libmicrohttpd/src/daemon/connection.c
===================================================================
--- libmicrohttpd/src/daemon/connection.c       2008-06-29 17:53:52 UTC (rev 
7367)
+++ libmicrohttpd/src/daemon/connection.c       2008-06-29 21:33:00 UTC (rev 
7368)
@@ -1531,8 +1531,8 @@
     return MHD_NO;
 
   /* discover content type */
-  unsigned char msg_type[7];
-  if (recv (connection->socket_fd, msg_type, 1, MSG_PEEK) == -1)
+  unsigned char msg_type;
+  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");
@@ -1540,39 +1540,68 @@
       return MHD_NO;
     }
 
-  switch (msg_type[0])
+  switch (msg_type)
     {
     case GNUTLS_CHANGE_CIPHER_SPEC:
 
       break;
     case GNUTLS_ALERT:
-      /* find out if alert is fatal */
-      if (recv (connection->socket_fd, msg_type, 7, MSG_PEEK) == -1)
+      /* 
+       * this call of _gnutls_recv_int expects 0 bytes read.
+       * done to decrypt alert message
+       */
+      _gnutls_recv_int (connection->tls_session, GNUTLS_ALERT,
+                        GNUTLS_HANDSHAKE_FINISHED, 0);
+
+      /* CLOSE_NOTIFY */
+      if (connection->tls_session->internals.last_alert ==
+          GNUTLS_A_CLOSE_NOTIFY)
         {
+          gnutls_bye (connection->tls_session, GNUTLS_SHUT_WR);
+          connection->tls_session->internals.read_eof = 1;
+          connection->socket_fd = -1;
+          gnutls_deinit (connection->tls_session);
+          return MHD_YES;
+        }
+      /* non FATAL or WARNING */
+      else if (connection->tls_session->internals.last_alert !=
+               GNUTLS_AL_FATAL)
+        {
 #if HAVE_MESSAGES
           MHD_DLOG (connection->daemon,
-                    "Failed to peek into TLS alert level\n");
+                    "Received TLS alert: %s\n",
+                    gnutls_alert_get_name ((int) connection->tls_session->
+                                           internals.last_alert));
 #endif
+          return MHD_YES;
+        }
+      /* FATAL */
+      else if (connection->tls_session->internals.last_alert ==
+               GNUTLS_AL_FATAL)
+        {
+          connection->tls_session->internals.resumable = RESUME_FALSE;
+          connection->tls_session->internals.valid_connection = VALID_FALSE;
+          connection->socket_fd = -1;
+          gnutls_deinit (connection->tls_session);
+
           return MHD_NO;
         }
-
-      if (msg_type[5] == GNUTLS_AL_FATAL)
+      /* this should never execut */
+      else
         {
 #if HAVE_MESSAGES
-          MHD_DLOG (connection->daemon, "Received TLS alert: %s\n",
-                    gnutls_alert_get_name ((int) msg_type[6]));
+          MHD_DLOG (connection->daemon,
+                    "Received unrecognized alert: %s\n",
+                    connection->tls_session->internals.last_alert);
 #endif
-          gnutls_bye (connection->tls_session, GNUTLS_SHUT_WR);
-          connection->socket_fd = -1;
-          gnutls_deinit (connection->tls_session);
           return MHD_NO;
         }
 
+
       /* forward application level content to MHD */
     case GNUTLS_APPLICATION_DATA:
       return MHD_connection_handle_read (connection);
-    
-    // TODO impl  
+      // TODO impl  
     case GNUTLS_HANDSHAKE:
       break;
     case GNUTLS_INNER_APPLICATION:
@@ -1621,7 +1650,6 @@
 {
   struct MHD_Response *response;
   int ret;
-
   connection->last_activity = time (NULL);
   while (1)
     {
@@ -1775,7 +1803,6 @@
 MHDS_connection_handle_write (struct MHD_Connection *connection)
 {
   connection->last_activity = time (NULL);
-
   while (1)
     {
 #if HAVE_MESSAGES
@@ -1796,7 +1823,7 @@
           connection->s_state = MHDS_REPLY_SENDING;
           do_write (connection);
           break;
-
+          
         case MHDS_CONNECTION_CLOSED:
           if (connection->socket_fd != -1)
             connection_close_error (connection);
@@ -1832,7 +1859,6 @@
   unsigned int timeout;
   const char *end;
   char *line;
-
   while (1)
     {
 #if DEBUG_STATES
@@ -2154,7 +2180,6 @@
   const char *end;
   char *line;
   ssize_t msgLength;
-
   while (1)
     {
 #if HAVE_MESSAGES

Modified: libmicrohttpd/src/daemon/daemon.c
===================================================================
--- libmicrohttpd/src/daemon/daemon.c   2008-06-29 17:53:52 UTC (rev 7367)
+++ libmicrohttpd/src/daemon/daemon.c   2008-06-29 21:33:00 UTC (rev 7368)
@@ -237,16 +237,14 @@
       /* set connection as closed */
       fprintf (stderr, "*** Handshake has failed (%s)\n\n",
                gnutls_strerror (ret));
+      con->s_state = MHDS_HANDSHAKE_FAILED;
+      gnutls_bye (con->tls_session, GNUTLS_SHUT_WR);
       gnutls_deinit (tls_session);
-      con->s_state = MHDS_HANDSHAKE_FAILED;
       con->socket_fd = 1;
       return MHD_NO;
-
+      
     }
 
-  // printf ("TLS Handshake completed\n");
-  
-
   MHD_handle_connection (data);
 }
 #endif
@@ -958,7 +956,9 @@
   gnutls_dh_params_init (&daemon->dh_params);
   gnutls_dh_params_generate2 (daemon->dh_params, DH_BITS);
 
-  gnutls_priority_init (&daemon->priority_cache, "NORMAL", NULL);
+  gnutls_priority_init (&daemon->priority_cache,
+      "NONE:+AES-256-CBC:+RSA:+SHA1:+COMP-NULL",
+      NULL);
 
   /* setup server certificate */
   gnutls_certificate_allocate_credentials (&daemon->x509_cret);


Property changes on: libmicrohttpd/src/daemon/https
___________________________________________________________________
Name: svn:ignore
   + *.deps

Makefile.in

Makefile

.libs


Modified: libmicrohttpd/src/daemon/https/https_common.c
===================================================================
--- libmicrohttpd/src/daemon/https/https_common.c       2008-06-29 17:53:52 UTC 
(rev 7367)
+++ libmicrohttpd/src/daemon/https/https_common.c       2008-06-29 21:33:00 UTC 
(rev 7368)
@@ -246,7 +246,6 @@
 }
 
 #ifdef ENABLE_OPENPGP
-
 void
 print_openpgp_info (gnutls_session_t session, const char *hostname)
 {
@@ -356,7 +355,6 @@
 
     }
 }
-
 #endif
 
 void
@@ -662,180 +660,7 @@
          stdout);
 }
 
-static int depr_printed = 0;
-#define DEPRECATED if (depr_printed==0) { \
-  fprintf(stderr, "This method of specifying algorithms is deprecated. Please 
use the --priority option.\n"); \
-  depr_printed = 1; \
-  }
-
 void
-parse_protocols (char **protocols, int protocols_size, int *protocol_priority)
-{
-  int i, j;
-
-  if (protocols != NULL && protocols_size > 0)
-    {
-      DEPRECATED;
-
-      for (j = i = 0; i < protocols_size; i++)
-        {
-          if (strncasecmp (protocols[i], "SSL", 3) == 0)
-            protocol_priority[j++] = GNUTLS_SSL3;
-          else if (strncasecmp (protocols[i], "TLS1.1", 6) == 0)
-            protocol_priority[j++] = GNUTLS_TLS1_1;
-          else if (strncasecmp (protocols[i], "TLS1.2", 6) == 0)
-            protocol_priority[j++] = GNUTLS_TLS1_2;
-          else if (strncasecmp (protocols[i], "TLS", 3) == 0)
-            protocol_priority[j++] = GNUTLS_TLS1_0;
-          else
-            fprintf (stderr, "Unknown protocol: '%s'\n", protocols[i]);
-        }
-      protocol_priority[j] = 0;
-    }
-}
-
-void
-parse_ciphers (char **ciphers, int nciphers, int *cipher_priority)
-{
-  int j, i;
-
-  if (ciphers != NULL && nciphers > 0)
-    {
-      DEPRECATED;
-      for (j = i = 0; i < nciphers; i++)
-        {
-          if (strncasecmp (ciphers[i], "AES-2", 5) == 0)
-            cipher_priority[j++] = GNUTLS_CIPHER_AES_256_CBC;
-          else if (strncasecmp (ciphers[i], "AES", 3) == 0)
-            cipher_priority[j++] = GNUTLS_CIPHER_AES_128_CBC;
-          else if (strncasecmp (ciphers[i], "3DE", 3) == 0)
-            cipher_priority[j++] = GNUTLS_CIPHER_3DES_CBC;
-          else if (strcasecmp (ciphers[i], "ARCFOUR-40") == 0)
-            cipher_priority[j++] = GNUTLS_CIPHER_ARCFOUR_40;
-          else if (strcasecmp (ciphers[i], "ARCFOUR") == 0)
-            cipher_priority[j++] = GNUTLS_CIPHER_ARCFOUR_128;
-#ifdef ENABLE_CAMELLIA
-          else if (strncasecmp (ciphers[i], "CAMELLIA-2", 10) == 0)
-            cipher_priority[j++] = GNUTLS_CIPHER_CAMELLIA_256_CBC;
-          else if (strncasecmp (ciphers[i], "CAM", 3) == 0)
-            cipher_priority[j++] = GNUTLS_CIPHER_CAMELLIA_128_CBC;
-#endif
-          else if (strncasecmp (ciphers[i], "NUL", 3) == 0)
-            cipher_priority[j++] = GNUTLS_CIPHER_NULL;
-          else
-            fprintf (stderr, "Unknown cipher: '%s'\n", ciphers[i]);
-        }
-      cipher_priority[j] = 0;
-    }
-}
-
-void
-parse_macs (char **macs, int nmacs, int *mac_priority)
-{
-  int i, j;
-
-  if (macs != NULL && nmacs > 0)
-    {
-      DEPRECATED;
-      for (j = i = 0; i < nmacs; i++)
-        {
-          if (strncasecmp (macs[i], "MD5", 3) == 0)
-            mac_priority[j++] = GNUTLS_MAC_MD5;
-          else if (strncasecmp (macs[i], "SHA256", 6) == 0)
-            mac_priority[j++] = GNUTLS_MAC_SHA256;
-          else if (strncasecmp (macs[i], "SHA", 3) == 0)
-            mac_priority[j++] = GNUTLS_MAC_SHA1;
-          else
-            fprintf (stderr, "Unknown MAC: '%s'\n", macs[i]);
-        }
-      mac_priority[j] = 0;
-    }
-}
-
-void
-parse_ctypes (char **ctype, int nctype, int *cert_type_priority)
-{
-  int i, j;
-
-  if (ctype != NULL && nctype > 0)
-    {
-      DEPRECATED;
-      for (j = i = 0; i < nctype; i++)
-        {
-          if (strncasecmp (ctype[i], "OPE", 3) == 0)
-            cert_type_priority[j++] = GNUTLS_CRT_OPENPGP;
-          else if (strncasecmp (ctype[i], "X", 1) == 0)
-            cert_type_priority[j++] = GNUTLS_CRT_X509;
-          else
-            fprintf (stderr, "Unknown certificate type: '%s'\n", ctype[i]);
-        }
-      cert_type_priority[j] = 0;
-    }
-}
-
-void
-parse_kx (char **kx, int nkx, int *kx_priority)
-{
-  int i, j;
-
-  if (kx != NULL && nkx > 0)
-    {
-      DEPRECATED;
-      for (j = i = 0; i < nkx; i++)
-        {
-          if (strcasecmp (kx[i], "SRP") == 0)
-            kx_priority[j++] = GNUTLS_KX_SRP;
-          else if (strcasecmp (kx[i], "SRP-RSA") == 0)
-            kx_priority[j++] = GNUTLS_KX_SRP_RSA;
-          else if (strcasecmp (kx[i], "SRP-DSS") == 0)
-            kx_priority[j++] = GNUTLS_KX_SRP_DSS;
-          else if (strcasecmp (kx[i], "RSA") == 0)
-            kx_priority[j++] = GNUTLS_KX_RSA;
-          else if (strcasecmp (kx[i], "PSK") == 0)
-            kx_priority[j++] = GNUTLS_KX_PSK;
-          else if (strcasecmp (kx[i], "DHE-PSK") == 0)
-            kx_priority[j++] = GNUTLS_KX_DHE_PSK;
-          else if (strcasecmp (kx[i], "RSA-EXPORT") == 0)
-            kx_priority[j++] = GNUTLS_KX_RSA_EXPORT;
-          else if (strncasecmp (kx[i], "DHE-RSA", 7) == 0)
-            kx_priority[j++] = GNUTLS_KX_DHE_RSA;
-          else if (strncasecmp (kx[i], "DHE-DSS", 7) == 0)
-            kx_priority[j++] = GNUTLS_KX_DHE_DSS;
-          else if (strncasecmp (kx[i], "ANON", 4) == 0)
-            kx_priority[j++] = GNUTLS_KX_ANON_DH;
-          else
-            fprintf (stderr, "Unknown key exchange: '%s'\n", kx[i]);
-        }
-      kx_priority[j] = 0;
-    }
-}
-
-void
-parse_comp (char **comp, int ncomp, int *comp_priority)
-{
-  int i, j;
-
-  if (comp != NULL && ncomp > 0)
-    {
-      DEPRECATED;
-      for (j = i = 0; i < ncomp; i++)
-        {
-          if (strncasecmp (comp[i], "NUL", 3) == 0)
-            comp_priority[j++] = GNUTLS_COMP_NULL;
-          else if (strncasecmp (comp[i], "ZLI", 3) == 0)
-            comp_priority[j++] = GNUTLS_COMP_DEFLATE;
-          else if (strncasecmp (comp[i], "DEF", 3) == 0)
-            comp_priority[j++] = GNUTLS_COMP_DEFLATE;
-          else if (strncasecmp (comp[i], "LZO", 3) == 0)
-            comp_priority[j++] = GNUTLS_COMP_LZO;
-          else
-            fprintf (stderr, "Unknown compression: '%s'\n", comp[i]);
-        }
-      comp_priority[j] = 0;
-    }
-}
-
-void
 sockets_init (void)
 {
 #ifdef _WIN32


Property changes on: libmicrohttpd/src/daemon/https/tls
___________________________________________________________________
Name: svn:ignore
   + Makefile

Makefile.in

.libs

.deps

gnutls-api.texi


Modified: libmicrohttpd/src/daemon/https/tls/gnutls_db.c
===================================================================
--- libmicrohttpd/src/daemon/https/tls/gnutls_db.c      2008-06-29 17:53:52 UTC 
(rev 7367)
+++ libmicrohttpd/src/daemon/https/tls/gnutls_db.c      2008-06-29 21:33:00 UTC 
(rev 7368)
@@ -28,7 +28,7 @@
 
 #include "gnutls_int.h"
 #include "gnutls_errors.h"
-#include "gnutls_session.h"
+// #include "gnutls_session.h"
 #include <gnutls_db.h>
 #include "debug.h"
 #include <gnutls_session_pack.h>

Modified: libmicrohttpd/src/daemon/https/tls/gnutls_int.h
===================================================================
--- libmicrohttpd/src/daemon/https/tls/gnutls_int.h     2008-06-29 17:53:52 UTC 
(rev 7367)
+++ libmicrohttpd/src/daemon/https/tls/gnutls_int.h     2008-06-29 21:33:00 UTC 
(rev 7368)
@@ -447,6 +447,7 @@
     int read_eof; /* non-zero if we have received a closure alert. */
 
     int last_alert; /* last alert received */
+    int last_alert_level; /* last alert level */
 
     /* The last handshake messages sent or received.
      */

Modified: libmicrohttpd/src/daemon/https/tls/gnutls_record.c
===================================================================
--- libmicrohttpd/src/daemon/https/tls/gnutls_record.c  2008-06-29 17:53:52 UTC 
(rev 7367)
+++ libmicrohttpd/src/daemon/https/tls/gnutls_record.c  2008-06-29 21:33:00 UTC 
(rev 7368)
@@ -657,6 +657,7 @@
             data[0], data[1], gnutls_alert_get_name ((int) data[1]));
 
         session->internals.last_alert = data[1];
+        session->internals.last_alert_level = data[0];
 
         /* if close notify is received and
          * the alert is not fatal
@@ -674,7 +675,6 @@
             /* if the alert is FATAL or WARNING
              * return the apropriate message
              */
-
             gnutls_assert ();
             ret = GNUTLS_E_WARNING_ALERT_RECEIVED;
             if (data[0] == GNUTLS_AL_FATAL)
@@ -968,8 +968,7 @@
       return ret;
     }
 
-  /* decrypt the data we got. 
-   */
+  /* decrypt the data we got. */
   ret = _gnutls_decrypt(session, ciphertext, length, tmp.data, tmp.size,
                         recv_type);
   if (ret < 0)
@@ -1015,6 +1014,7 @@
       return GNUTLS_E_RECORD_LIMIT_REACHED;
     }
 
+  /* check type - this will also invalidate sessions if a fatal alert has been 
received */
   ret = record_check_type(session, recv_type, type, htype, tmp.data,
                           decrypted_length);
   if (ret < 0)

Deleted: libmicrohttpd/src/daemon/https/tls/gnutls_session.h
===================================================================
--- libmicrohttpd/src/daemon/https/tls/gnutls_session.h 2008-06-29 17:53:52 UTC 
(rev 7367)
+++ libmicrohttpd/src/daemon/https/tls/gnutls_session.h 2008-06-29 21:33:00 UTC 
(rev 7368)
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation
- *
- * Author: Nikos Mavrogiannopoulos
- *
- * This file is part of GNUTLS.
- *
- * The GNUTLS 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
- *
- */


Property changes on: libmicrohttpd/src/examples
___________________________________________________________________
Name: svn:ignore
   + .deps

.libs

X.509

Makefile

https_server_example

querystring_example

Makefile.in

minimal_example

fileserver_example

fileserver_example_external_select

https_echo_server_example.c

https_echo_client_example.c


Modified: libmicrohttpd/src/examples/https_server_example.c
===================================================================
--- libmicrohttpd/src/examples/https_server_example.c   2008-06-29 17:53:52 UTC 
(rev 7367)
+++ libmicrohttpd/src/examples/https_server_example.c   2008-06-29 21:33:00 UTC 
(rev 7368)
@@ -36,7 +36,7 @@
 
 #include "config.h"
 #include <microhttpd.h>
-#include "internal.h"
+#include <sys/stat.h>
 
 #include <stdlib.h>
 #ifndef MINGW
@@ -53,29 +53,13 @@
 #define KEYFILE "key.pem"
 #define CERTFILE "cert.pem"
 
+
 // TODO remove if unused
 #define CAFILE "ca.pem"
 #define CRLFILE "crl.pem"
 
 #define PAGE_NOT_FOUND "<html><head><title>File not 
found</title></head><body>File not found</body></html>"
 
-gnutls_session_t
-initialize_tls_session (struct MHD_Connection *connection)
-{
-  gnutls_session_t session;
-
-  gnutls_init (&session, GNUTLS_SERVER);
-
-  /* sets cipher priorities */
-  gnutls_priority_set (session, connection->daemon->priority_cache);
-
-  /* set needed credentials for certificate authentication. */
-  gnutls_credentials_set (session, GNUTLS_CRD_CERTIFICATE,
-                          connection->daemon->x509_cret);
-
-  return session;
-}
-
 static int
 file_reader (void *cls, size_t pos, char *buf, int max)
 {
@@ -85,122 +69,6 @@
   return fread (buf, 1, max, file);
 }
 
-/* HTTPS access handler call back */
-static int
-https_ahc (void *cls,
-           struct MHD_Connection *connection,
-           const char *url,
-           const char *method,
-           const char *upload_data,
-           const char *version, unsigned int *upload_data_size, void **ptr)
-{
-  /* loopback HTTP socket */
-  int loopback_sd, err;
-  ssize_t ret;
-  struct sockaddr_in servaddr4;
-  const struct sockaddr *servaddr;
-  struct sockaddr_in loopback_sa;
-  socklen_t addrlen;
-
-  gnutls_session_t session;
-  static int aptr;
-  struct MHD_Response *response;
-  char buffer[BUF_SIZE];
-
-  printf ("accepted connection from %d\n", connection->addr->sin_addr);
-
-  session = initialize_tls_session (connection);
-
-  gnutls_transport_set_ptr (session, connection->socket_fd);
-
-  ret = gnutls_handshake (session);
-
-  if (ret < 0)
-    {
-      /* set connection as closed */
-      connection->socket_fd = 1;
-      gnutls_deinit (session);
-      fprintf (stderr, "*** Handshake has failed (%s)\n\n",
-               gnutls_strerror (ret));
-      return MHD_NO;
-    }
-
-  printf ("TLS Handshake completed\n");
-  connection->state = MHDS_HANDSHAKE_COMPLETE;
-
-  /* initialize loopback socket */
-  loopback_sd = socket (AF_INET, SOCK_STREAM, 0);
-  memset (&loopback_sa, '\0', sizeof (loopback_sa));
-  loopback_sa.sin_family = AF_INET;
-
-  // TODO solve magic number issue - the http's daemons port must be shared 
with the https daemon - rosolve data sharing point
-  loopback_sa.sin_port = htons (50000);
-  inet_pton (AF_INET, "127.0.0.1", &loopback_sa.sin_addr);
-
-  /* connect loopback socket */
-  err = connect (loopback_sd, (struct sockaddr *) &loopback_sa,
-                 sizeof (loopback_sa));
-  if (err < 0)
-    {
-      // TODO err handle
-      fprintf (stderr, "Error : failed to create TLS loopback socket\n");
-      exit (1);
-    }
-
-  /* 
-   * This loop pipes data received through the TLS tunnel into the loopback 
connection.  
-   * message encryption/decryption is acheived via 'gnutls_record_send' & 
gnutls_record_recv calls.
-   */
-  memset (buffer, 0, BUF_SIZE);
-  if (gnutls_record_recv (session, buffer, BUF_SIZE) < 0)
-    {
-      fprintf (stderr, "\n*** Received corrupted "
-               "data(%d). Closing the connection.\n\n", ret);
-      connection->socket_fd = -1;
-      gnutls_deinit (session);
-      return MHD_NO;
-    }
-
-  if (write (loopback_sd, buffer, BUF_SIZE) < 0)
-    {
-      printf ("failed to write to TLS loopback socket\n");
-      connection->socket_fd = -1;
-      gnutls_deinit (session);
-      return MHD_NO;
-    }
-
-  for (;;)
-    {
-      memset (buffer, 0, BUF_SIZE);
-
-      ret = read (loopback_sd, buffer, BUF_SIZE);
-
-      if (ret < 0)
-        {
-          printf ("failed to read from TLS loopback socket\n");
-          break;
-        }
-
-      if (ret == 0)
-        {
-          break;
-        }
-
-      /* echo data back to the client */
-      ret = gnutls_record_send (session, buffer, ret);
-      if (ret < 0)
-        {
-          printf ("failed to write to TLS socket\n");
-          break;
-        }
-    }
-  /* mark connection as closed */
-  connection->socket_fd = -1;
-  gnutls_deinit (session);
-
-  return MHD_YES;
-}
-
 /* HTTP access handler call back */
 static int
 http_ahc (void *cls,
@@ -225,7 +93,7 @@
       return MHD_YES;
     }
   *ptr = NULL;                  /* reset when done */
-
+  
   file = fopen (url, "r");
   if (file == NULL)
     {
@@ -247,17 +115,16 @@
     }
   return ret;
 }
-
+ 
 int
 main (int argc, char *const *argv)
 {
   char keyfile[255] = KEYFILE;
   char certfile[255] = CERTFILE;
-  struct MHD_Daemon *HTTP_daemon;
   struct MHD_Daemon *TLS_daemon;
 
   /* look for HTTPS arguments */
-  if (argc < 6)
+  if (argc < 5)
     {
       printf
         ("Usage : %s HTTP-PORT SECONDS-TO-RUN HTTPS-PORT KEY-FILE CERT-FILE\n",
@@ -268,20 +135,10 @@
   // TODO check if this is truly necessary -  disallow usage of the blocking 
/dev/random */
   // gcry_control(GCRYCTL_ENABLE_QUICK_RANDOM, 0);
 
-  HTTP_daemon =
-    MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG,
-                      atoi (argv[1]), NULL, NULL, &http_ahc, NULL, 
MHD_OPTION_END);
-
-  if (HTTP_daemon == NULL)
-    {
-      printf ("Error: failed to start HTTP_daemon");
-      return 1;
-    }
-
   TLS_daemon = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_DEBUG
                                  | MHD_USE_SSL, atoi (argv[3]),
                                  NULL,
-                                 NULL, &https_ahc,
+                                 NULL, &http_ahc,
                                  NULL, MHD_OPTION_CONNECTION_TIMEOUT, 256,
                                  MHD_OPTION_HTTPS_KEY_PATH, argv[4],
                                  MHD_OPTION_HTTPS_CERT_PATH, argv[5],
@@ -295,8 +152,6 @@
 
   sleep (atoi (argv[2]));
 
-  MHD_stop_daemon (HTTP_daemon);
-
   MHD_stop_daemon (TLS_daemon);
 
   return 0;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]