password_callback.hpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //
  2. // ssl/detail/password_callback.hpp
  3. // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4. //
  5. // Copyright (c) 2003-2023 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. #include <cstddef>
  17. #include <string>
  18. #include "asio/ssl/context_base.hpp"
  19. #include "asio/detail/push_options.hpp"
  20. namespace asio {
  21. namespace ssl {
  22. namespace detail {
  23. class password_callback_base
  24. {
  25. public:
  26. virtual ~password_callback_base()
  27. {
  28. }
  29. virtual std::string call(std::size_t size,
  30. context_base::password_purpose purpose) = 0;
  31. };
  32. template <typename PasswordCallback>
  33. class password_callback : public password_callback_base
  34. {
  35. public:
  36. explicit password_callback(PasswordCallback callback)
  37. : callback_(callback)
  38. {
  39. }
  40. virtual std::string call(std::size_t size,
  41. context_base::password_purpose purpose)
  42. {
  43. return callback_(size, purpose);
  44. }
  45. private:
  46. PasswordCallback callback_;
  47. };
  48. } // namespace detail
  49. } // namespace ssl
  50. } // namespace asio
  51. #include "asio/detail/pop_options.hpp"
  52. #endif // ASIO_SSL_DETAIL_PASSWORD_CALLBACK_HPP