gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r7381 - in libmicrohttpd/src: daemon daemon/https daemon/https/includes daemon/https/tls daemon/https/x509 examples include testcurl testcurl/https
Date: Fri, 4 Jul 2008 18:42:25 -0600 (MDT)

Author: lv-426
Date: 2008-07-04 18:42:25 -0600 (Fri, 04 Jul 2008)
New Revision: 7381

Added:
   libmicrohttpd/src/testcurl/https/mhds_test_session_info.c
Removed:
   libmicrohttpd/src/daemon/https/includes/gnutlsxx.h
   libmicrohttpd/src/daemon/https/tls/gnutls_v2_compat.c
   libmicrohttpd/src/daemon/https/tls/gnutls_v2_compat.h
   libmicrohttpd/src/daemon/https/tls/gnutlsxx.cpp
   libmicrohttpd/src/daemon/https/tls/libgnutlsxx.vers
Modified:
   libmicrohttpd/src/daemon/connection.c
   libmicrohttpd/src/daemon/daemon.c
   libmicrohttpd/src/daemon/https/Makefile.am
   libmicrohttpd/src/daemon/https/tls/Makefile.am
   libmicrohttpd/src/daemon/https/tls/gnutls_handshake.c
   libmicrohttpd/src/daemon/https/tls/gnutls_priority.c
   libmicrohttpd/src/daemon/https/tls/io_debug.h
   libmicrohttpd/src/daemon/https/x509/x509_privkey.c
   libmicrohttpd/src/examples/Makefile.am
   libmicrohttpd/src/include/microhttpd.h
   libmicrohttpd/src/testcurl/Makefile.am
   libmicrohttpd/src/testcurl/https/Makefile.am
   libmicrohttpd/src/testcurl/https/daemon_https_test_get.c
Log:
partial support for users to query SSL/TLS sessions for negotiated settings
added querying test
removed SSLv2 code


Modified: libmicrohttpd/src/daemon/connection.c
===================================================================
--- libmicrohttpd/src/daemon/connection.c       2008-07-04 03:23:55 UTC (rev 
7380)
+++ libmicrohttpd/src/daemon/connection.c       2008-07-05 00:42:25 UTC (rev 
7381)
@@ -33,6 +33,7 @@
 
 // get opaque type
 #include "gnutls_int.h"
+
 // TODO clean
 #undef MAX
 #define MAX(a,b) ((a)<(b)) ? (b) : (a)
@@ -160,6 +161,23 @@
   return ret;
 }
 
+#if HTTPS_SUPPORT
+/* get cipher spec for this connection */
+gnutls_cipher_algorithm_t MHDS_get_session_cipher (struct MHD_Connection * 
session ){
+  return gnutls_cipher_get(session->tls_session);
+}
+
+gnutls_mac_algorithm_t MHDS_get_session_mac (struct MHD_Connection * session ){
+  return gnutls_mac_get(session->tls_session);
+}
+gnutls_compression_method_t MHDS_get_session_compression (struct 
MHD_Connection * session ){
+  return gnutls_compression_get(session->tls_session);
+}
+gnutls_certificate_type_t MHDS_get_session_cert_type (struct MHD_Connection * 
session ){
+  return gnutls_certificate_type_get(session->tls_session);
+}
+#endif
+
 /**
  * Get a particular header value.  If multiple
  * values match the kind, return any one of them.
@@ -1546,7 +1564,7 @@
 
       break;
     case GNUTLS_ALERT:
-      /* 
+      /*
        * this call of _gnutls_recv_int expects 0 bytes read.
        * done to decrypt alert message
        */
@@ -1601,7 +1619,7 @@
       /* 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:
@@ -1823,7 +1841,7 @@
           connection->s_state = MHDS_REPLY_SENDING;
           do_write (connection);
           break;
-          
+
         case MHDS_CONNECTION_CLOSED:
           if (connection->socket_fd != -1)
             connection_close_error (connection);

Modified: libmicrohttpd/src/daemon/daemon.c
===================================================================
--- libmicrohttpd/src/daemon/daemon.c   2008-07-04 03:23:55 UTC (rev 7380)
+++ libmicrohttpd/src/daemon/daemon.c   2008-07-05 00:42:25 UTC (rev 7381)
@@ -220,7 +220,7 @@
                           con->daemon->x509_cret);
 
   /* avoid gnutls blocking recv / write calls */
-  gnutls_transport_set_pull_function(tls_session, &recv);
+  // gnutls_transport_set_pull_function(tls_session, &recv);
   // gnutls_transport_set_push_function(tls_session, &send);
 
   gnutls_transport_set_ptr (tls_session, con->socket_fd);
@@ -240,9 +240,9 @@
       con->s_state = MHDS_HANDSHAKE_FAILED;
       gnutls_bye (con->tls_session, GNUTLS_SHUT_WR);
       gnutls_deinit (tls_session);
-      con->socket_fd = 1;
+      con->socket_fd = -1;
       return MHD_NO;
-      
+
     }
 
   MHD_handle_connection (data);
@@ -338,7 +338,7 @@
       CLOSE (s);
       return MHD_NO;
     }
-  
+
   /* apply connection acceptance policy if present */
   if ((daemon->apc != NULL)
       && (MHD_NO == daemon->apc (daemon->apc_cls, addr, addrlen)))
@@ -415,7 +415,7 @@
                                             &MHDS_handle_connection,
                                             connection);
       else
-#endif        
+#endif
         {
           res_thread_create = pthread_create (&connection->pid, NULL,
                                               &MHD_handle_connection,
@@ -607,7 +607,7 @@
   ds = daemon->socket_fd;
   if (ds == -1)
     return MHD_YES;
-  
+
   /* select connection thread handling type */
   if (__FD_ISSET (ds, &rs))
     MHD_accept_connection (daemon);

Modified: libmicrohttpd/src/daemon/https/Makefile.am
===================================================================
--- libmicrohttpd/src/daemon/https/Makefile.am  2008-07-04 03:23:55 UTC (rev 
7380)
+++ libmicrohttpd/src/daemon/https/Makefile.am  2008-07-05 00:42:25 UTC (rev 
7381)
@@ -6,6 +6,7 @@
 -I$(top_srcdir)/src/daemon/https/openpgp \
 -I$(top_srcdir)/src/daemon/https/opencdk \
 -I$(top_srcdir)/src/daemon/https/tls \
+-I$(top_srcdir)/src/daemon/https/includes \
 -I$(top_srcdir)/src/daemon/https/cfg 
 
 noinst_LTLIBRARIES = libhttps.la

Deleted: libmicrohttpd/src/daemon/https/includes/gnutlsxx.h
===================================================================
--- libmicrohttpd/src/daemon/https/includes/gnutlsxx.h  2008-07-04 03:23:55 UTC 
(rev 7380)
+++ libmicrohttpd/src/daemon/https/includes/gnutlsxx.h  2008-07-05 00:42:25 UTC 
(rev 7381)
@@ -1,393 +0,0 @@
-#ifndef GNUTLSXX_H
-# define GNUTLSXX_H
-
-#include <exception>
-#include <vector>
-#include <gnutls.h>
-
-namespace gnutls {
-
-class exception: public std::exception
-{
-    public:
-        exception( int x);
-        const char* what() const throw();
-        int get_code();
-    protected:
-        int retcode;
-};
-
-class dh_params
-{
-    public:
-        dh_params();
-        ~dh_params();
-        void import_raw( const gnutls_datum_t & prime,
-                     const gnutls_datum_t & generator);
-        void import_pkcs3( const gnutls_datum_t & pkcs3_params,
-                           gnutls_x509_crt_fmt_t format);
-        void generate( unsigned int bits);
-        
-        void export_pkcs3( gnutls_x509_crt_fmt_t format, unsigned char 
*params_data, size_t * params_data_size);
-        void export_raw( gnutls_datum_t& prime, gnutls_datum_t &generator);
-
-        gnutls_dh_params_t get_params_t() const;
-        dh_params & operator=(const dh_params& src);
-    protected:
-        gnutls_dh_params_t params;
-};
-  
-  
-class rsa_params
-{
-    public:
-        rsa_params();
-        ~rsa_params();
-        void import_raw( const gnutls_datum_t & m,
-                     const gnutls_datum_t & e,
-                     const gnutls_datum_t & d,
-                     const gnutls_datum_t & p,
-                     const gnutls_datum_t & q,
-                     const gnutls_datum_t & u);
-        void import_pkcs1( const gnutls_datum_t & pkcs1_params,
-                           gnutls_x509_crt_fmt_t format);
-        void generate( unsigned int bits);
-        
-        void export_pkcs1( gnutls_x509_crt_fmt_t format, unsigned char 
*params_data, size_t * params_data_size);
-        void export_raw(  gnutls_datum_t & m, gnutls_datum_t & e,
-                      gnutls_datum_t & d, gnutls_datum_t & p,
-                      gnutls_datum_t & q, gnutls_datum_t & u);
-        gnutls_rsa_params_t get_params_t() const;
-        rsa_params & operator=(const rsa_params& src);
-
-    protected:
-        gnutls_rsa_params_t params;
-};
-
-class session
-{
-    protected:
-        gnutls_session_t s;
-    public:
-        session( gnutls_connection_end_t);
-        session( session& s);
-        virtual ~session();
-
-        int bye( gnutls_close_request_t how);
-        int handshake ();
-        
-        gnutls_alert_description_t get_alert() const;
-
-        int send_alert ( gnutls_alert_level_t level,
-                         gnutls_alert_description_t desc);
-        int send_appropriate_alert (int err);
-
-        gnutls_cipher_algorithm_t get_cipher() const;
-        gnutls_kx_algorithm_t get_kx () const;
-        gnutls_mac_algorithm_t get_mac () const;
-        gnutls_compression_method_t get_compression () const;
-        gnutls_certificate_type_t get_certificate_type() const;
-
-        // for the handshake
-        void set_private_extensions ( bool allow);
-
-        gnutls_handshake_description_t get_handshake_last_out() const;
-        gnutls_handshake_description_t get_handshake_last_in() const;
-
-        ssize_t send (const void *data, size_t sizeofdata);
-        ssize_t recv (void *data, size_t sizeofdata);
-
-        bool get_record_direction() const;
-
-        // maximum packet size
-        size_t get_max_size() const;
-        void set_max_size(size_t size);
-
-        size_t check_pending() const;
-
-        void prf (size_t label_size, const char *label,
-                        int server_random_first,
-                        size_t extra_size, const char *extra,
-                        size_t outsize, char *out);
-
-        void prf_raw ( size_t label_size, const char *label,
-                      size_t seed_size, const char *seed,
-                      size_t outsize, char *out);
-
-        void set_cipher_priority (const int *list);
-        void set_mac_priority (const int *list);
-        void set_compression_priority (const int *list);
-        void set_kx_priority (const int *list);
-        void set_protocol_priority (const int *list);
-        void set_certificate_type_priority (const int *list);
-
-/* if you just want some defaults, use the following.
- */
-        void set_priority (const char* prio, const char** err_pos);
-        void set_priority (gnutls_priority_t p);
-
-        gnutls_protocol_t get_protocol_version() const;
-
-        // for resuming sessions
-        void set_data ( const void *session_data,
-                        size_t session_data_size);
-        void get_data (void *session_data,
-                       size_t * session_data_size) const;
-        void get_data(gnutls_session_t session,
-                      gnutls_datum_t & data) const;
-        void get_id ( void *session_id,
-                      size_t * session_id_size) const;
-
-        bool is_resumed () const;
-
-        void set_max_handshake_packet_length ( size_t max);
-
-        void clear_credentials();
-        void set_credentials( class credentials & cred);
-
-        void set_transport_ptr( gnutls_transport_ptr_t ptr);
-        void set_transport_ptr( gnutls_transport_ptr_t recv_ptr, 
gnutls_transport_ptr_t send_ptr);
-        gnutls_transport_ptr_t get_transport_ptr() const;
-        void get_transport_ptr(gnutls_transport_ptr_t & recv_ptr,
-                               gnutls_transport_ptr_t & send_ptr) const;
-
-        void set_transport_lowat (size_t num);
-        void set_transport_push_function( gnutls_push_func push_func);
-        void set_transport_pull_function( gnutls_pull_func pull_func);
-        
-        void set_user_ptr( void* ptr);
-        void *get_user_ptr() const;
-        
-        void send_openpgp_cert( gnutls_openpgp_crt_status_t status);
-
-        gnutls_credentials_type_t get_auth_type() const;
-        gnutls_credentials_type_t get_server_auth_type() const;
-        gnutls_credentials_type_t get_client_auth_type() const;
-
-        // informational stuff
-        void set_dh_prime_bits( unsigned int bits);
-        unsigned int get_dh_secret_bits() const;
-        unsigned int get_dh_peers_public_bits() const;
-        unsigned int get_dh_prime_bits() const;
-        void get_dh_group( gnutls_datum_t & gen, gnutls_datum_t & prime) const;
-        void get_dh_pubkey( gnutls_datum_t & raw_key) const;
-        void get_rsa_export_pubkey( gnutls_datum_t& exponent, gnutls_datum_t& 
modulus) const;
-        unsigned int get_rsa_export_modulus_bits() const;
-        
-        void get_our_certificate(gnutls_datum_t & cert) const;
-        bool get_peers_certificate(std::vector<gnutls_datum_t> &out_certs) 
const;
-        bool get_peers_certificate(const gnutls_datum_t** certs, unsigned int 
*certs_size) const;
-
-        time_t get_peers_certificate_activation_time() const;
-        time_t get_peers_certificate_expiration_time() const;
-        void verify_peers_certificate( unsigned int& status) const;
-
-};
-
-// interface for databases
-class DB
-{
-    public:
-        virtual ~DB()=0;
-        virtual bool store( const gnutls_datum_t& key, const gnutls_datum_t& 
data)=0;
-        virtual bool retrieve( const gnutls_datum_t& key, gnutls_datum_t& 
data)=0;
-        virtual bool remove( const gnutls_datum_t& key)=0;
-};
-
-class server_session: public session
-{
-    public:
-        server_session();
-        void db_remove() const;
-        
-        void set_db_cache_expiration (unsigned int seconds);
-        void set_db( const DB& db);
-        
-        // returns true if session is expired
-        bool db_check_entry ( gnutls_datum_t &session_data) const;
-    
-    // server side only
-        const char *get_srp_username() const;
-        const char *get_psk_username() const;
-
-        void get_server_name (void *data, size_t * data_length,
-                          unsigned int *type, unsigned int indx) const;
-
-        int rehandshake();
-        void set_certificate_request( gnutls_certificate_request_t);
-};
-
-class client_session: public session
-{
-    public:
-        client_session();
-        void set_server_name (gnutls_server_name_type_t type,
-                          const void *name, size_t name_length);
-    
-        bool get_request_status();
-};
-
-
-class credentials
-{
-    public:
-        credentials(gnutls_credentials_type_t t);
-#if defined(__APPLE__) || defined(__MACOS__)
-       /* FIXME: This #if is due to a compile bug in Mac OS X.  Give
-          it some time and then remove this cruft.  See also
-          lib/gnutlsxx.cpp. */
-       credentials( credentials& c) {
-         type = c.type;
-         set_ptr( c.ptr());
-       }
-#else
-       credentials( credentials& c);
-#endif
-        virtual ~credentials() { }
-        gnutls_credentials_type_t get_type() const;
-    protected:
-        friend class session;
-        virtual void* ptr() const=0;
-        virtual void set_ptr(void* ptr)=0;
-        gnutls_credentials_type_t type;
-};
-
-class certificate_credentials: public credentials
-{
-    public:
-        ~certificate_credentials();
-        certificate_credentials();
-        
-        void free_keys ();
-        void free_cas ();
-        void free_ca_names ();
-        void free_crls ();
-
-        void set_dh_params ( const dh_params &params);
-        void set_rsa_export_params ( const rsa_params& params);
-        void set_verify_flags ( unsigned int flags);
-        void set_verify_limits ( unsigned int max_bits, unsigned int 
max_depth);
-
-        void set_x509_trust_file(const char *cafile, gnutls_x509_crt_fmt_t 
type);
-        void set_x509_trust(const gnutls_datum_t & CA, gnutls_x509_crt_fmt_t 
type);
-        // FIXME: use classes instead of gnutls_x509_crt_t
-        void set_x509_trust ( gnutls_x509_crt_t * ca_list, int ca_list_size);
-
-        void set_x509_crl_file( const char *crlfile, gnutls_x509_crt_fmt_t 
type);
-        void set_x509_crl(const gnutls_datum_t & CRL, gnutls_x509_crt_fmt_t 
type);
-        void set_x509_crl ( gnutls_x509_crl_t * crl_list, int crl_list_size);
-
-        void set_x509_key_file(const char *certfile, const char *KEYFILE, 
gnutls_x509_crt_fmt_t type);
-        void set_x509_key(const gnutls_datum_t & CERT, const gnutls_datum_t & 
KEY, gnutls_x509_crt_fmt_t type);
-        // FIXME: use classes
-        void set_x509_key ( gnutls_x509_crt_t * cert_list, int cert_list_size,
-                       gnutls_x509_privkey_t key);
-        
-
-        void set_simple_pkcs12_file( const char *pkcs12file,
-                 gnutls_x509_crt_fmt_t type, const char *password);
-        
-    protected:
-        void* ptr() const;
-        void set_ptr(void* p);
-        gnutls_certificate_credentials_t cred;
-};
-
-class certificate_server_credentials: public certificate_credentials
-{
-    certificate_server_credentials() { }
-    public:
-        void set_retrieve_function( 
gnutls_certificate_server_retrieve_function* func);
-        void set_params_function( gnutls_params_function* func);
-};
-
-class certificate_client_credentials: public certificate_credentials
-{
-    public:
-        certificate_client_credentials() { }
-        void set_retrieve_function( 
gnutls_certificate_client_retrieve_function* func);
-};
-
-
-
-
-class anon_server_credentials: public credentials
-{
-    public:
-        anon_server_credentials();
-        ~anon_server_credentials();
-        void set_dh_params ( const dh_params &params);
-        void set_params_function ( gnutls_params_function * func);
-    protected:
-        gnutls_anon_server_credentials_t cred;
-};
-
-class anon_client_credentials: public credentials
-{
-    public:
-        anon_client_credentials();
-        ~anon_client_credentials();
-    protected:
-        gnutls_anon_client_credentials_t cred;
-};
-
-
-class srp_server_credentials: public credentials
-{
-    public:
-        srp_server_credentials();
-        ~srp_server_credentials();
-        void set_credentials_file (const char *password_file, const char 
*password_conf_file);
-        void set_credentials_function( gnutls_srp_server_credentials_function 
*func);
-    protected:
-        void* ptr() const;
-        void set_ptr(void* p);
-        gnutls_srp_server_credentials_t cred;
-};
-
-class srp_client_credentials: public credentials
-{
-    public:
-        srp_client_credentials();
-        ~srp_client_credentials();
-        void set_credentials (const char *username, const char *password);
-        void set_credentials_function( gnutls_srp_client_credentials_function* 
func);
-    protected:
-        void* ptr() const;
-        void set_ptr(void* p);
-        gnutls_srp_client_credentials_t cred;
-};
-
-
-class psk_server_credentials: public credentials
-{
-    public:
-        psk_server_credentials();
-        ~psk_server_credentials();
-        void set_credentials_file(const char* password_file);
-        void set_credentials_function( gnutls_psk_server_credentials_function* 
func);
-        void set_dh_params ( const dh_params &params);
-        void set_params_function (gnutls_params_function * func);
-    protected:
-        void* ptr() const;
-        void set_ptr(void* p);
-        gnutls_psk_server_credentials_t cred;
-};
-
-class psk_client_credentials: public credentials
-{
-    public:
-        psk_client_credentials();
-        ~psk_client_credentials();
-        void set_credentials (const char *username, const gnutls_datum_t& key, 
gnutls_psk_key_flags flags);
-        void set_credentials_function( gnutls_psk_client_credentials_function* 
func);
-    protected:
-        void* ptr() const;
-        void set_ptr(void* p);
-        gnutls_psk_client_credentials_t cred;
-};
-
-
-}; /* namespace */
-
-#endif                          /* GNUTLSXX_H */

Modified: libmicrohttpd/src/daemon/https/tls/Makefile.am
===================================================================
--- libmicrohttpd/src/daemon/https/tls/Makefile.am      2008-07-04 03:23:55 UTC 
(rev 7380)
+++ libmicrohttpd/src/daemon/https/tls/Makefile.am      2008-07-05 00:42:25 UTC 
(rev 7381)
@@ -64,10 +64,8 @@
 gnutls_str.c \
 gnutls_supplemental.c \
 gnutls_ui.c \
-gnutls_v2_compat.c \
 gnutls_x509.c \
 pkix_asn1_tab.c \
 x509_b64.c
 
-# gnutlsxx.cpp
 

Modified: libmicrohttpd/src/daemon/https/tls/gnutls_handshake.c
===================================================================
--- libmicrohttpd/src/daemon/https/tls/gnutls_handshake.c       2008-07-04 
03:23:55 UTC (rev 7380)
+++ libmicrohttpd/src/daemon/https/tls/gnutls_handshake.c       2008-07-05 
00:42:25 UTC (rev 7381)
@@ -41,15 +41,14 @@
 #include "gnutls_extensions.h"
 #include "gnutls_supplemental.h"
 #include "gnutls_auth_int.h"
-#include "gnutls_v2_compat.h"
 #include "auth_cert.h"
 #include "gnutls_cert.h"
 #include "gnutls_constate.h"
-#include <gnutls_record.h>
-#include <gnutls_state.h>
-#include <gnutls_rsa_export.h>  /* for gnutls_get_rsa_params() */
-#include <auth_anon.h>          /* for gnutls_anon_server_credentials_t */
-#include <gc.h>
+#include "gnutls_record.h"
+#include "gnutls_state.h"
+#include "gnutls_rsa_export.h"  /* for gnutls_get_rsa_params() */
+#include "auth_anon.h"          /* for gnutls_anon_server_credentials_t */
+#include "gc.h"
 
 #ifdef HANDSHAKE_DEBUG
 #define ERR(x, y) _gnutls_handshake_log( "HSK[%x]: %s (%d)\n", session, x,y)
@@ -76,7 +75,7 @@
   _gnutls_handshake_buffer_clear (session);
 }
 
-/* this will copy the required values for resuming to 
+/* this will copy the required values for resuming to
  * internals, and to security_parameters.
  * this will keep as less data to security_parameters.
  */
@@ -91,7 +90,7 @@
           client_random,
           session->security_parameters.client_random, TLS_RANDOM_SIZE);
 
-  /* keep the ciphersuite and compression 
+  /* keep the ciphersuite and compression
    * That is because the client must see these in our
    * hello message.
    */
@@ -135,8 +134,7 @@
   memcpy (session->security_parameters.client_random, rnd, TLS_RANDOM_SIZE);
 }
 
-/* Calculate The SSL3 Finished message 
- */
+/* Calculate The SSL3 Finished message */
 #define SSL3_CLIENT_MSG "CLNT"
 #define SSL3_SERVER_MSG "SRVR"
 #define SSL_MSG_LEN 4
@@ -185,8 +183,7 @@
   return 0;
 }
 
-/* Hash the handshake messages as required by TLS 1.0 
- */
+/* Hash the handshake messages as required by TLS 1.0 */
 #define SERVER_MSG "server finished"
 #define CLIENT_MSG "client finished"
 #define TLS_MSG_LEN 15
@@ -331,7 +328,7 @@
   return 0;
 }
 
-/* Read a client hello packet. 
+/* Read a client hello packet.
  * A client hello must be a known version client hello
  * or version 2.0 client hello (only for compatibility
  * since SSL version 2.0 is not supported).
@@ -348,10 +345,6 @@
   int len = datalen;
   opaque rnd[TLS_RANDOM_SIZE], *suite_ptr, *comp_ptr;
 
-  if (session->internals.v2_hello != 0)
-    {                           /* version 2.0 */
-      return _gnutls_read_client_hello_v2 (session, data, datalen);
-    }
   DECR_LEN (len, 2);
 
   _gnutls_handshake_log ("HSK[%x]: Client's version: %d.%d\n", session,
@@ -382,8 +375,7 @@
   DECR_LEN (len, 1);
   session_id_len = data[pos++];
 
-  /* RESUME SESSION 
-   */
+  /* RESUME SESSION */
   if (session_id_len > TLS_MAX_SESSION_ID_SIZE)
     {
       gnutls_assert ();
@@ -478,7 +470,7 @@
   return 0;
 }
 
-/* here we hash all pending data. 
+/* here we hash all pending data.
  */
 inline static int
 _gnutls_handshake_hash_pending (gnutls_session_t session)
@@ -569,7 +561,7 @@
 }
 
 /* This is to be called after sending our finished message. If everything
- * went fine we have negotiated a secure connection 
+ * went fine we have negotiated a secure connection
  */
 int
 _gnutls_recv_finished (gnutls_session_t session)
@@ -803,7 +795,7 @@
 }
 
 
-/* This selects the best supported compression method from the ones provided 
+/* This selects the best supported compression method from the ones provided
  */
 int
 _gnutls_server_select_comp_method (gnutls_session_t session,
@@ -875,8 +867,7 @@
 }
 
 
-/* This function will hash the handshake message we sent.
- */
+/* This function will hash the handshake message we sent. */
 static int
 _gnutls_handshake_hash_add_sent (gnutls_session_t session,
                                  gnutls_handshake_description_t type,
@@ -904,7 +895,7 @@
 
 /* This function sends a handshake message of type 'type' containing the
  * data specified here. If the previous _gnutls_send_handshake() returned
- * GNUTLS_E_AGAIN or GNUTLS_E_INTERRUPTED, then it must be called again 
+ * GNUTLS_E_AGAIN or GNUTLS_E_INTERRUPTED, then it must be called again
  * (until it returns ok), with NULL parameters.
  */
 int
@@ -1533,8 +1524,7 @@
 
 
 
-  /* move to compression 
-   */
+  /* move to compression   */
   DECR_LEN (len, 1);
 
   ret = _gnutls_client_set_comp_method (session, data[pos++]);
@@ -1628,7 +1618,7 @@
 }
 
 
-/* This function copies the appropriate compression methods, to a locally 
allocated buffer 
+/* This function copies the appropriate compression methods, to a locally 
allocated buffer
  * Needed in hello messages. Returns the new data length.
  */
 static int
@@ -1701,7 +1691,7 @@
     {
 
       datalen = 2 + (session_id_len + 1) + TLS_RANDOM_SIZE;
-      /* 2 for version, (4 for unix time + 28 for random 
bytes==TLS_RANDOM_SIZE) 
+      /* 2 for version, (4 for unix time + 28 for random 
bytes==TLS_RANDOM_SIZE)
        */
 
       data = gnutls_malloc (datalen);
@@ -1731,7 +1721,7 @@
       data[pos++] = _gnutls_version_get_major (hver);
       data[pos++] = _gnutls_version_get_minor (hver);
 
-      /* Set the version we advertized as maximum 
+      /* Set the version we advertized as maximum
        * (RSA uses it).
        */
       _gnutls_set_adv_version (session, hver);
@@ -1740,8 +1730,8 @@
        * different version in the record layer.
        * It seems they prefer to read the record's version
        * as the one we actually requested.
-       * The proper behaviour is to use the one in the client hello 
-       * handshake packet and ignore the one in the packet's record 
+       * The proper behaviour is to use the one in the client hello
+       * handshake packet and ignore the one in the packet's record
        * header.
        */
       _gnutls_set_current_version (session, hver);
@@ -1750,7 +1740,7 @@
        */
       session->security_parameters.timestamp = time (NULL);
 
-      /* Generate random data 
+      /* Generate random data
        */
       _gnutls_tls_create_random (rnd);
       _gnutls_set_client_random (session, rnd);
@@ -1758,8 +1748,7 @@
       memcpy (&data[pos], rnd, TLS_RANDOM_SIZE);
       pos += TLS_RANDOM_SIZE;
 
-      /* Copy the Session ID 
-       */
+      /* Copy the Session ID       */
       data[pos++] = session_id_len;
 
       if (session_id_len > 0)
@@ -2286,7 +2275,7 @@
 
 
 /*
- * _gnutls_handshake_client 
+ * _gnutls_handshake_client
  * This function performs the client side of the handshake of the TLS/SSL 
protocol.
  */
 int
@@ -2348,7 +2337,7 @@
       IMED_RET ("recv server kx message", ret);
 
     case STATE5:
-      /* receive the server certificate request - if any 
+      /* receive the server certificate request - if any
        */
 
       if (session->internals.resumed == RESUME_FALSE)   /* if we are not 
resuming */
@@ -2405,7 +2394,7 @@
   return 0;
 }
 
-/* This function sends the final handshake packets and initializes connection 
+/* This function sends the final handshake packets and initializes connection
  */
 static int
 _gnutls_send_handshake_final (gnutls_session_t session, int init)
@@ -2427,7 +2416,7 @@
           return ret;
         }
 
-      /* Initialize the connection session (start encryption) - in case of 
client 
+      /* Initialize the connection session (start encryption) - in case of 
client
        */
       if (init == TRUE)
         {
@@ -2465,7 +2454,7 @@
   return 0;
 }
 
-/* This function receives the final handshake packets 
+/* This function receives the final handshake packets
  * And executes the appropriate function to initialize the
  * read session.
  */
@@ -2525,7 +2514,7 @@
 }
 
  /*
-  * _gnutls_handshake_server 
+  * _gnutls_handshake_server
   * This function does the server stuff of the handshake protocol.
   */
 
@@ -2846,7 +2835,7 @@
   gnutls_kx_algorithm_t *alg = NULL;
   int alg_size = 0;
 
-  /* if we should use a specific certificate, 
+  /* if we should use a specific certificate,
    * we should remove all algorithms that are not supported
    * by that certificate and are on the same authentication
    * method (CERTIFICATE).
@@ -2873,7 +2862,7 @@
         }
     }
 
-  /* get all the key exchange algorithms that are 
+  /* get all the key exchange algorithms that are
    * supported by the X509 certificate parameters.
    */
   if ((ret =
@@ -2902,7 +2891,7 @@
        */
       kx = _gnutls_cipher_suite_get_kx_algo (&(*cipherSuites)[i]);
 
-      /* if it is defined but had no credentials 
+      /* if it is defined but had no credentials
        */
       if (_gnutls_get_kx_cred (session, kx, NULL) == NULL)
         {

Modified: libmicrohttpd/src/daemon/https/tls/gnutls_priority.c
===================================================================
--- libmicrohttpd/src/daemon/https/tls/gnutls_priority.c        2008-07-04 
03:23:55 UTC (rev 7380)
+++ libmicrohttpd/src/daemon/https/tls/gnutls_priority.c        2008-07-05 
00:42:25 UTC (rev 7381)
@@ -193,7 +193,7 @@
  * Sets the priority on the certificate types supported by gnutls.
  * Priority is higher for elements specified before others.
  * After specifying the types you want, you must append a 0.
- * Note that the certificate type priority is set on the client. 
+ * Note that the certificate type priority is set on the client.
  * The server does not use the cert type priority except for disabling
  * types that were not specified.
  *
@@ -215,7 +215,7 @@
 }
 
 static const int protocol_priority[] = { GNUTLS_TLS1_1,
-  GNUTLS_TLS1_0,
+  GNUTLS_TLS1_0, GNUTLS_SSL3,
   0
 };
 

Deleted: libmicrohttpd/src/daemon/https/tls/gnutls_v2_compat.c
===================================================================
--- libmicrohttpd/src/daemon/https/tls/gnutls_v2_compat.c       2008-07-04 
03:23:55 UTC (rev 7380)
+++ libmicrohttpd/src/daemon/https/tls/gnutls_v2_compat.c       2008-07-05 
00:42:25 UTC (rev 7381)
@@ -1,259 +0,0 @@
-/*
- * Copyright (C) 2001, 2004, 2005, 2006 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
- *
- */
-
-/* Functions to parse the SSLv2.0 hello message.
- */
-
-#include "gnutls_int.h"
-#include "gnutls_errors.h"
-#include "gnutls_dh.h"
-#include "debug.h"
-#include "gnutls_algorithms.h"
-#include "gnutls_compress.h"
-#include "gnutls_cipher.h"
-#include "gnutls_buffers.h"
-#include "gnutls_kx.h"
-#include "gnutls_handshake.h"
-#include "gnutls_num.h"
-#include "gnutls_hash_int.h"
-#include "gnutls_db.h"
-#include "gnutls_extensions.h"
-#include "gnutls_auth_int.h"
-
-/* This selects the best supported ciphersuite from the ones provided */
-static int
-_gnutls_handshake_select_v2_suite (gnutls_session_t session,
-                                   opaque * data, int datalen)
-{
-  int i, j, ret;
-  opaque *_data;
-  int _datalen;
-
-  _gnutls_handshake_log ("HSK[%x]: Parsing a version 2.0 client hello.\n",
-                         session);
-
-  _data = gnutls_malloc (datalen);
-  if (_data == NULL)
-    {
-      gnutls_assert ();
-      return GNUTLS_E_MEMORY_ERROR;
-    }
-
-  if (datalen % 3 != 0)
-    {
-      gnutls_assert ();
-      return GNUTLS_E_UNEXPECTED_PACKET_LENGTH;
-    }
-
-  i = _datalen = 0;
-  for (j = 0; j < datalen; j += 3)
-    {
-      if (data[j] == 0)
-        {
-          memcpy (&_data[i], &data[j + 1], 2);
-          i += 2;
-          _datalen += 2;
-        }
-    }
-
-  ret = _gnutls_server_select_suite (session, _data, _datalen);
-  gnutls_free (_data);
-
-  return ret;
-
-}
-
-
-/* Read a v2 client hello. Some browsers still use that beast!
- * However they set their version to 3.0 or 3.1.
- */
-int
-_gnutls_read_client_hello_v2 (gnutls_session_t session, opaque * data,
-                              int datalen)
-{
-  uint16_t session_id_len = 0;
-  int pos = 0;
-  int ret = 0;
-  uint16_t sizeOfSuites;
-  gnutls_protocol_t adv_version;
-  opaque rnd[TLS_RANDOM_SIZE];
-  int len = datalen;
-  int err;
-  uint16_t challenge;
-  opaque session_id[TLS_MAX_SESSION_ID_SIZE];
-
-  /* we only want to get here once - only in client hello */
-  session->internals.v2_hello = 0;
-
-  DECR_LEN (len, 2);
-
-  _gnutls_handshake_log
-    ("HSK[%x]: SSL 2.0 Hello: Client's version: %d.%d\n", session,
-     data[pos], data[pos + 1]);
-
-  set_adv_version (session, data[pos], data[pos + 1]);
-
-  adv_version = _gnutls_version_get (data[pos], data[pos + 1]);
-
-  ret = _gnutls_negotiate_version (session, adv_version);
-  if (ret < 0)
-    {
-      gnutls_assert ();
-      return ret;
-    }
-
-  pos += 2;
-
-  /* Read uint16_t cipher_spec_length */
-  DECR_LEN (len, 2);
-  sizeOfSuites = _gnutls_read_uint16 (&data[pos]);
-  pos += 2;
-
-  /* read session id length */
-  DECR_LEN (len, 2);
-  session_id_len = _gnutls_read_uint16 (&data[pos]);
-  pos += 2;
-
-  if (session_id_len > TLS_MAX_SESSION_ID_SIZE)
-    {
-      gnutls_assert ();
-      return GNUTLS_E_UNEXPECTED_PACKET_LENGTH;
-    }
-
-  /* read challenge length */
-  DECR_LEN (len, 2);
-  challenge = _gnutls_read_uint16 (&data[pos]);
-  pos += 2;
-
-  if (challenge < 16 || challenge > TLS_RANDOM_SIZE)
-    {
-      gnutls_assert ();
-      return GNUTLS_E_UNSUPPORTED_VERSION_PACKET;
-    }
-
-  /* call the user hello callback
-   */
-  ret = _gnutls_user_hello_func (session, adv_version);
-  if (ret < 0)
-    {
-      gnutls_assert ();
-      return ret;
-    }
-
-  /* find an appropriate cipher suite */
-
-  DECR_LEN (len, sizeOfSuites);
-  ret = _gnutls_handshake_select_v2_suite (session, &data[pos], sizeOfSuites);
-
-  pos += sizeOfSuites;
-  if (ret < 0)
-    {
-      gnutls_assert ();
-      return ret;
-    }
-
-  /* check if the credentials (username, public key etc.) are ok
-   */
-  if (_gnutls_get_kx_cred
-      (session,
-       _gnutls_cipher_suite_get_kx_algo (&session->security_parameters.
-                                         current_cipher_suite),
-       &err) == NULL && err != 0)
-    {
-      gnutls_assert ();
-      return GNUTLS_E_INSUFFICIENT_CREDENTIALS;
-    }
-
-  /* set the mod_auth_st to the appropriate struct
-   * according to the KX algorithm. This is needed since all the
-   * handshake functions are read from there;
-   */
-  session->internals.auth_struct =
-    _gnutls_kx_auth_struct (_gnutls_cipher_suite_get_kx_algo
-                            (&session->security_parameters.
-                             current_cipher_suite));
-  if (session->internals.auth_struct == NULL)
-    {
-
-      _gnutls_handshake_log
-        ("HSK[%x]: SSL 2.0 Hello: Cannot find the appropriate handler for the 
KX algorithm\n",
-         session);
-
-      gnutls_assert ();
-      return GNUTLS_E_INTERNAL_ERROR;
-    }
-
-
-
-  /* read random new values -skip session id for now */
-  DECR_LEN (len, session_id_len);       /* skip session id for now */
-  memcpy (session_id, &data[pos], session_id_len);
-  pos += session_id_len;
-
-  DECR_LEN (len, challenge);
-  memset (rnd, 0, TLS_RANDOM_SIZE);
-
-  memcpy (&rnd[TLS_RANDOM_SIZE - challenge], &data[pos], challenge);
-
-  _gnutls_set_client_random (session, rnd);
-
-  /* generate server random value */
-
-  _gnutls_tls_create_random (rnd);
-  _gnutls_set_server_random (session, rnd);
-
-  session->security_parameters.timestamp = time (NULL);
-
-
-  /* RESUME SESSION */
-
-  DECR_LEN (len, session_id_len);
-  ret = _gnutls_server_restore_session (session, session_id, session_id_len);
-
-  if (ret == 0)
-    {                           /* resumed! */
-      /* get the new random values */
-      memcpy (session->internals.resumed_security_parameters.
-              server_random, session->security_parameters.server_random,
-              TLS_RANDOM_SIZE);
-      memcpy (session->internals.resumed_security_parameters.
-              client_random, session->security_parameters.client_random,
-              TLS_RANDOM_SIZE);
-
-      session->internals.resumed = RESUME_TRUE;
-      return 0;
-    }
-  else
-    {
-      _gnutls_generate_session_id (session->security_parameters.
-                                   session_id,
-                                   &session->security_parameters.
-                                   session_id_size);
-      session->internals.resumed = RESUME_FALSE;
-    }
-
-  session->internals.compression_method = GNUTLS_COMP_NULL;
-
-  return 0;
-}

Deleted: libmicrohttpd/src/daemon/https/tls/gnutls_v2_compat.h
===================================================================
--- libmicrohttpd/src/daemon/https/tls/gnutls_v2_compat.h       2008-07-04 
03:23:55 UTC (rev 7380)
+++ libmicrohttpd/src/daemon/https/tls/gnutls_v2_compat.h       2008-07-05 
00:42:25 UTC (rev 7381)
@@ -1,26 +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
- *
- */
-
-int _gnutls_read_client_hello_v2 (gnutls_session_t session, opaque * data,
-                                 int datalen);

Deleted: libmicrohttpd/src/daemon/https/tls/gnutlsxx.cpp
===================================================================
--- libmicrohttpd/src/daemon/https/tls/gnutlsxx.cpp     2008-07-04 03:23:55 UTC 
(rev 7380)
+++ libmicrohttpd/src/daemon/https/tls/gnutlsxx.cpp     2008-07-05 00:42:25 UTC 
(rev 7381)
@@ -1,907 +0,0 @@
-#include <gnutlsxx.h>
-
-using namespace gnutls;
-
-inline int RETWRAP_NET(int ret) 
-{
-    if (gnutls_error_is_fatal(ret)) throw(exception(ret));
-    else return ret;
-}
-
-inline int RETWRAP(int ret) 
-{
-    if (ret < 0) throw(exception(ret));
-    return ret;
-}
-
-session::session( gnutls_connection_end_t end)
-{
-    RETWRAP(gnutls_init( &this->s, end));
-}
-
-session::session( session& s)
-{
-    this->s = s.s;
-}
-
-session::~session()
-{
-    gnutls_deinit( this->s);
-}
-
-int session::bye( gnutls_close_request_t how)
-{
-    return RETWRAP_NET( gnutls_bye( this->s, how));
-}
-
-int session::handshake ()
-{
-    return RETWRAP_NET( gnutls_handshake( this->s));
-}
-
-
-server_session::server_session() : session( GNUTLS_SERVER)
-{
-}
-
-int server_session::rehandshake()
-{
-    return RETWRAP_NET( gnutls_rehandshake( this->s));
-}
-
-gnutls_alert_description_t session::get_alert() const
-{
-    return gnutls_alert_get( this->s);
-}
-
-int session::send_alert ( gnutls_alert_level_t level,
-                          gnutls_alert_description_t desc)
-{
-    return RETWRAP_NET(gnutls_alert_send( this->s, level, desc));
-}
-
-int session::send_appropriate_alert (int err)
-{
-    return RETWRAP_NET(gnutls_alert_send_appropriate( this->s, err));
-}
-
-gnutls_cipher_algorithm_t session::get_cipher() const
-{
-    return gnutls_cipher_get( this->s);
-}
-
-gnutls_kx_algorithm_t session::get_kx () const
-{
-    return gnutls_kx_get( this->s);
-}
-
-gnutls_mac_algorithm_t session::get_mac () const
-{
-    return gnutls_mac_get( this->s);
-}
-
-gnutls_compression_method_t session::get_compression() const
-{
-    return gnutls_compression_get( this->s);
-}
-
-gnutls_certificate_type_t session::get_certificate_type() const
-{
-    return gnutls_certificate_type_get( this->s);
-}
-
-void session::set_private_extensions ( bool allow)
-{
-    gnutls_handshake_set_private_extensions( this->s, (int)allow);
-}
-
-gnutls_handshake_description_t session::get_handshake_last_out() const
-{
-    return gnutls_handshake_get_last_out( this->s);
-}
-
-gnutls_handshake_description_t session::get_handshake_last_in() const
-{
-    return gnutls_handshake_get_last_in( this->s);
-}
-
-ssize_t session::send (const void *data, size_t sizeofdata)
-{
-    return RETWRAP_NET(gnutls_record_send( this->s, data, sizeofdata));
-}
-
-ssize_t session::recv (void *data, size_t sizeofdata)
-{
-    return RETWRAP_NET(gnutls_record_recv( this->s, data, sizeofdata));
-}
-
-bool session::get_record_direction() const
-{
-    return gnutls_record_get_direction(this->s);
-}
-
-        // maximum packet size
-size_t session::get_max_size () const
-{
-    return gnutls_record_get_max_size( this->s);
-}
-
-void session::set_max_size(size_t size)
-{
-    RETWRAP( gnutls_record_set_max_size( this->s, size));
-}
-
-size_t session::check_pending () const
-{
-    return gnutls_record_check_pending( this->s);
-}
-
-
-void session::prf (size_t label_size, const char *label,
-                 int server_random_first,
-                 size_t extra_size, const char *extra,
-                 size_t outsize, char *out)
-{
-    RETWRAP(gnutls_prf( this->s, label_size, label, server_random_first,
-            extra_size, extra, outsize, out));
-}
-
-void session::prf_raw ( size_t label_size, const char *label,
-                      size_t seed_size, const char *seed,
-                      size_t outsize, char *out)
-{
-    RETWRAP( gnutls_prf_raw( this->s, label_size, label, seed_size, seed, 
outsize, out));
-}
-
-
-void session::set_cipher_priority (const int *list)
-{
-    RETWRAP( gnutls_cipher_set_priority( this->s, list));
-}
-
-void session::set_mac_priority (const int *list)
-{
-    RETWRAP( gnutls_mac_set_priority( this->s, list));
-}
-
-void session::set_compression_priority (const int *list)
-{
-    RETWRAP( gnutls_compression_set_priority( this->s, list));
-}
-
-void session::set_kx_priority (const int *list)
-{
-    RETWRAP( gnutls_kx_set_priority( this->s, list));
-}
-
-void session::set_protocol_priority (const int *list)
-{
-    RETWRAP( gnutls_protocol_set_priority( this->s, list));
-}
-
-void session::set_certificate_type_priority (const int *list)
-{
-    RETWRAP( gnutls_certificate_type_set_priority( this->s, list));
-}
-
-
-/* if you just want some defaults, use the following.
- */
-void session::set_priority(const char* prio, const char** err_pos)
-{
-    RETWRAP(gnutls_priority_set_direct( this->s, prio, err_pos));
-}
-
-void session::set_priority(gnutls_priority_t p)
-{
-    RETWRAP(gnutls_priority_set( this->s, p));
-}
-
-gnutls_protocol_t session::get_protocol_version() const
-{
-    return gnutls_protocol_get_version( this->s);
-}
-
-void session::set_data ( const void *session_data,
-                        size_t session_data_size)
-{
-    RETWRAP(gnutls_session_set_data( this->s, session_data, 
session_data_size));
-}
-
-void session::get_data (void *session_data,
-                        size_t * session_data_size) const
-{
-    RETWRAP(gnutls_session_get_data( this->s, session_data, 
session_data_size));
-}
-
-void session::get_data(gnutls_session_t session,
-                       gnutls_datum_t & data) const
-{
-    RETWRAP(gnutls_session_get_data2( this->s, &data));
-
-}
-
-void session::get_id ( void *session_id,
-                       size_t * session_id_size) const
-{
-    RETWRAP( gnutls_session_get_id( this->s, session_id, session_id_size));
-}
-
-bool session::is_resumed() const
-{
-    int ret = gnutls_session_is_resumed( this->s);
-    
-    if (ret != 0) return true;
-    return false;
-}
-
-
-bool session::get_peers_certificate(std::vector<gnutls_datum_t> &out_certs) 
const
-{
-    const gnutls_datum_t *certs;
-    unsigned int certs_size;
-    
-    certs = gnutls_certificate_get_peers (this->s, &certs_size);
-    
-    if (certs==NULL) return false;
-    
-    for(unsigned int i=0;i<certs_size;i++)
-        out_certs.push_back( certs[i]);
-    
-    return true;
-}
-
-bool session::get_peers_certificate(const gnutls_datum_t** certs, unsigned int 
*certs_size) const
-{
-    *certs = gnutls_certificate_get_peers (this->s, certs_size);
-    
-    if (*certs==NULL) return false;
-    return true;
-}
-
-void session::get_our_certificate(gnutls_datum_t& cert) const
-{
-const gnutls_datum_t *d;
-    
-    d = gnutls_certificate_get_ours(this->s);
-    if (d==NULL)
-        throw(exception( GNUTLS_E_INVALID_REQUEST));
-    cert = *d;
-}
-          
-time_t session::get_peers_certificate_activation_time() const
-{
-    return gnutls_certificate_activation_time_peers( this->s);
-}
-
-time_t session::get_peers_certificate_expiration_time() const
-{
-    return gnutls_certificate_expiration_time_peers( this->s);
-}
-void session::verify_peers_certificate( unsigned int& status) const
-{
-    RETWRAP( gnutls_certificate_verify_peers2( this->s, &status));
-}
-
-
-client_session::client_session() : session( GNUTLS_CLIENT)
-{
-}
-
-// client session
-void client_session::set_server_name (gnutls_server_name_type_t type,
-                                      const void *name, size_t name_length)
-{
-    RETWRAP( gnutls_server_name_set( this->s, type, name, name_length));
-}
-
-bool client_session::get_request_status()
-{
-    return RETWRAP(gnutls_certificate_client_get_request_status (this->s));
-}
-
-// server_session
-void server_session::get_server_name (void *data, size_t * data_length,
-                                      unsigned int *type, unsigned int indx) 
const
-{
-    RETWRAP( gnutls_server_name_get( this->s, data, data_length, type, indx));
-}
-
-// internal DB stuff
-static int store_function(void *_db, gnutls_datum_t key, gnutls_datum_t data)
-{
-    try {
-        DB* db = static_cast<DB*>(_db);
-    
-        if (db->store( key, data)==false) return -1;
-    } catch(...) {
-        return -1;
-    }
-
-    return 0;
-}
-
-const static gnutls_datum_t null_datum = { NULL, 0 };
-
-static gnutls_datum_t retrieve_function(void *_db, gnutls_datum_t key)
-{
-    gnutls_datum_t data;
-    
-    try {
-        DB* db = static_cast<DB*>(_db);
-    
-        if (db->retrieve( key, data)==false) return null_datum;
-    
-    } catch(...) {
-        return null_datum;
-    }
-
-    return data;
-}
-
-static int remove_function(void *_db, gnutls_datum_t key)
-{
-    try {
-        DB* db = static_cast<DB*>(_db);
-    
-        if (db->remove( key)==false) return -1;
-    } catch(...) {
-        return -1;
-    }
-
-    return 0;
-}
-
-void server_session::set_db( const DB& db)
-{
-    gnutls_db_set_ptr( this->s, const_cast<DB*>(&db));
-    gnutls_db_set_store_function( this->s, store_function);
-    gnutls_db_set_retrieve_function( this->s, retrieve_function);
-    gnutls_db_set_remove_function( this->s, remove_function);
-}
-
-void server_session::set_db_cache_expiration (unsigned int seconds)
-{
-    gnutls_db_set_cache_expiration( this->s, seconds);
-}
-
-void server_session::db_remove () const
-{
-    gnutls_db_remove_session( this->s);
-}
-
-bool server_session::db_check_entry ( gnutls_datum_t &session_data) const
-{
-    int ret = gnutls_db_check_entry( this->s, session_data);
-
-    if (ret != 0) return true;
-    return false;
-}
-
-void session::set_max_handshake_packet_length ( size_t max)
-{
-    gnutls_handshake_set_max_packet_length( this->s, max);
-}
-
-void session::clear_credentials()
-{
-    gnutls_credentials_clear( this->s);
-}
-
-void session::set_credentials( credentials &cred)
-{
-    RETWRAP(gnutls_credentials_set( this->s, cred.get_type(), cred.ptr()));
-}
-
-const char* server_session::get_srp_username() const
-{
-    return gnutls_srp_server_get_username( this->s);
-}
-
-const char* server_session::get_psk_username() const
-{
-    return gnutls_psk_server_get_username( this->s);
-}
-
-
-void session::set_transport_ptr( gnutls_transport_ptr_t ptr)
-{
-    gnutls_transport_set_ptr( this->s, ptr);
-}
-  
-void session::set_transport_ptr( gnutls_transport_ptr_t recv_ptr, 
gnutls_transport_ptr_t send_ptr)
-{
-    gnutls_transport_set_ptr2( this->s, recv_ptr, send_ptr);
-}
-
-
-gnutls_transport_ptr_t session::get_transport_ptr () const
-{
-    return gnutls_transport_get_ptr (this->s);
-}
-  
-void session::get_transport_ptr( gnutls_transport_ptr_t & recv_ptr,
-                                 gnutls_transport_ptr_t & send_ptr) const
-{
-    gnutls_transport_get_ptr2 (this->s, &recv_ptr, &send_ptr);
-}
-
-void session::set_transport_lowat( size_t num)
-{
-    gnutls_transport_set_lowat (this->s, num);
-}
-
-void session::set_transport_push_function( gnutls_push_func push_func)
-{
-    gnutls_transport_set_push_function ( this->s,  push_func);
-}
-  
-void session::set_transport_pull_function( gnutls_pull_func pull_func)
-{
-    gnutls_transport_set_pull_function ( this->s,  pull_func);
-}
-
-void session::set_user_ptr( void* ptr)
-{
-    gnutls_session_set_ptr( this->s, ptr);
-}
-
-void* session::get_user_ptr( ) const
-{
-    return gnutls_session_get_ptr(this->s);
-}
-  
-void session::send_openpgp_cert( gnutls_openpgp_crt_status_t status)
-{
-    gnutls_openpgp_send_cert(this->s, status);
-}
-
-
-void session::set_dh_prime_bits( unsigned int bits)
-{
-    gnutls_dh_set_prime_bits( this->s, bits);
-}
-
-unsigned int session::get_dh_secret_bits() const
-{
-    return RETWRAP( gnutls_dh_get_secret_bits( this->s));
-}
-
-unsigned int session::get_dh_peers_public_bits() const
-{
-    return RETWRAP(gnutls_dh_get_peers_public_bits( this->s));
-}
-
-unsigned int session::get_dh_prime_bits() const
-{
-    return RETWRAP( gnutls_dh_get_prime_bits( this->s));
-}
-
-void session::get_dh_group( gnutls_datum_t & gen, gnutls_datum_t & prime) const
-{
-    RETWRAP( gnutls_dh_get_group( this->s, &gen, &prime));
-}
-
-void session::get_dh_pubkey( gnutls_datum_t & raw_key) const
-{
-    RETWRAP(gnutls_dh_get_pubkey( this->s, &raw_key));
-}
-
-void session::get_rsa_export_pubkey( gnutls_datum_t& exponent, gnutls_datum_t& 
modulus) const
-{
-    RETWRAP( gnutls_rsa_export_get_pubkey( this->s, &exponent, &modulus));
-}
-
-unsigned int session::get_rsa_export_modulus_bits() const
-{
-    return RETWRAP(gnutls_rsa_export_get_modulus_bits( this->s));
-}
-
-void server_session::set_certificate_request( gnutls_certificate_request_t req)
-{
-    gnutls_certificate_server_set_request (this->s, req);
-}
-
-
-
-
-gnutls_credentials_type_t session::get_auth_type() const
-{
-    return gnutls_auth_get_type( this->s);
-}
-
-gnutls_credentials_type_t session::get_server_auth_type() const
-{
-    return gnutls_auth_server_get_type( this->s);
-}
-
-gnutls_credentials_type_t session::get_client_auth_type() const
-{
-    return gnutls_auth_client_get_type( this->s);
-}
-
-
-void* certificate_credentials::ptr() const
-{
-    return this->cred;
-}
-
-void certificate_credentials::set_ptr(void* p)
-{
-    this->cred = static_cast<gnutls_certificate_credentials_t> (p);
-}
-
-certificate_credentials::~certificate_credentials()
-{
-    gnutls_certificate_free_credentials (this->cred); 
-}
-
-certificate_credentials::certificate_credentials() : 
credentials(GNUTLS_CRD_CERTIFICATE)
-{
-    RETWRAP(gnutls_certificate_allocate_credentials ( &this->cred));
-}
-
-void certificate_server_credentials::set_params_function( 
gnutls_params_function* func)
-{
-    gnutls_certificate_set_params_function( this->cred, func);
-}
-
-anon_server_credentials::anon_server_credentials() : 
credentials(GNUTLS_CRD_ANON)
-{ 
-    RETWRAP(gnutls_anon_allocate_server_credentials( &this->cred));
-}
-        
-anon_server_credentials::~anon_server_credentials() 
-{ 
-    gnutls_anon_free_server_credentials( this->cred); 
-}
-
-void anon_server_credentials::set_dh_params( const dh_params& params) 
-{
-    gnutls_anon_set_server_dh_params (this->cred, params.get_params_t());
-}
-
-void anon_server_credentials::set_params_function ( gnutls_params_function * 
func)
-{
-    gnutls_anon_set_server_params_function ( this->cred, func); 
-}
-
-anon_client_credentials::anon_client_credentials() : 
credentials(GNUTLS_CRD_ANON)
-{ 
-    RETWRAP(gnutls_anon_allocate_client_credentials( &this->cred));
-}
-        
-anon_client_credentials::~anon_client_credentials() 
-{ 
-    gnutls_anon_free_client_credentials( this->cred); 
-}
-
-void certificate_credentials::free_keys ()
-{
-    gnutls_certificate_free_keys( this->cred);
-}
-
-void certificate_credentials::free_cas ()
-{
-    gnutls_certificate_free_cas( this->cred);
-}
-
-void certificate_credentials::free_ca_names ()
-{
-    gnutls_certificate_free_ca_names( this->cred);
-}
-
-void certificate_credentials::free_crls ()
-{
-    gnutls_certificate_free_crls( this->cred);
-}
-
-
-void certificate_credentials::set_dh_params ( const dh_params& params)
-{
-    gnutls_certificate_set_dh_params( this->cred, params.get_params_t());
-}
-
-void certificate_credentials::set_rsa_export_params ( const rsa_params & 
params)
-{
-    gnutls_certificate_set_rsa_export_params( this->cred, 
params.get_params_t());
-}
-
-void certificate_credentials::set_verify_flags ( unsigned int flags)
-{
-    gnutls_certificate_set_verify_flags( this->cred, flags);
-}
-
-void certificate_credentials::set_verify_limits ( unsigned int max_bits, 
unsigned int max_depth)
-{
-    gnutls_certificate_set_verify_limits( this->cred, max_bits, max_depth);
-}
-
-void certificate_credentials::set_x509_trust_file(const char *cafile, 
gnutls_x509_crt_fmt_t type)
-{
-    RETWRAP( gnutls_certificate_set_x509_trust_file( this->cred, cafile, 
type));
-}
-
-void certificate_credentials::set_x509_trust(const gnutls_datum_t & CA, 
gnutls_x509_crt_fmt_t type)
-{
-    RETWRAP( gnutls_certificate_set_x509_trust_mem( this->cred, &CA, type));
-}
-
-
-void certificate_credentials::set_x509_crl_file( const char *crlfile, 
gnutls_x509_crt_fmt_t type)
-{
-    RETWRAP( gnutls_certificate_set_x509_crl_file( this->cred, crlfile, type));
-}
-
-void certificate_credentials::set_x509_crl(const gnutls_datum_t & CRL, 
gnutls_x509_crt_fmt_t type)
-{
-    RETWRAP( gnutls_certificate_set_x509_crl_mem( this->cred, &CRL, type));
-}
-
-void certificate_credentials::set_x509_key_file(const char *certfile, const 
char *keyfile, gnutls_x509_crt_fmt_t type)
-{
-    RETWRAP( gnutls_certificate_set_x509_key_file( this->cred, certfile, 
keyfile, type));
-}
-
-void certificate_credentials::set_x509_key(const gnutls_datum_t & CERT, const 
gnutls_datum_t & KEY, gnutls_x509_crt_fmt_t type)
-{
-    RETWRAP( gnutls_certificate_set_x509_key_mem( this->cred, &CERT, &KEY, 
type));
-}
-
-void certificate_credentials::set_simple_pkcs12_file( const char *pkcs12file,
-                                     gnutls_x509_crt_fmt_t type, const char 
*password)
-{
-    RETWRAP( gnutls_certificate_set_x509_simple_pkcs12_file( this->cred, 
pkcs12file, type, password));
-}
-
-void certificate_credentials::set_x509_key ( gnutls_x509_crt_t * cert_list, 
int cert_list_size,
-                            gnutls_x509_privkey_t key)
-{
-    RETWRAP( gnutls_certificate_set_x509_key( this->cred, cert_list, 
cert_list_size, key));
-}
-
-void certificate_credentials::set_x509_trust ( gnutls_x509_crt_t * ca_list, 
int ca_list_size)
-{
-    RETWRAP( gnutls_certificate_set_x509_trust( this->cred, ca_list, 
ca_list_size));
-}
-
-void certificate_credentials::set_x509_crl ( gnutls_x509_crl_t * crl_list, int 
crl_list_size)
-{
-    RETWRAP( gnutls_certificate_set_x509_crl( this->cred, crl_list, 
crl_list_size));
-}
-
-void certificate_server_credentials::set_retrieve_function( 
gnutls_certificate_server_retrieve_function* func)
-{
-    gnutls_certificate_server_set_retrieve_function( this->cred, func);
-}
-
-void certificate_client_credentials::set_retrieve_function( 
gnutls_certificate_client_retrieve_function* func)
-{
-    gnutls_certificate_client_set_retrieve_function( this->cred, func);
-}
-
-// SRP
-
-srp_server_credentials::srp_server_credentials() : credentials(GNUTLS_CRD_SRP)
-{ 
-    RETWRAP(gnutls_srp_allocate_server_credentials( &this->cred));
-}
-        
-srp_server_credentials::~srp_server_credentials() 
-{ 
-    gnutls_srp_free_server_credentials( this->cred); 
-}
-
-void* srp_server_credentials::ptr() const
-{
-    return this->cred;
-}
-
-void srp_server_credentials::set_ptr(void* p)
-{
-    this->cred = static_cast<gnutls_srp_server_credentials_t> (p);
-}
-
-srp_client_credentials::srp_client_credentials() : credentials(GNUTLS_CRD_SRP)
-{ 
-    RETWRAP(gnutls_srp_allocate_client_credentials( &this->cred));
-}
-        
-srp_client_credentials::~srp_client_credentials() 
-{ 
-    gnutls_srp_free_client_credentials( this->cred); 
-}
-
-void* srp_client_credentials::ptr() const
-{
-    return this->cred;
-}
-
-void srp_client_credentials::set_ptr(void* p)
-{
-    this->cred = static_cast<gnutls_srp_client_credentials_t> (p);
-}
-
-void srp_client_credentials::set_credentials( const char* username, const 
char* password)
-{
-    RETWRAP(gnutls_srp_set_client_credentials (this->cred, username, 
password));
-}
-
-void srp_server_credentials::set_credentials_file (
-    const char *password_file, const char *password_conf_file)
-{
-    RETWRAP( gnutls_srp_set_server_credentials_file( this->cred, 
password_file, password_conf_file));
-}
-
-
-void 
srp_server_credentials::set_credentials_function(gnutls_srp_server_credentials_function
 * func)
-{
-    gnutls_srp_set_server_credentials_function( this->cred, func);
-}
-
-void 
srp_client_credentials::set_credentials_function(gnutls_srp_client_credentials_function
 * func)
-{
-    gnutls_srp_set_client_credentials_function( this->cred, func);
-}
-
-credentials::credentials(gnutls_credentials_type_t t) : type(t) 
-{ 
-}
-
-#if !(defined(__APPLE__) || defined(__MACOS__))
-/* FIXME: This #if is due to a compile bug in Mac OS X.  Give it some
-   time and then remove this cruft.  See also
-   includes/gnutls/gnutlsxx.h. */
-credentials::credentials( credentials& c)
-{
-    this->type = c.type;
-    this->set_ptr( c.ptr());
-}
-#endif
-
-gnutls_credentials_type_t credentials::get_type() const
-{ 
-    return type; 
-}
-        
-exception::exception( int x) 
-{ 
-    retcode = x; 
-}
-
-int exception::get_code()
-{
-    return retcode;
-}
-
-const char* exception::what() const throw()
-{ 
-    return gnutls_strerror(retcode); 
-}
-
-
-
-
-dh_params::dh_params()
-{
-    RETWRAP(gnutls_dh_params_init( &params));
-}
-
-dh_params::~dh_params()
-{
-    gnutls_dh_params_deinit(params);
-}
-
-void dh_params::import_raw( const gnutls_datum_t & prime,
-                     const gnutls_datum_t & generator)
-{
-    RETWRAP( gnutls_dh_params_import_raw( params, &prime, &generator));
-}
-
-void dh_params::import_pkcs3( const gnutls_datum_t & pkcs3_params,
-                              gnutls_x509_crt_fmt_t format)
-{
-    RETWRAP(gnutls_dh_params_import_pkcs3( params, &pkcs3_params, format));
-}
-
-void dh_params::generate( unsigned int bits)
-{
-    RETWRAP(gnutls_dh_params_generate2( params, bits));
-}
-        
-void dh_params::export_pkcs3( gnutls_x509_crt_fmt_t format, unsigned char 
*params_data, size_t * params_data_size)
-{
-    RETWRAP( gnutls_dh_params_export_pkcs3( params, format, params_data, 
params_data_size));
-}
-
-void dh_params::export_raw( gnutls_datum_t& prime, gnutls_datum_t &generator)
-{
-    RETWRAP( gnutls_dh_params_export_raw( params, &prime, &generator, NULL));
-}
-
-gnutls_dh_params_t dh_params::get_params_t() const
-{
-    return params;
-}
-
-dh_params & dh_params::operator=(const dh_params& src)
-{
-    dh_params* dst = new dh_params;
-    int ret;
-    
-    ret = gnutls_dh_params_cpy( dst->params, src.params);
-    
-    if (ret < 0) {
-        delete dst;
-        throw(ret);
-    }
-    
-    return *dst;
-}
-
-
-// RSA
-
-rsa_params::rsa_params()
-{
-    RETWRAP(gnutls_rsa_params_init( &params));
-}
-
-rsa_params::~rsa_params()
-{
-    gnutls_rsa_params_deinit(params);
-}
-
-void rsa_params::import_pkcs1( const gnutls_datum_t & pkcs1_params,
-                              gnutls_x509_crt_fmt_t format)
-{
-    RETWRAP(gnutls_rsa_params_import_pkcs1( params, &pkcs1_params, format));
-}
-
-void rsa_params::generate( unsigned int bits)
-{
-    RETWRAP(gnutls_rsa_params_generate2( params, bits));
-}
-        
-void rsa_params::export_pkcs1( gnutls_x509_crt_fmt_t format, unsigned char 
*params_data, size_t * params_data_size)
-{
-    RETWRAP( gnutls_rsa_params_export_pkcs1( params, format, params_data, 
params_data_size));
-}
-
-gnutls_rsa_params_t rsa_params::get_params_t() const
-{
-    return params;
-}
-
-rsa_params & rsa_params::operator=(const rsa_params& src)
-{
-    rsa_params* dst = new rsa_params;
-    int ret;
-    
-    ret = gnutls_rsa_params_cpy( dst->params, src.params);
-    
-    if (ret < 0)
-        delete dst;
-    throw(ret);
-    
-    return *dst;
-}
-  
-void rsa_params::import_raw( const gnutls_datum_t & m,
-                         const gnutls_datum_t & e,
-                         const gnutls_datum_t & d,
-                         const gnutls_datum_t & p,
-                         const gnutls_datum_t & q,
-                         const gnutls_datum_t & u)
-{
-    
-    RETWRAP(gnutls_rsa_params_import_raw ( params, &m, &e, &d, &p, &q, &u));
-}
-  
-
-void rsa_params::export_raw( gnutls_datum_t & m, gnutls_datum_t & e,
-                      gnutls_datum_t & d, gnutls_datum_t & p,
-                      gnutls_datum_t & q, gnutls_datum_t & u)
-{
-    RETWRAP( gnutls_rsa_params_export_raw ( params, &m, &e, &d, &p, &q, &u, 
NULL));
-}

Modified: libmicrohttpd/src/daemon/https/tls/io_debug.h
===================================================================
--- libmicrohttpd/src/daemon/https/tls/io_debug.h       2008-07-04 03:23:55 UTC 
(rev 7380)
+++ libmicrohttpd/src/daemon/https/tls/io_debug.h       2008-07-05 00:42:25 UTC 
(rev 7381)
@@ -22,9 +22,9 @@
  *
  */
 
-/* This debug file was contributed by 
+/* This debug file was contributed by
  * Paul Sheer <address@hidden>. Some changes were made by nmav.
- * Its purpose is to debug non blocking behaviour of gnutls. The included
+ * Its purpose is to debug non blocking behavior of gnutls. The included
  * send() and recv() functions return EAGAIN errors in random.
  *
  */

Deleted: libmicrohttpd/src/daemon/https/tls/libgnutlsxx.vers
===================================================================
--- libmicrohttpd/src/daemon/https/tls/libgnutlsxx.vers 2008-07-04 03:23:55 UTC 
(rev 7380)
+++ libmicrohttpd/src/daemon/https/tls/libgnutlsxx.vers 2008-07-05 00:42:25 UTC 
(rev 7381)
@@ -1,30 +0,0 @@
-# libgnutlsxx.vers -- Versioning script to control what symbols to export.
-# Copyright (C) 2005, 2006 Free Software Foundation
-#
-# Author: Simon Josefsson
-#
-# 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.
-#
-# The GNUTLS 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 the GNUTLS library; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-# MA 02110-1301, USA
-
-GNUTLS_1_6
-{
-  global:
-    extern "C++" {
-      gnutls*;
-  };
-  local: *;
-};

Modified: libmicrohttpd/src/daemon/https/x509/x509_privkey.c
===================================================================
--- libmicrohttpd/src/daemon/https/x509/x509_privkey.c  2008-07-04 03:23:55 UTC 
(rev 7380)
+++ libmicrohttpd/src/daemon/https/x509/x509_privkey.c  2008-07-05 00:42:25 UTC 
(rev 7381)
@@ -51,7 +51,7 @@
  * gnutls_x509_privkey_init - This function initializes a gnutls_crl structure
  * @key: The structure to be initialized
  *
- * This function will initialize an private key structure. 
+ * This function will initialize an private key structure.
  *
  * Returns 0 on success.
  *
@@ -75,7 +75,7 @@
  * gnutls_x509_privkey_deinit - This function deinitializes memory used by a 
gnutls_x509_privkey_t structure
  * @key: The structure to be initialized
  *
- * This function will deinitialize a private key structure. 
+ * This function will deinitialize a private key structure.
  *
  **/
 void
@@ -357,8 +357,7 @@
 
   key->pk_algorithm = GNUTLS_PK_UNKNOWN;
 
-  /* If the Certificate is in PEM format then decode it
-   */
+  /* If the Certificate is in PEM format then decode it */
   if (format == GNUTLS_X509_FMT_PEM)
     {
       opaque *out;
@@ -399,9 +398,7 @@
     }
   else
     {
-      /* Try decoding with both, and accept the one that 
-       * succeeds.
-       */
+      /* Try decoding with both, and accept the one that succeeds. */
       key->pk_algorithm = GNUTLS_PK_RSA;
       key->key = _gnutls_privkey_decode_pkcs1_rsa_key (&_data, key);
 
@@ -419,7 +416,8 @@
     {
       gnutls_assert ();
       result = GNUTLS_E_ASN1_DER_ERROR;
-      goto cleanup;
+      key->pk_algorithm = GNUTLS_PK_UNKNOWN;
+      return result;
     }
 
   if (need_free)
@@ -429,11 +427,6 @@
    */
 
   return 0;
-
-cleanup:key->pk_algorithm = GNUTLS_PK_UNKNOWN;
-  if (need_free)
-    _gnutls_free_datum (&_data);
-  return result;
 }
 
 #define FREE_RSA_PRIVATE_PARAMS for (i=0;i<RSA_PRIVATE_PARAMS;i++) \

Modified: libmicrohttpd/src/examples/Makefile.am
===================================================================
--- libmicrohttpd/src/examples/Makefile.am      2008-07-04 03:23:55 UTC (rev 
7380)
+++ libmicrohttpd/src/examples/Makefile.am      2008-07-05 00:42:25 UTC (rev 
7381)
@@ -2,7 +2,7 @@
 
 AM_CPPFLAGS = \
 -I$(top_srcdir)/src/include \
--I$(top_srcdir)/src/https/includes
+-I$(top_srcdir)/src/daemon/https/includes
 
 # example programs
 noinst_PROGRAMS = \

Modified: libmicrohttpd/src/include/microhttpd.h
===================================================================
--- libmicrohttpd/src/include/microhttpd.h      2008-07-04 03:23:55 UTC (rev 
7380)
+++ libmicrohttpd/src/include/microhttpd.h      2008-07-05 00:42:25 UTC (rev 
7381)
@@ -73,6 +73,10 @@
 #include "plibc.h"
 #endif
 
+#if HTTPS_SUPPORT
+#include "gnutls.h"
+#endif
+
 #ifdef __cplusplus
 extern "C"
 {
@@ -725,6 +729,20 @@
                            enum MHD_ValueKind kind,
                            MHD_KeyValueIterator iterator, void *iterator_cls);
 
+#if HTTPS_SUPPORT
+/* get cipher spec for this connection */
+gnutls_cipher_algorithm_t MHDS_get_session_cipher (struct MHD_Connection * 
session );
+
+gnutls_kx_algorithm_t MHDS_get_session_kx (struct MHD_Connection * session );
+gnutls_mac_algorithm_t MHDS_get_session_mac (struct MHD_Connection * session );
+gnutls_compression_method_t MHDS_get_session_compression (struct 
MHD_Connection * session );
+gnutls_certificate_type_t MHDS_get_session_cert_type (struct MHD_Connection * 
session );
+
+//TODO impl
+size_t MHDS_get_key_size (struct MHD_Daemon * daemon, 
gnutls_cipher_algorithm_t algorithm);
+size_t MHDS_get_mac_key_size (struct MHD_Daemon * daemon, 
gnutls_mac_algorithm_t algorithm);
+#endif
+
 /**
  * Get a particular header value.  If multiple
  * values match the kind, return any one of them.
@@ -836,7 +854,7 @@
  * @param key which header to get
  * @return NULL if header does not exist
  */
-const char *MHD_get_response_header (struct MHD_Response *response,
+const char * MHD_get_response_header (struct MHD_Response *response,
                                      const char *key);
 
 

Modified: libmicrohttpd/src/testcurl/Makefile.am
===================================================================
--- libmicrohttpd/src/testcurl/Makefile.am      2008-07-04 03:23:55 UTC (rev 
7380)
+++ libmicrohttpd/src/testcurl/Makefile.am      2008-07-05 00:42:25 UTC (rev 
7381)
@@ -1,6 +1,7 @@
 SUBDIRS  = . https
 
 AM_CPPFLAGS = \
+-I$(top_srcdir)/src/daemon/https/includes \
 -I$(top_srcdir)/src/daemon \
 -I$(top_srcdir)/src/include 
 

Modified: libmicrohttpd/src/testcurl/https/Makefile.am
===================================================================
--- libmicrohttpd/src/testcurl/https/Makefile.am        2008-07-04 03:23:55 UTC 
(rev 7380)
+++ libmicrohttpd/src/testcurl/https/Makefile.am        2008-07-05 00:42:25 UTC 
(rev 7381)
@@ -1,11 +1,13 @@
 SUBDIRS = .
 
 AM_CPPFLAGS = -ggdb \
+-I$(top_srcdir)/src/daemon/https/includes \
 -I$(top_srcdir)/src/daemon \
--I$(top_srcdir)/src/include 
+-I$(top_srcdir)/src/include
 
 check_PROGRAMS = \
-  daemon_https_test_get
+  daemon_https_test_get \
+  mhds_test_session_info
 
 TESTS = $(check_PROGRAMS)
 
@@ -14,3 +16,9 @@
 daemon_https_test_get_LDADD  = \
   $(top_builddir)/src/daemon/libmicrohttpd.la \
   @LIBCURL@
+  
+mhds_test_session_info_SOURCES = \
+  mhds_test_session_info.c
+mhds_test_session_info_LDADD  = \
+  $(top_builddir)/src/daemon/libmicrohttpd.la \
+  @LIBCURL@

Modified: libmicrohttpd/src/testcurl/https/daemon_https_test_get.c
===================================================================
--- libmicrohttpd/src/testcurl/https/daemon_https_test_get.c    2008-07-04 
03:23:55 UTC (rev 7380)
+++ libmicrohttpd/src/testcurl/https/daemon_https_test_get.c    2008-07-05 
00:42:25 UTC (rev 7381)
@@ -173,7 +173,7 @@
  * @param test_fd: file to attempt transfering
  */
 static int
-test_HTTPS_Get (FILE * test_fd)
+test_HTTPS_Get (FILE * test_fd, char * cipher_suite, int proto_version)
 {
   struct MHD_Daemon *d;
   CURL *c;
@@ -232,9 +232,10 @@
   curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 10L);
   curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
   curl_easy_setopt (c, CURLOPT_FILE, &cbc);
+
   /* TLS options */
-  curl_easy_setopt (c, CURLOPT_SSLVERSION, CURL_SSLVERSION_SSLv3);
-  curl_easy_setopt (c, CURLOPT_SSL_CIPHER_LIST, "AES256-SHA");
+  curl_easy_setopt (c, CURLOPT_SSLVERSION, proto_version);
+  curl_easy_setopt (c, CURLOPT_SSL_CIPHER_LIST, cipher_suite);
 
   // TODO rm : currently skip any peer authentication */
   curl_easy_setopt (c, CURLOPT_SSL_VERIFYPEER, 0);
@@ -263,6 +264,7 @@
       fprintf (stderr, "Error: local file & received file differ. %s\n");
       return 8;
     }
+
   return 0;
 }
 
@@ -311,12 +313,15 @@
       return 32;
     }
 
-  errorCount += test_HTTPS_Get (test_fd);
+  errorCount += test_HTTPS_Get (test_fd, "AES256-SHA", CURL_SSLVERSION_SSLv3);
+  errorCount += test_HTTPS_Get (test_fd, "AES256-SHA", CURL_SSLVERSION_TLSv1);
+
   if (errorCount != 0)
     fprintf (stderr, "Error (code: %u)\n", errorCount);
 
   curl_global_cleanup ();
   fclose (test_fd);
 
+  
   return errorCount != 0;
 }

Added: libmicrohttpd/src/testcurl/https/mhds_test_session_info.c
===================================================================
--- libmicrohttpd/src/testcurl/https/mhds_test_session_info.c                   
        (rev 0)
+++ libmicrohttpd/src/testcurl/https/mhds_test_session_info.c   2008-07-05 
00:42:25 UTC (rev 7381)
@@ -0,0 +1,238 @@
+/*
+ This file is part of libmicrohttpd
+ (C) 2007 Christian Grothoff
+
+ libmicrohttpd is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 2, or (at your
+ option) any later version.
+
+ libmicrohttpd 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
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with libmicrohttpd; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * @file mhds_test_session_info.c
+ * @brief  Testcase for libmicrohttpd GET operations
+ * @author lv-426
+ */
+
+#include "config.h"
+#include "plibc.h"
+#include "microhttpd.h"
+#include <errno.h>
+
+#include <curl/curl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#define BUF_SIZE 1024
+#define MAX_URL_LEN 255
+
+#define EMPTY_PAGE "<html><head><title>Empty page</title></head><body>Empty 
page</body></html>"
+
+/* Test Certificate */
+const char cert_pem[] =
+  "-----BEGIN CERTIFICATE-----\n"
+  "MIICpjCCAZCgAwIBAgIESEPtjjALBgkqhkiG9w0BAQUwADAeFw0wODA2MDIxMjU0\n"
+  "MzhaFw0wOTA2MDIxMjU0NDZaMAAwggEfMAsGCSqGSIb3DQEBAQOCAQ4AMIIBCQKC\n"
+  "AQC03TyUvK5HmUAirRp067taIEO4bibh5nqolUoUdo/LeblMQV+qnrv/RNAMTx5X\n"
+  "fNLZ45/kbM9geF8qY0vsPyQvP4jumzK0LOJYuIwmHaUm9vbXnYieILiwCuTgjaud\n"
+  "3VkZDoQ9fteIo+6we9UTpVqZpxpbLulBMh/VsvX0cPJ1VFC7rT59o9hAUlFf9jX/\n"
+  "GmKdYI79MtgVx0OPBjmmSD6kicBBfmfgkO7bIGwlRtsIyMznxbHu6VuoX/eVxrTv\n"
+  "rmCwgEXLWRZ6ru8MQl5YfqeGXXRVwMeXU961KefbuvmEPccgCxm8FZ1C1cnDHFXh\n"
+  "siSgAzMBjC/b6KVhNQ4KnUdZAgMBAAGjLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0O\n"
+  "BBYEFJcUvpjvE5fF/yzUshkWDpdYiQh/MAsGCSqGSIb3DQEBBQOCAQEARP7eKSB2\n"
+  "RNd6XjEjK0SrxtoTnxS3nw9sfcS7/qD1+XHdObtDFqGNSjGYFB3Gpx8fpQhCXdoN\n"
+  "8QUs3/5ZVa5yjZMQewWBgz8kNbnbH40F2y81MHITxxCe1Y+qqHWwVaYLsiOTqj2/\n"
+  "0S3QjEJ9tvklmg7JX09HC4m5QRYfWBeQLD1u8ZjA1Sf1xJriomFVyRLI2VPO2bNe\n"
+  "JDMXWuP+8kMC7gEvUnJ7A92Y2yrhu3QI3bjPk8uSpHea19Q77tul1UVBJ5g+zpH3\n"
+  "OsF5p0MyaVf09GTzcLds5nE/osTdXGUyHJapWReVmPm3Zn6gqYlnzD99z+DPIgIV\n"
+  "RhZvQx74NQnS6g==\n" "-----END CERTIFICATE-----\n";
+
+const char key_pem[] =
+  "-----BEGIN RSA PRIVATE KEY-----\n"
+  "MIIEowIBAAKCAQEAtN08lLyuR5lAIq0adOu7WiBDuG4m4eZ6qJVKFHaPy3m5TEFf\n"
+  "qp67/0TQDE8eV3zS2eOf5GzPYHhfKmNL7D8kLz+I7psytCziWLiMJh2lJvb2152I\n"
+  "niC4sArk4I2rnd1ZGQ6EPX7XiKPusHvVE6VamacaWy7pQTIf1bL19HDydVRQu60+\n"
+  "faPYQFJRX/Y1/xpinWCO/TLYFcdDjwY5pkg+pInAQX5n4JDu2yBsJUbbCMjM58Wx\n"
+  "7ulbqF/3lca0765gsIBFy1kWeq7vDEJeWH6nhl10VcDHl1PetSnn27r5hD3HIAsZ\n"
+  "vBWdQtXJwxxV4bIkoAMzAYwv2+ilYTUOCp1HWQIDAQABAoIBAArOQv3R7gmqDspj\n"
+  "lDaTFOz0C4e70QfjGMX0sWnakYnDGn6DU19iv3GnX1S072ejtgc9kcJ4e8VUO79R\n"
+  "EmqpdRR7k8dJr3RTUCyjzf/C+qiCzcmhCFYGN3KRHA6MeEnkvRuBogX4i5EG1k5l\n"
+  "/5t+YBTZBnqXKWlzQLKoUAiMLPg0eRWh+6q7H4N7kdWWBmTpako7TEqpIwuEnPGx\n"
+  "u3EPuTR+LN6lF55WBePbCHccUHUQaXuav18NuDkcJmCiMArK9SKb+h0RqLD6oMI/\n"
+  "dKD6n8cZXeMBkK+C8U/K0sN2hFHACsu30b9XfdnljgP9v+BP8GhnB0nCB6tNBCPo\n"
+  "32srOwECgYEAxWh3iBT4lWqL6bZavVbnhmvtif4nHv2t2/hOs/CAq8iLAw0oWGZc\n"
+  "+JEZTUDMvFRlulr0kcaWra+4fN3OmJnjeuFXZq52lfMgXBIKBmoSaZpIh2aDY1Rd\n"
+  "RbEse7nQl9hTEPmYspiXLGtnAXW7HuWqVfFFP3ya8rUS3t4d07Hig8ECgYEA6ou6\n"
+  "OHiBRTbtDqLIv8NghARc/AqwNWgEc9PelCPe5bdCOLBEyFjqKiT2MttnSSUc2Zob\n"
+  "XhYkHC6zN1Mlq30N0e3Q61YK9LxMdU1vsluXxNq2rfK1Scb1oOlOOtlbV3zA3VRF\n"
+  "hV3t1nOA9tFmUrwZi0CUMWJE/zbPAyhwWotKyZkCgYEAh0kFicPdbABdrCglXVae\n"
+  "SnfSjVwYkVuGd5Ze0WADvjYsVkYBHTvhgRNnRJMg+/vWz3Sf4Ps4rgUbqK8Vc20b\n"
+  "AU5G6H6tlCvPRGm0ZxrwTWDHTcuKRVs+pJE8C/qWoklE/AAhjluWVoGwUMbPGuiH\n"
+  "6Gf1bgHF6oj/Sq7rv/VLZ8ECgYBeq7ml05YyLuJutuwa4yzQ/MXfghzv4aVyb0F3\n"
+  "QCdXR6o2IYgR6jnSewrZKlA9aPqFJrwHNR6sNXlnSmt5Fcf/RWO/qgJQGLUv3+rG\n"
+  "7kuLTNDR05azSdiZc7J89ID3Bkb+z2YkV+6JUiPq/Ei1+nDBEXb/m+/HqALU/nyj\n"
+  "P3gXeQKBgBusb8Rbd+KgxSA0hwY6aoRTPRt8LNvXdsB9vRcKKHUFQvxUWiUSS+L9\n"
+  "/Qu1sJbrUquKOHqksV5wCnWnAKyJNJlhHuBToqQTgKXjuNmVdYSe631saiI7PHyC\n"
+  "eRJ6DxULPxABytJrYCRrNqmXi5TCiqR2mtfalEMOPxz8rUU8dYyx\n"
+  "-----END RSA PRIVATE KEY-----\n";
+
+struct MHD_Daemon *d;
+
+struct CBC
+{
+  char *buf;
+  size_t pos;
+  size_t size;
+};
+
+static size_t
+copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
+{
+  struct CBC *cbc = ctx;
+
+  if (cbc->pos + size * nmemb > cbc->size)
+    return 0;                   /* overflow */
+  memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
+  cbc->pos += size * nmemb;
+  return size * nmemb;
+}
+
+/* HTTP access handler call back */
+static int
+query_session_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)
+{
+  struct MHD_Response *response;
+  int ret;
+
+  /* assert actual connection cipher is the one negotiated */
+  if (MHDS_get_session_cipher (connection) != GNUTLS_CIPHER_AES_256_CBC)
+    {
+      fprintf (stderr, "Error: requested cipher mismatch. %s\n",
+               strerror (errno));
+      return -1;
+    }
+
+  // TODO should these be hard coded into the server ?
+  if (MHDS_get_session_mac (connection) != GNUTLS_MAC_SHA1)
+    {
+      fprintf (stderr, "Error: requested mac algorithm mismatch. %s\n",
+               strerror (errno));
+      return -1;
+    }
+  if (MHDS_get_session_compression (connection) != GNUTLS_COMP_NULL)
+    {
+      fprintf (stderr, "Error: requested compression mismatch. %s\n",
+               strerror (errno));
+      return -1;
+    }
+  if (MHDS_get_session_cert_type (connection) != GNUTLS_CRT_X509)
+    {
+      fprintf (stderr, "Error: requested certificate mismatch. %s\n",
+               strerror (errno));
+      return -1;
+    }
+
+  response = MHD_create_response_from_data (strlen (EMPTY_PAGE),
+                                            (void *) EMPTY_PAGE,
+                                            MHD_NO, MHD_NO);
+  ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
+  MHD_destroy_response (response);
+  return ret;
+}
+
+static int
+test_query_session ()
+{
+
+  CURL *c;
+  struct CBC cbc;
+  CURLcode errornum;
+  char url[] = "https://localhost:42433/";;
+
+  if (NULL == (cbc.buf = malloc (sizeof (char) * 255)))
+    return 16;
+  cbc.size = 255;
+  cbc.pos = 0;
+
+  /* setup test */
+  d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL |
+                        MHD_USE_DEBUG, 42433,
+                        NULL, NULL, &query_session_ahc, NULL,
+                        MHD_OPTION_HTTPS_MEM_KEY, key_pem,
+                        MHD_OPTION_HTTPS_MEM_CERT, cert_pem, MHD_OPTION_END);
+
+  if (d == NULL)
+    return 2;
+
+  c = curl_easy_init ();
+  //curl_easy_setopt (c, CURLOPT_VERBOSE, 1);
+  curl_easy_setopt (c, CURLOPT_URL, url);
+  curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+  curl_easy_setopt (c, CURLOPT_TIMEOUT, 10L);
+  curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 10L);
+  curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, &copyBuffer);
+  curl_easy_setopt (c, CURLOPT_FILE, &cbc);
+  /* TLS options */
+  curl_easy_setopt (c, CURLOPT_SSLVERSION, CURL_SSLVERSION_SSLv3);
+  curl_easy_setopt (c, CURLOPT_SSL_CIPHER_LIST, "AES256-SHA");
+  /* currently skip any peer authentication */
+  curl_easy_setopt (c, CURLOPT_SSL_VERIFYPEER, 0);
+  curl_easy_setopt (c, CURLOPT_SSL_VERIFYHOST, 0);
+
+  curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
+
+  // NOTE: use of CONNECTTIMEOUT without also
+  //   setting NOSIGNAL results in really weird
+  //   crashes on my system!
+  curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
+  if (CURLE_OK != (errornum = curl_easy_perform (c)))
+    {
+      fprintf (stderr, "curl_easy_perform failed: `%s'\n",
+               curl_easy_strerror (errornum));
+      curl_easy_cleanup (c);
+      MHD_stop_daemon (d);
+      return 4;
+    }
+
+  curl_easy_cleanup (c);
+  MHD_stop_daemon (d);
+
+  return 0;
+}
+
+int
+main (int argc, char *const *argv)
+{
+  FILE *test_fd;
+  unsigned int errorCount = 0;
+
+  if (0 != curl_global_init (CURL_GLOBAL_ALL))
+    {
+      fprintf (stderr, "Error (code: %u)\n", errorCount);
+      return 8;
+    }
+
+  errorCount += test_query_session (test_fd);
+  if (errorCount != 0)
+    fprintf (stderr, "Error (code: %u)\n", errorCount);
+
+  curl_global_cleanup ();
+
+  return errorCount != 0;
+}


Property changes on: libmicrohttpd/src/testcurl/https/mhds_test_session_info.c
___________________________________________________________________
Name: svn:mime-type
   + text/plain





reply via email to

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