42#ifndef _DWMCREDENCEUTILS_HH_
43#define _DWMCREDENCEUTILS_HH_
52#include <boost/asio.hpp>
53#include <boost/version.hpp>
65 using Clock = std::chrono::system_clock;
66 using TimePoint = std::chrono::time_point<Clock>;
67#if BOOST_VERSION >= 107400
68 using BoostTcpSocket =
69 boost::asio::basic_socket<boost::asio::ip::tcp,
70 boost::asio::any_io_executor>;
71 using BoostUnixSocket =
72 boost::asio::basic_socket<boost::asio::local::stream_protocol,
73 boost::asio::any_io_executor>;
75 using BoostTcpSocket =
76 boost::asio::basic_socket<boost::asio::ip::tcp,
77 boost::asio::executor>;
78 using BoostUnixSocket =
79 boost::asio::basic_socket<boost::asio::local::stream_protocol,
80 boost::asio::executor>;
88 static ssize_t BytesReady(BoostTcpSocket & sck);
89 static ssize_t BytesReady(BoostUnixSocket & sck);
97 static bool WaitUntilBytesReady(BoostTcpSocket & sck,
98 uint32_t numBytes, TimePoint endTime);
99 static bool WaitUntilBytesReady(BoostUnixSocket & sck,
100 uint32_t numBytes, TimePoint endTime);
108 static bool WaitForBytesReady(BoostTcpSocket & sck, uint32_t numBytes,
109 std::chrono::milliseconds timeout);
110 static bool WaitForBytesReady(BoostUnixSocket & sck, uint32_t numBytes,
111 std::chrono::milliseconds timeout);
117 ReadLengthRestrictedString(boost::asio::ip::tcp::socket & sck,
118 std::string & s, uint64_t maxLen);
120 ReadLengthRestrictedString(boost::asio::local::stream_protocol::socket & sck,
121 std::string & s, uint64_t maxLen);
126 static std::istream & ReadLengthRestrictedString(std::istream & is,
134 ReadLengthRestrictedString(boost::asio::ip::tcp::socket & sck,
135 std::string & s, uint64_t maxLen,
138 ReadLengthRestrictedString(boost::asio::local::stream_protocol::socket & sck,
139 std::string & s, uint64_t maxLen,
145 static std::string Bin2Base64(
const std::string & s);
151 static std::string Base642Bin(
const std::string & s);
156 static std::string UserHomeDirectory();
161 static std::string UserName();
166 static std::string HostName();
168 static bool ScalarMult(
const std::string & sk,
const std::string & pk,
176 EndPointString(
const boost::asio::ip::tcp::endpoint & endPoint);