Successful connection using Connect() overload for proxy
Some checks failed
PR Check / on-push-commit-check (push) Failing after 12m30s
Some checks failed
PR Check / on-push-commit-check (push) Failing after 12m30s
This commit is contained in:
parent
8299d01fe5
commit
d4e78e63b2
1 changed files with 18 additions and 7 deletions
|
@ -157,6 +157,15 @@ struct StartTlsRequest {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename Socket>
|
||||||
|
auto ConnectViaProxy(Socket& socket, const NoProxy&, std::string_view host, std::uint16_t port) -> boost::asio::awaitable<void> {
|
||||||
|
auto executor = co_await boost::asio::this_coro::executor;
|
||||||
|
boost::asio::ip::tcp::resolver resolver(executor);
|
||||||
|
auto endpoints = co_await resolver.async_resolve(host, std::to_string(port), boost::asio::use_awaitable);
|
||||||
|
co_await boost::asio::async_connect(socket, endpoints, boost::asio::use_awaitable);
|
||||||
|
co_return;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Socket>
|
template <typename Socket>
|
||||||
auto ConnectViaProxy(Socket& socket, const HttpProxy& param_proxy, std::string_view host, std::uint16_t port)
|
auto ConnectViaProxy(Socket& socket, const HttpProxy& param_proxy, std::string_view host, std::uint16_t port)
|
||||||
-> boost::asio::awaitable<void> {
|
-> boost::asio::awaitable<void> {
|
||||||
|
@ -196,7 +205,7 @@ auto ConnectViaProxy(Socket& socket, const HttpProxy& param_proxy, std::string_v
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Socket>
|
template <typename Socket>
|
||||||
auto ConnectViaProxy(Socket& socket, Socks5Proxy& socksProxy, std::string_view address, std::uint16_t port)
|
auto ConnectViaProxy(Socket& socket, const Socks5Proxy& socksProxy, std::string_view address, std::uint16_t port)
|
||||||
-> boost::asio::awaitable<void> {
|
-> 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}};
|
||||||
|
|
||||||
|
@ -287,10 +296,12 @@ template <typename Socket, typename ProxyType>
|
||||||
auto ConnectToServer(Socket& socket, const ProxyType& proxy, std::string_view host, std::uint16_t port) -> boost::asio::awaitable<void> {
|
auto ConnectToServer(Socket& socket, const ProxyType& proxy, std::string_view host, std::uint16_t port) -> boost::asio::awaitable<void> {
|
||||||
auto executor = co_await boost::asio::this_coro::executor;
|
auto executor = co_await boost::asio::this_coro::executor;
|
||||||
boost::asio::ip::tcp::resolver resolver(executor);
|
boost::asio::ip::tcp::resolver resolver(executor);
|
||||||
auto endpoints = co_await resolver.async_resolve(proxy.hostname, std::to_string(proxy.port), boost::asio::use_awaitable);
|
// auto endpoints = co_await resolver.async_resolve(proxy.hostname, std::to_string(proxy.port), boost::asio::use_awaitable);
|
||||||
co_await boost::asio::async_connect(socket, endpoints, boost::asio::use_awaitable);
|
// co_await boost::asio::async_connect(socket, endpoints, boost::asio::use_awaitable);
|
||||||
|
|
||||||
if constexpr(!std::same_as<ProxyType, NoProxy>) {
|
if constexpr(!std::same_as<ProxyType, NoProxy>) {
|
||||||
|
auto endpoints = co_await resolver.async_resolve(proxy.hostname, std::to_string(proxy.port), boost::asio::use_awaitable);
|
||||||
|
co_await boost::asio::async_connect(socket, endpoints, boost::asio::use_awaitable);
|
||||||
co_await ConnectViaProxy(socket, proxy, host, port);
|
co_await ConnectViaProxy(socket, proxy, host, port);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -308,12 +319,12 @@ 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> {
|
||||||
auto awaitable = std::visit(
|
co_await std::visit(
|
||||||
[&socket, host, port](const auto& proxy_variant) {
|
[&socket, host, port](const auto& proxy_variant) {
|
||||||
return ConnectToServer(socket, proxy_variant, host, port);
|
return ConnectToServer(socket, proxy_variant, host, port);
|
||||||
},
|
},
|
||||||
proxy);
|
proxy);
|
||||||
co_await awaitable;
|
// co_await awaitable;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline auto GetAuthData(const PlainUserAccount& account) -> std::string {
|
inline auto GetAuthData(const PlainUserAccount& account) -> std::string {
|
||||||
|
@ -459,7 +470,7 @@ struct ClientCreateVisitor {
|
||||||
template <typename Socket>
|
template <typename Socket>
|
||||||
inline auto operator()(XmlStream<Socket> stream)
|
inline auto operator()(XmlStream<Socket> stream)
|
||||||
-> boost::asio::awaitable<std::variant<Client<Socket>, Client<boost::asio::ssl::stream<Socket>>>> {
|
-> boost::asio::awaitable<std::variant<Client<Socket>, Client<boost::asio::ssl::stream<Socket>>>> {
|
||||||
co_await this->Connect(stream.next_layer(), co_await this->Resolve());
|
co_await this->Connect(stream.next_layer());
|
||||||
|
|
||||||
co_await stream.Send(UserStream{.from = account.Jid(), .to = account.Jid().server, .version = "1.0", .xmlLang = "en"});
|
co_await stream.Send(UserStream{.from = account.Jid(), .to = account.Jid().server, .version = "1.0", .xmlLang = "en"});
|
||||||
SPDLOG_DEBUG("UserStream sended");
|
SPDLOG_DEBUG("UserStream sended");
|
||||||
|
@ -482,7 +493,7 @@ struct ClientCreateVisitor {
|
||||||
inline auto operator()(XmlStream<boost::asio::ssl::stream<Socket>> stream)
|
inline auto operator()(XmlStream<boost::asio::ssl::stream<Socket>> stream)
|
||||||
-> boost::asio::awaitable<std::variant<Client<Socket>, Client<boost::asio::ssl::stream<Socket>>>> {
|
-> boost::asio::awaitable<std::variant<Client<Socket>, Client<boost::asio::ssl::stream<Socket>>>> {
|
||||||
auto& socket = stream.next_layer();
|
auto& socket = stream.next_layer();
|
||||||
co_await this->Connect(socket.next_layer(), co_await this->Resolve());
|
co_await this->Connect(socket.next_layer());
|
||||||
co_await stream.Send(
|
co_await stream.Send(
|
||||||
UserStream{.from = account.Jid().Username("anonymous"), .to = account.Jid().server, .version = "1.0", .xmlLang = "en"},
|
UserStream{.from = account.Jid().Username("anonymous"), .to = account.Jid().server, .version = "1.0", .xmlLang = "en"},
|
||||||
socket.next_layer());
|
socket.next_layer());
|
||||||
|
|
Loading…
Reference in a new issue