00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ASIO_SSL_BASIC_CONTEXT_HPP
00013 #define ASIO_SSL_BASIC_CONTEXT_HPP
00014
00015 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
00016 # pragma once
00017 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
00018
00019 #include "asio/detail/push_options.hpp"
00020
00021 #include "asio/detail/push_options.hpp"
00022 #include <string>
00023 #include <boost/noncopyable.hpp>
00024 #include "asio/detail/pop_options.hpp"
00025
00026 #include "asio/error.hpp"
00027 #include "asio/io_service.hpp"
00028 #include "asio/ssl/context_base.hpp"
00029 #include "asio/detail/throw_error.hpp"
00030
00031 namespace asio {
00032 namespace ssl {
00033
00035 template <typename Service>
00036 class basic_context
00037 : public context_base,
00038 private boost::noncopyable
00039 {
00040 public:
00042 typedef Service service_type;
00043
00045 typedef typename service_type::impl_type impl_type;
00046
00048 basic_context(asio::io_service& io_service, method m)
00049 : service_(asio::use_service<Service>(io_service)),
00050 impl_(service_.null())
00051 {
00052 service_.create(impl_, m);
00053 }
00054
00056 ~basic_context()
00057 {
00058 service_.destroy(impl_);
00059 }
00060
00062
00067 impl_type impl()
00068 {
00069 return impl_;
00070 }
00071
00073
00082 void set_options(options o)
00083 {
00084 asio::error_code ec;
00085 service_.set_options(impl_, o, ec);
00086 asio::detail::throw_error(ec);
00087 }
00088
00090
00099 asio::error_code set_options(options o,
00100 asio::error_code& ec)
00101 {
00102 return service_.set_options(impl_, o, ec);
00103 }
00104
00106
00115 void set_verify_mode(verify_mode v)
00116 {
00117 asio::error_code ec;
00118 service_.set_verify_mode(impl_, v, ec);
00119 asio::detail::throw_error(ec);
00120 }
00121
00123
00132 asio::error_code set_verify_mode(verify_mode v,
00133 asio::error_code& ec)
00134 {
00135 return service_.set_verify_mode(impl_, v, ec);
00136 }
00137
00139
00148 void load_verify_file(const std::string& filename)
00149 {
00150 asio::error_code ec;
00151 service_.load_verify_file(impl_, filename, ec);
00152 asio::detail::throw_error(ec);
00153 }
00154
00156
00165 asio::error_code load_verify_file(const std::string& filename,
00166 asio::error_code& ec)
00167 {
00168 return service_.load_verify_file(impl_, filename, ec);
00169 }
00170
00173
00183 void add_verify_path(const std::string& path)
00184 {
00185 asio::error_code ec;
00186 service_.add_verify_path(impl_, path, ec);
00187 asio::detail::throw_error(ec);
00188 }
00189
00192
00202 asio::error_code add_verify_path(const std::string& path,
00203 asio::error_code& ec)
00204 {
00205 return service_.add_verify_path(impl_, path, ec);
00206 }
00207
00209
00218 void use_certificate_file(const std::string& filename, file_format format)
00219 {
00220 asio::error_code ec;
00221 service_.use_certificate_file(impl_, filename, format, ec);
00222 asio::detail::throw_error(ec);
00223 }
00224
00226
00235 asio::error_code use_certificate_file(const std::string& filename,
00236 file_format format, asio::error_code& ec)
00237 {
00238 return service_.use_certificate_file(impl_, filename, format, ec);
00239 }
00240
00242
00251 void use_certificate_chain_file(const std::string& filename)
00252 {
00253 asio::error_code ec;
00254 service_.use_certificate_chain_file(impl_, filename, ec);
00255 asio::detail::throw_error(ec);
00256 }
00257
00259
00268 asio::error_code use_certificate_chain_file(
00269 const std::string& filename, asio::error_code& ec)
00270 {
00271 return service_.use_certificate_chain_file(impl_, filename, ec);
00272 }
00273
00275
00284 void use_private_key_file(const std::string& filename, file_format format)
00285 {
00286 asio::error_code ec;
00287 service_.use_private_key_file(impl_, filename, format, ec);
00288 asio::detail::throw_error(ec);
00289 }
00290
00292
00301 asio::error_code use_private_key_file(const std::string& filename,
00302 file_format format, asio::error_code& ec)
00303 {
00304 return service_.use_private_key_file(impl_, filename, format, ec);
00305 }
00306
00308
00318 void use_rsa_private_key_file(const std::string& filename, file_format format)
00319 {
00320 asio::error_code ec;
00321 service_.use_rsa_private_key_file(impl_, filename, format, ec);
00322 asio::detail::throw_error(ec);
00323 }
00324
00326
00336 asio::error_code use_rsa_private_key_file(
00337 const std::string& filename, file_format format,
00338 asio::error_code& ec)
00339 {
00340 return service_.use_rsa_private_key_file(impl_, filename, format, ec);
00341 }
00342
00344
00353 void use_tmp_dh_file(const std::string& filename)
00354 {
00355 asio::error_code ec;
00356 service_.use_tmp_dh_file(impl_, filename, ec);
00357 asio::detail::throw_error(ec);
00358 }
00359
00361
00370 asio::error_code use_tmp_dh_file(const std::string& filename,
00371 asio::error_code& ec)
00372 {
00373 return service_.use_tmp_dh_file(impl_, filename, ec);
00374 }
00375
00377
00391 template <typename PasswordCallback>
00392 void set_password_callback(PasswordCallback callback)
00393 {
00394 asio::error_code ec;
00395 service_.set_password_callback(impl_, callback, ec);
00396 asio::detail::throw_error(ec);
00397 }
00398
00400
00414 template <typename PasswordCallback>
00415 asio::error_code set_password_callback(PasswordCallback callback,
00416 asio::error_code& ec)
00417 {
00418 return service_.set_password_callback(impl_, callback, ec);
00419 }
00420
00421 private:
00423 service_type& service_;
00424
00426 impl_type impl_;
00427 };
00428
00429 }
00430 }
00431
00432 #include "asio/detail/pop_options.hpp"
00433
00434 #endif // ASIO_SSL_BASIC_CONTEXT_HPP