00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef TLSOPENSSL_H__
00016 #define TLSOPENSSL_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_OPENSSL
00029
00030 #include <openssl/ssl.h>
00031
00032 namespace gloox
00033 {
00034
00041 class OpenSSL : public TLSBase
00042 {
00043 public:
00049 OpenSSL( TLSHandler* th, const std::string& server );
00050
00054 virtual ~OpenSSL();
00055
00056
00057 virtual bool init();
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& cacerts );
00073
00074
00075 virtual void setClientCert( const std::string& clientKey, const std::string& clientCerts );
00076
00077 private:
00078 void pushFunc();
00079
00080 enum TLSOperation
00081 {
00082 TLSHandshake,
00083 TLSWrite,
00084 TLSRead
00085 };
00086
00087 void doTLSOperation( TLSOperation op );
00088 int openSSLTime2UnixTime( const char* time_string );
00089
00090 SSL* m_ssl;
00091 SSL_CTX* m_ctx;
00092 BIO* m_ibio;
00093 BIO* m_nbio;
00094 std::string m_recvBuffer;
00095 std::string m_sendBuffer;
00096 char* m_buf;
00097 const int m_bufsize;
00098 };
00099
00100 }
00101
00102 #endif // HAVE_OPENSSL
00103
00104 #endif // TLSOPENSSL_H__