tlsopenssl.h

00001 /*
00002   Copyright (c) 2007-2008 by Jakob Schroeter <js@camaya.net>
00003   This file is part of the gloox library. http://camaya.net/gloox
00004 
00005   This software is distributed under a license. The full license
00006   agreement can be found in the file LICENSE in this distribution.
00007   This software may not be copied, modified, sold or distributed
00008   other than expressed in the named license agreement.
00009 
00010   This software is distributed without any warranty.
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       // reimplemented from TLSBase
00057       virtual bool encrypt( const std::string& data );
00058 
00059       // reimplemented from TLSBase
00060       virtual int decrypt( const std::string& data );
00061 
00062       // reimplemented from TLSBase
00063       virtual void cleanup();
00064 
00065       // reimplemented from TLSBase
00066       virtual bool handshake();
00067 
00068       // reimplemented from TLSBase
00069       virtual void setCACerts( const StringList& cacerts );
00070 
00071       // reimplemented from TLSBase
00072       virtual void setClientCert( const std::string& clientKey, const std::string& clientCerts );
00073 
00074     private:
00075       void pushFunc();
00076 
00077       enum TLSOperation
00078       {
00079         TLSHandshake,
00080         TLSWrite,
00081         TLSRead
00082       };
00083 
00084       void doTLSOperation( TLSOperation op );
00085       int openSSLTime2UnixTime( const char* time_string );
00086 
00087       SSL *m_ssl;
00088       SSL_CTX *m_ctx;
00089       BIO *m_ibio;
00090       BIO *m_nbio;
00091       std::string m_recvBuffer;
00092       std::string m_sendBuffer;
00093       char *m_buf;
00094       const int m_bufsize;
00095 
00096   };
00097 
00098 }
00099 
00100 #endif // HAVE_OPENSSL
00101 
00102 #endif // TLSOPENSSL_H__

Generated on Mon Dec 7 13:28:19 2009 for gloox by  doxygen 1.6.1