00001 #ifndef PROTON_SSL_HPP
00002 #define PROTON_SSL_HPP
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "./internal/export.hpp"
00026 #include "./internal/object.hpp"
00027
00028 #include <proton/ssl.h>
00029
00030 #include <string>
00031
00032 namespace proton {
00033
00034 class connection_options;
00035
00037 class ssl {
00039 ssl(pn_ssl_t* s) : object_(s) {}
00041
00042 public:
00044 ssl() : object_(0) {}
00045
00047 enum verify_mode {
00049 VERIFY_PEER = PN_SSL_VERIFY_PEER,
00051 ANONYMOUS_PEER = PN_SSL_ANONYMOUS_PEER,
00053 VERIFY_PEER_NAME = PN_SSL_VERIFY_PEER_NAME
00054 };
00055
00057 enum resume_status {
00058 UNKNOWN = PN_SSL_RESUME_UNKNOWN,
00059 NEW = PN_SSL_RESUME_NEW,
00060 REUSED = PN_SSL_RESUME_REUSED
00061 };
00062
00064
00067 PN_CPP_EXTERN std::string cipher() const;
00068
00071 PN_CPP_EXTERN std::string protocol() const;
00072
00074 PN_CPP_EXTERN int ssf() const;
00075
00077 PN_CPP_EXTERN std::string remote_subject() const;
00078
00080 PN_CPP_EXTERN void resume_session_id(const std::string& session_id);
00081
00082 PN_CPP_EXTERN enum resume_status resume_status() const;
00083
00085
00086 private:
00087 pn_ssl_t* object_;
00088
00090 friend class internal::factory<ssl>;
00092 };
00093
00095 class ssl_certificate {
00096 public:
00098 PN_CPP_EXTERN ssl_certificate(const std::string &certdb_main);
00099
00100
00101
00103 PN_CPP_EXTERN ssl_certificate(const std::string &certdb_main, const std::string &certdb_extra);
00104
00106 PN_CPP_EXTERN ssl_certificate(const std::string &certdb_main, const std::string &certdb_extra, const std::string &passwd);
00108
00109 private:
00110 std::string certdb_main_;
00111 std::string certdb_extra_;
00112 std::string passwd_;
00113 bool pw_set_;
00114
00116 friend class ssl_client_options;
00117 friend class ssl_server_options;
00119 };
00120
00121 class ssl_domain_impl;
00122
00123 namespace internal {
00124
00125
00126 class ssl_domain {
00127 public:
00128 PN_CPP_EXTERN ssl_domain(const ssl_domain&);
00129 PN_CPP_EXTERN ssl_domain& operator=(const ssl_domain&);
00130 PN_CPP_EXTERN ~ssl_domain();
00131
00132 protected:
00133 ssl_domain(bool is_server);
00134 pn_ssl_domain_t *pn_domain();
00135
00136 private:
00137 ssl_domain_impl *impl_;
00138 bool server_type_;
00139 };
00140
00141 }
00142
00144 class ssl_server_options : private internal::ssl_domain {
00145 public:
00148 PN_CPP_EXTERN ssl_server_options(ssl_certificate &cert);
00149
00152 PN_CPP_EXTERN ssl_server_options(ssl_certificate &cert, const std::string &trust_db,
00153 const std::string &advertise_db = std::string(),
00154 enum ssl::verify_mode mode = ssl::VERIFY_PEER);
00155
00158 PN_CPP_EXTERN ssl_server_options();
00159
00160 private:
00161
00162
00163 using internal::ssl_domain::pn_domain;
00164
00166 friend class connection_options;
00168 };
00169
00171 class ssl_client_options : private internal::ssl_domain {
00172 public:
00174 PN_CPP_EXTERN ssl_client_options(const std::string &trust_db,
00175 enum ssl::verify_mode = ssl::VERIFY_PEER_NAME);
00176
00178 PN_CPP_EXTERN ssl_client_options(ssl_certificate&, const std::string &trust_db,
00179 enum ssl::verify_mode = ssl::VERIFY_PEER_NAME);
00180
00183 PN_CPP_EXTERN ssl_client_options();
00184
00185 private:
00186
00187
00188 using internal::ssl_domain::pn_domain;
00189
00191 friend class connection_options;
00193 };
00194
00195 }
00196
00197 #endif // PROTON_SSL_HPP