00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef TLSGNUTLSBASE_H__
00016 #define TLSGNUTLSBASE_H__
00017
00018 #include "tlsbase.h"
00019
00020 #ifdef _WIN32
00021 # include "../config.h.win"
00022 #elif defined( _WIN32_WCE )
00023 # include "../config.h.win"
00024 #else
00025 # include "config.h"
00026 #endif
00027
00028 #ifdef HAVE_GNUTLS
00029
00030 #include <gnutls/gnutls.h>
00031 #include <gnutls/x509.h>
00032
00033 namespace gloox
00034 {
00035
00044 class GnuTLSBase : public TLSBase
00045 {
00046 public:
00052 GnuTLSBase( TLSHandler* th, const std::string& server = EmptyString );
00053
00057 virtual ~GnuTLSBase();
00058
00059
00060 virtual bool encrypt( const std::string& data );
00061
00062
00063 virtual int decrypt( const std::string& data );
00064
00065
00066 virtual void cleanup();
00067
00068
00069 virtual bool handshake();
00070
00071
00072 virtual void setCACerts( const StringList& ) {}
00073
00074
00075 virtual void setClientCert( const std::string& , const std::string& ) {}
00076
00077 protected:
00078 virtual void getCertInfo() {}
00079
00080 gnutls_session_t* m_session;
00081
00082 std::string m_recvBuffer;
00083 char* m_buf;
00084 const int m_bufsize;
00085
00086 ssize_t pullFunc( void* data, size_t len );
00087 static ssize_t pullFunc( gnutls_transport_ptr_t ptr, void* data, size_t len );
00088
00089 ssize_t pushFunc( const void* data, size_t len );
00090 static ssize_t pushFunc( gnutls_transport_ptr_t ptr, const void* data, size_t len );
00091
00092 };
00093
00094 }
00095
00096 #endif // HAVE_GNUTLS
00097
00098 #endif // TLSGNUTLSBASE_H__