$search
00001 // 00002 // basic_context.hpp 00003 // ~~~~~~~~~~~~~~~~~ 00004 // 00005 // Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com 00006 // Copyright (c) 2005-2008 Christopher M. Kohlhoff (chris at kohlhoff dot com) 00007 // 00008 // Distributed under the Boost Software License, Version 1.0. (See accompanying 00009 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 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 } // namespace ssl 00430 } // namespace asio 00431 00432 #include "asio/detail/pop_options.hpp" 00433 00434 #endif // ASIO_SSL_BASIC_CONTEXT_HPP