Compare commits

..

1 commit

Author SHA1 Message Date
Anton
4ad3045c1b Successful Connect() with proxy
Some checks failed
PR Check / on-push-commit-check (push) Has been cancelled
2024-11-26 18:34:49 +03:00

View file

@ -167,7 +167,8 @@ auto ConnectViaProxy(Socket& socket, const NoProxy&, std::string_view host, std:
} }
template <typename Socket> template <typename Socket>
auto ConnectViaProxy(Socket& socket, const HttpProxy&, std::string_view host, std::uint16_t port) -> boost::asio::awaitable<void> { auto ConnectViaProxy(Socket& socket, const HttpProxy& param_proxy, std::string_view host, std::uint16_t port)
-> boost::asio::awaitable<void> {
constexpr std::string_view kHttpVersion = "HTTP/1.1"; constexpr std::string_view kHttpVersion = "HTTP/1.1";
constexpr unsigned int kSuccessStatusCode = 200; constexpr unsigned int kSuccessStatusCode = 200;
constexpr std::string_view kEndOfHeaders = "\r\n\r\n"; constexpr std::string_view kEndOfHeaders = "\r\n\r\n";
@ -179,7 +180,8 @@ auto ConnectViaProxy(Socket& socket, const HttpProxy&, std::string_view host, st
socket, boost::asio::buffer(httpConnectRequest), boost::asio::transfer_all(), boost::asio::use_awaitable); socket, boost::asio::buffer(httpConnectRequest), boost::asio::transfer_all(), boost::asio::use_awaitable);
boost::asio::streambuf proxyServerResponse; boost::asio::streambuf proxyServerResponse;
co_await boost::asio::async_read_until(socket, proxyServerResponse, kEndOfHeaders, boost::asio::use_awaitable); std::size_t bytesTransferred =
co_await boost::asio::async_read_until(socket, proxyServerResponse, kEndOfHeaders, boost::asio::use_awaitable);
std::istream responseStream(&proxyServerResponse); std::istream responseStream(&proxyServerResponse);
std::string httpVersion; std::string httpVersion;
@ -203,7 +205,8 @@ auto ConnectViaProxy(Socket& socket, const HttpProxy&, std::string_view host, st
} }
template <typename Socket> template <typename Socket>
auto ConnectViaProxy(Socket& socket, const Socks5Proxy&, std::string_view address, std::uint16_t port) -> boost::asio::awaitable<void> { auto ConnectViaProxy(Socket& socket, const Socks5Proxy& socksProxy, std::string_view address, std::uint16_t port)
-> boost::asio::awaitable<void> {
constexpr std::array kSocks5RequestStart = {std::byte{0x05}, std::byte{0x01}, std::byte{0x00}, std::byte{0x03}}; constexpr std::array kSocks5RequestStart = {std::byte{0x05}, std::byte{0x01}, std::byte{0x00}, std::byte{0x03}};
constexpr std::size_t kSocks5RequestMaxSize = 257; constexpr std::size_t kSocks5RequestMaxSize = 257;
@ -283,8 +286,8 @@ auto ConnectViaProxy(Socket& socket, const SystemConfiguredProxy&, std::string_v
auto proxyOpt = GetSystemProxySettings(); auto proxyOpt = GetSystemProxySettings();
co_await std::visit( co_await std::visit(
[&](auto&& proxyVariant) -> boost::asio::awaitable<void> { // NOLINT [&](auto&& proxy_variant) -> boost::asio::awaitable<void> { // NOLINT
co_await ConnectViaProxy(socket, proxyVariant, host, port); // GCC error if co_return co_await ConnectViaProxy(socket, proxy_variant, host, port); // GCC error if co_return
}, },
proxyOpt); proxyOpt);
} }
@ -315,10 +318,11 @@ auto ConnectToServer(Socket& socket, const SystemConfiguredProxy& proxy, std::st
template <typename Socket> template <typename Socket>
auto ConnectWithProxy(Socket& socket, const Proxy& proxy, std::string_view host, std::uint16_t port) -> boost::asio::awaitable<void> { auto ConnectWithProxy(Socket& socket, const Proxy& proxy, std::string_view host, std::uint16_t port) -> boost::asio::awaitable<void> {
co_await std::visit( co_await std::visit(
[&socket, host, port](const auto& proxyVariant) { [&socket, host, port](const auto& proxy_variant) {
return ConnectToServer(socket, proxyVariant, host, port); return ConnectToServer(socket, proxy_variant, host, port);
}, },
proxy); proxy);
// co_await awaitable;
} }
inline auto GetAuthData(const PlainUserAccount& account) -> std::string { inline auto GetAuthData(const PlainUserAccount& account) -> std::string {