00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef ULXR_SSL_CONNECTION_H
00031 #define ULXR_SSL_CONNECTION_H
00032
00033
00034 #include <ulxmlrpcpp/ulxmlrpcpp.h>
00035
00036 #ifdef ULXR_INCLUDE_SSL_STUFF
00037
00038 #include <openssl/ssl.h>
00039
00040 #include <ulxmlrpcpp/ulxr_tcpip_connection.h>
00041
00042
00043 namespace ulxr {
00044
00045
00049 class ULXR_API_DECL0 SSLConnection : public TcpIpConnection
00050 {
00051 public:
00052
00059 SSLConnection(bool server, const CppString &domain, unsigned port = 80);
00060
00067 SSLConnection(bool server, long adr = INADDR_ANY, unsigned port = 0);
00068
00072 virtual ~SSLConnection();
00073
00076 virtual void close();
00077
00080 virtual void open();
00081
00087 virtual bool accept(int timeout = 0);
00088
00092 virtual CppString getInterfaceName();
00093
00097 virtual void cut();
00098
00102 std::string getPassword() const;
00103
00109 void setCryptographyData (const std::string &password,
00110 const std::string &certfile,
00111 const std::string &keyfile);
00112
00113 protected:
00114
00118 SSL *getSslObject() const;
00119
00123 SSL_CTX *getSslContextObject() const;
00124
00128 SSL_SESSION *getSslSessionObject() const;
00129
00133 virtual bool hasPendingInput() const;
00134
00135 private:
00136
00137 SSL *ssl;
00138 SSL_CTX *ssl_ctx;
00139 SSL_SESSION *session;
00140
00141 std::string password;
00142 std::string keyfile;
00143 std::string certfile;
00144
00145 static bool ssl_initialized;
00146
00149 void createSSL();
00150
00153 void initializeCTX();
00154
00160 ssize_t virtual low_level_write(char const *buff, long len);
00161
00167 ssize_t virtual low_level_read(char *buff, long len);
00168
00171 void init();
00172
00176 virtual TcpIpConnection *makeClone();
00177 };
00178
00179
00180 }
00181
00182
00183 #endif // ULXR_INCLUDE_SSL_STUFF
00184
00185
00186 #endif // ULXR_SSL_CONNECTION_H
00187