password_callback.hpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. //
  2. // ssl/detail/password_callback.hpp
  3. // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4. //
  5. // Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com)
  6. //
  7. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  8. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  9. //
  10. #ifndef ASIO_SSL_DETAIL_PASSWORD_CALLBACK_HPP
  11. #define ASIO_SSL_DETAIL_PASSWORD_CALLBACK_HPP
  12. #if defined(_MSC_VER) && (_MSC_VER >= 1200)
  13. # pragma once
  14. #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
  15. #include "asio/detail/config.hpp"
  16. #if !defined(ASIO_ENABLE_OLD_SSL)
  17. # include <cstddef>
  18. # include <string>
  19. # include "asio/ssl/context_base.hpp"
  20. #endif // !defined(ASIO_ENABLE_OLD_SSL)
  21. #include "asio/detail/push_options.hpp"
  22. namespace asio {
  23. namespace ssl {
  24. namespace detail {
  25. #if !defined(ASIO_ENABLE_OLD_SSL)
  26. class password_callback_base
  27. {
  28. public:
  29. virtual ~password_callback_base()
  30. {
  31. }
  32. virtual std::string call(std::size_t size,
  33. context_base::password_purpose purpose) = 0;
  34. };
  35. template <typename PasswordCallback>
  36. class password_callback : public password_callback_base
  37. {
  38. public:
  39. explicit password_callback(PasswordCallback callback)
  40. : callback_(callback)
  41. {
  42. }
  43. virtual std::string call(std::size_t size,
  44. context_base::password_purpose purpose)
  45. {
  46. return callback_(size, purpose);
  47. }
  48. private:
  49. PasswordCallback callback_;
  50. };
  51. #endif // !defined(ASIO_ENABLE_OLD_SSL)
  52. } // namespace detail
  53. } // namespace ssl
  54. } // namespace asio
  55. #include "asio/detail/pop_options.hpp"
  56. #endif // ASIO_SSL_DETAIL_PASSWORD_CALLBACK_HPP