diff --git a/include/opendht/http.h b/include/opendht/http.h index 6eab52c81af21a2fcfefce0f382e72e4509ce05b..bf756dad357485242c6c22799c6f4736d6066511 100644 --- a/include/opendht/http.h +++ b/include/opendht/http.h @@ -142,7 +142,7 @@ public: Resolver(asio::io_context& ctx, const std::string& url, std::shared_ptr<dht::Logger> logger = {}); Resolver(asio::io_context& ctx, const std::string& host, const std::string& service = "80", - std::shared_ptr<dht::Logger> logger = {}); + const bool ssl = false, std::shared_ptr<dht::Logger> logger = {}); // use already resolved endpoints with classes using this resolver Resolver(asio::io_context& ctx, std::vector<asio::ip::tcp::endpoint> endpoints, @@ -160,11 +160,10 @@ private: std::mutex mutex_; + Url url_; asio::error_code ec_; - std::string service_; asio::ip::tcp::resolver resolver_; std::vector<asio::ip::tcp::endpoint> endpoints_; - Url url_; bool completed_ {false}; std::queue<ResolverCb> cbs_; @@ -196,7 +195,7 @@ public: // resolves implicitly Request(asio::io_context& ctx, const std::string& url, std::shared_ptr<dht::Logger> logger = {}); Request(asio::io_context& ctx, const std::string& host, const std::string& service = "80", - std::shared_ptr<dht::Logger> logger = {}); + const bool ssl = false, std::shared_ptr<dht::Logger> logger = {}); // user defined resolver Request(asio::io_context& ctx, std::shared_ptr<Resolver> resolver, std::shared_ptr<dht::Logger> logger = {}); diff --git a/src/dht_proxy_server.cpp b/src/dht_proxy_server.cpp index 1f9357168475d7d74039e6416517e3c43b121b95..a97ca78b2437d1f6f7090366d5809f5680f3d267 100644 --- a/src/dht_proxy_server.cpp +++ b/src/dht_proxy_server.cpp @@ -860,8 +860,8 @@ DhtProxyServer::sendPushNotification(const std::string& token, Json::Value&& jso if (pushServer_.empty()) return; - auto request = std::make_shared<http::Request>(io_context(), pushHostPort_.first, - pushHostPort_.second, logger_); + auto request = std::make_shared<http::Request>(io_context(), pushHostPort_.first, pushHostPort_.second, + httpsServer_ ? true : false, logger_); auto reqid = request->id(); try { request->set_target("/api/push"); diff --git a/src/http.cpp b/src/http.cpp index 84a7f9bc1e0cb5b349b0494c8f9c19936a03e3f8..97855b051a43389f52af7d8448a0117b212b2ddb 100644 --- a/src/http.cpp +++ b/src/http.cpp @@ -306,26 +306,26 @@ Connection::timeout(const std::chrono::seconds timeout, HandlerCb cb) // Resolver Resolver::Resolver(asio::io_context& ctx, const std::string& url, std::shared_ptr<dht::Logger> logger) - : resolver_(ctx), url_(url), logger_(logger) + : url_(url), resolver_(ctx), logger_(logger) { - service_ = url_.service; resolve(url_.host, url_.service); } Resolver::Resolver(asio::io_context& ctx, const std::string& host, const std::string& service, - std::shared_ptr<dht::Logger> logger) + const bool ssl, std::shared_ptr<dht::Logger> logger) : resolver_(ctx), logger_(logger) { - service_ = service; - resolve(host, service); + url_.host = host; + url_.service = service; + url_.protocol = (ssl ? "https" : "http"); + resolve(url_.host, url_.service); } Resolver::Resolver(asio::io_context& ctx, std::vector<asio::ip::tcp::endpoint> endpoints, const bool ssl, std::shared_ptr<dht::Logger> logger) : resolver_(ctx), logger_(logger) { - if (ssl) - url_.protocol = "https"; + url_.protocol = (ssl ? "https" : "http"); endpoints_ = std::move(endpoints); completed_ = true; } @@ -351,12 +351,6 @@ Resolver::get_url() const return url_; } -std::string -Resolver::get_service() const -{ - return service_; -} - void Resolver::add_callback(ResolverCb cb) { @@ -420,11 +414,11 @@ Request::Request(asio::io_context& ctx, const std::string& url, std::shared_ptr< } Request::Request(asio::io_context& ctx, const std::string& host, const std::string& service, - std::shared_ptr<dht::Logger> logger) + const bool ssl, std::shared_ptr<dht::Logger> logger) : id_(Request::ids_++), ctx_(ctx), logger_(logger) { cbs_ = std::make_unique<Callbacks>(); - resolver_ = std::make_shared<Resolver>(ctx, host, service, logger_); + resolver_ = std::make_shared<Resolver>(ctx, host, service, ssl, logger_); set_target(resolver_->get_url().target); }