Added Proxy in ClientCreateVisitor
This commit is contained in:
parent
665ceb9604
commit
8299d01fe5
2 changed files with 25 additions and 21 deletions
9
.gitignore
vendored
9
.gitignore
vendored
|
@ -30,15 +30,6 @@ libxmlplusplus-prefix/
|
|||
spdlog.pc
|
||||
build*
|
||||
temp*
|
||||
#/.idea/codeStyles/codeStyleConfig.xml
|
||||
#/.idea/discord.xml
|
||||
#/.idea/editor.xml
|
||||
#/.idea/larra.iml
|
||||
#/.idea/material_theme_project_new.xml
|
||||
#/.idea/misc.xml
|
||||
#/.idea/modules.xml
|
||||
#/.idea/codeStyles/Project.xml
|
||||
#/.idea/vcs.xml
|
||||
/.idea/
|
||||
|
||||
|
||||
|
|
|
@ -164,17 +164,17 @@ auto ConnectViaProxy(Socket& socket, const HttpProxy& param_proxy, std::string_v
|
|||
constexpr unsigned int kSuccessStatusCode = 200;
|
||||
constexpr std::string_view kEndOfHeaders = "\r\n\r\n";
|
||||
constexpr int kEndOfHttpSubstring = 5;
|
||||
// HTTP CONNECT запрос
|
||||
std::string request = std::format("CONNECT {}:{} {}\r\nHost: {}:{}\r\n\r\n", host, port, kHttpVersion, host, port);
|
||||
|
||||
co_await boost::asio::async_write(socket, boost::asio::buffer(request), boost::asio::transfer_all(), boost::asio::use_awaitable);
|
||||
std::string httpConnectRequest = std::format("CONNECT {}:{} {}\r\nHost: {}:{}\r\n\r\n", host, port, kHttpVersion, host, port);
|
||||
|
||||
// ответ от прокси-сервера
|
||||
boost::asio::streambuf response;
|
||||
std::size_t bytesTransferred = co_await boost::asio::async_read_until(socket, response, kEndOfHeaders, boost::asio::use_awaitable);
|
||||
co_await boost::asio::async_write(
|
||||
socket, boost::asio::buffer(httpConnectRequest), boost::asio::transfer_all(), boost::asio::use_awaitable);
|
||||
|
||||
// статус ответа
|
||||
std::istream responseStream(&response);
|
||||
boost::asio::streambuf proxyServerResponse;
|
||||
std::size_t bytesTransferred =
|
||||
co_await boost::asio::async_read_until(socket, proxyServerResponse, kEndOfHeaders, boost::asio::use_awaitable);
|
||||
|
||||
std::istream responseStream(&proxyServerResponse);
|
||||
std::string httpVersion;
|
||||
unsigned int statusCode = 0;
|
||||
std::string statusMessage;
|
||||
|
@ -263,9 +263,9 @@ inline auto GetSystemProxySettings() -> Proxy {
|
|||
constexpr std::uint16_t kHttpPort = 8080;
|
||||
return GetProxySettings<HttpProxy>(proxyEnv, kHttpPort);
|
||||
}
|
||||
if(const char* proxy_env = std::getenv("socks_proxy")) {
|
||||
if(const char* proxyEnv = std::getenv("socks_proxy")) {
|
||||
constexpr std::uint16_t kSocksPort = 1080;
|
||||
return GetProxySettings<Socks5Proxy>(proxy_env, kSocksPort);
|
||||
return GetProxySettings<Socks5Proxy>(proxyEnv, kSocksPort);
|
||||
}
|
||||
|
||||
return NoProxy{};
|
||||
|
@ -274,13 +274,13 @@ inline auto GetSystemProxySettings() -> Proxy {
|
|||
template <typename Socket>
|
||||
auto ConnectViaProxy(Socket& socket, const SystemConfiguredProxy&, std::string_view host, std::uint16_t port)
|
||||
-> boost::asio::awaitable<void> {
|
||||
auto proxy_opt = GetSystemProxySettings();
|
||||
auto proxyOpt = GetSystemProxySettings();
|
||||
|
||||
co_await std::visit(
|
||||
[&](auto&& proxy_variant) -> boost::asio::awaitable<void> {
|
||||
co_await ConnectViaProxy(socket, proxy_variant, host, port);
|
||||
},
|
||||
proxy_opt);
|
||||
proxyOpt);
|
||||
}
|
||||
|
||||
template <typename Socket, typename ProxyType>
|
||||
|
@ -418,6 +418,19 @@ struct ClientCreateVisitor {
|
|||
co_await boost::asio::async_connect(socket, resolveResults, boost::asio::use_awaitable);
|
||||
}
|
||||
|
||||
template <typename Socket>
|
||||
auto Connect(Socket& socket) -> boost::asio::awaitable<void> {
|
||||
if(!std::holds_alternative<NoProxy>(this->options.proxy)) {
|
||||
auto host = this->options.hostname.value_or(account.Jid().server);
|
||||
auto port = this->options.port.value_or(kDefaultXmppPort);
|
||||
|
||||
co_await ConnectWithProxy(socket, this->options.proxy, host, port);
|
||||
} else {
|
||||
auto resolveResults = co_await this->Resolve();
|
||||
co_await boost::asio::async_connect(socket, resolveResults, boost::asio::use_awaitable);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename Socket>
|
||||
auto ProcessTls(XmlStream<boost::asio::ssl::stream<Socket>>& stream) -> boost::asio::awaitable<void> {
|
||||
const StartTlsRequest request;
|
||||
|
|
Loading…
Reference in a new issue