// OpenVPN -- An application to securely tunnel IP networks // over a single port, with support for SSL/TLS-based // session authentication and key exchange, // packet encryption, packet authentication, and // packet compression. // // Copyright (C) 2012-2022 OpenVPN Inc. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License Version 3 // as published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program in the COPYING file. // If not, see . // Create an Asio time_traits class to allow Asio to natively handle // our Time and Time::Duration classes. #pragma once #include #include #include // was: #include #include #include namespace openvpn { struct AsioClock { typedef olong rep; typedef std::ratio<1, 1024> period; // time resolution of openvpn::Time, note 1024 instead of the usual 1000 typedef std::chrono::duration duration; typedef std::chrono::time_point time_point; static constexpr bool is_steady() { return false; } static time_point now() { return to_time_point(Time::now()); } static time_point to_time_point(const Time &t) { return time_point(duration(t.raw())); } static duration to_duration(const Time::Duration &d) { return duration(d.raw()); } }; class AsioTimer : public openvpn_io::basic_waitable_timer { public: typedef std::unique_ptr UPtr; AsioTimer(openvpn_io::io_context &io_context) : openvpn_io::basic_waitable_timer(io_context) { } std::size_t expires_at(const Time &t) { return openvpn_io::basic_waitable_timer::expires_at(AsioClock::to_time_point(t)); } std::size_t expires_after(const Time::Duration &d) { return openvpn_io::basic_waitable_timer::expires_after(AsioClock::to_duration(d)); } }; } // namespace openvpn