tlsdefault.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "tlsdefault.h"
00014
00015 #include "tlshandler.h"
00016
00017 #include "config.h"
00018
00019 #if defined( HAVE_GNUTLS )
00020 # define HAVE_TLS
00021 # include "tlsgnutlsclient.h"
00022 # include "tlsgnutlsclientanon.h"
00023 # include "tlsgnutlsserveranon.h"
00024 #elif defined( HAVE_OPENSSL )
00025 # define HAVE_TLS
00026 # include "tlsopensslclient.h"
00027 #ifndef __SYMBIAN32__
00028 # include "tlsopensslserver.h"
00029 #endif
00030 #elif defined( HAVE_WINTLS )
00031 # define HAVE_TLS
00032 # include "tlsschannel.h"
00033 #endif
00034
00035 namespace gloox
00036 {
00037
00038 TLSDefault::TLSDefault( TLSHandler* th, const std::string server, Type type )
00039 : TLSBase( th, server ), m_impl( 0 )
00040 {
00041 switch( type )
00042 {
00043 case VerifyingClient:
00044 #ifdef HAVE_GNUTLS
00045 m_impl = new GnuTLSClient( th, server );
00046 #elif defined( HAVE_OPENSSL )
00047 m_impl = new OpenSSLClient( th, server );
00048 #elif defined( HAVE_WINTLS )
00049 m_impl = new SChannel( th, server );
00050 #endif
00051 break;
00052 case AnonymousClient:
00053 #ifdef HAVE_GNUTLS
00054 m_impl = new GnuTLSClientAnon( th );
00055 #endif
00056 break;
00057 case AnonymousServer:
00058 #ifdef HAVE_GNUTLS
00059 m_impl = new GnuTLSServerAnon( th );
00060 #endif
00061 break;
00062 case VerifyingServer:
00063 #ifdef HAVE_OPENSSL
00064 #ifndef __SYMBIAN32__
00065 m_impl = new OpenSSLServer( th );
00066 #endif
00067 #endif
00068 break;
00069 default:
00070 break;
00071 }
00072 }
00073
00074 TLSDefault::~TLSDefault()
00075 {
00076 delete m_impl;
00077 }
00078
00079 bool TLSDefault::init( const std::string& clientKey,
00080 const std::string& clientCerts,
00081 const StringList& cacerts )
00082 {
00083 return m_impl ? m_impl->init( clientKey, clientCerts,
00084 cacerts ) : false;
00085 }
00086
00087 int TLSDefault::types()
00088 {
00089 int types = 0;
00090 #ifdef HAVE_GNUTLS
00091 types |= VerifyingClient;
00092 types |= AnonymousClient;
00093 types |= AnonymousServer;
00094 #elif defined( HAVE_OPENSSL )
00095 types |= VerifyingClient;
00096 types |= VerifyingServer;
00097 #elif defined( HAVE_WINTLS )
00098 types |= VerifyingClient;
00099 #endif
00100 return types;
00101 }
00102
00103 bool TLSDefault::encrypt( const std::string& data )
00104 {
00105 return m_impl ? m_impl->encrypt( data ) : false;
00106 }
00107
00108 int TLSDefault::decrypt( const std::string& data )
00109 {
00110 return m_impl ? m_impl->decrypt( data ) : 0;
00111 }
00112
00113 void TLSDefault::cleanup()
00114 {
00115 if( m_impl )
00116 m_impl->cleanup();
00117 }
00118
00119 bool TLSDefault::handshake()
00120 {
00121 return m_impl ? m_impl->handshake() : false;
00122 }
00123
00124 bool TLSDefault::isSecure() const
00125 {
00126 return m_impl ? m_impl->isSecure() : false;
00127 }
00128
00129 void TLSDefault::setCACerts( const StringList& cacerts )
00130 {
00131 if( m_impl )
00132 m_impl->setCACerts( cacerts );
00133 }
00134
00135 const CertInfo& TLSDefault::fetchTLSInfo() const
00136 {
00137 return m_impl ? m_impl->fetchTLSInfo() : m_certInfo;
00138 }
00139
00140 void TLSDefault::setClientCert( const std::string& clientKey, const std::string& clientCerts )
00141 {
00142 if( m_impl )
00143 m_impl->setClientCert( clientKey, clientCerts );
00144 }
00145
00146 }