Skip to content
Snippets Groups Projects
Commit 29fe7d5f authored by Adrien Béraud's avatar Adrien Béraud
Browse files

http: add Resolver

parent 459217b6
No related branches found
No related tags found
No related merge requests found
......@@ -104,6 +104,22 @@ private:
std::shared_ptr<dht::Logger> logger_;
};
class Resolver {
Resolver(asio::io_context& ctx, const std::string& host, const std::string& service = "80");
using ResolvedCb = std::function<void(const asio::error_code&, const asio::ip::basic_resolver_results<asio::ip::tcp>&)>;
void addOnResolved(ResolvedCb cb);
private:
std::mutex cbsMutex_;
asio::ip::tcp::resolver resolver_;
asio::error_code error_;
asio::ip::basic_resolver_results<asio::ip::tcp> endpoints_;
std::queue<ResolvedCb> cbs_;
bool completed_ {false};
};
class OPENDHT_PUBLIC Request
{
public:
......@@ -138,12 +154,13 @@ private:
size_t get_content_length(const std::string str);
std::string service_;
Resolver resolver_;
/* std::string service_;
std::string host_;
asio::ip::tcp::resolver resolver_;
asio::ip::basic_resolver_results<asio::ip::tcp> endpoints_;
*/
Id id_;
static Id ids_;
std::shared_ptr<Connection> conn_;
......
......@@ -477,4 +477,43 @@ Request::get_content_length(const std::string str)
return content_length;
}
Resolver::Resolver(asio::io_context& ctx, const std::string& host, const std::string& service)
{
resolver_.async_resolve({host, service}, [this]
(const asio::error_code& ec, asio::ip::tcp::resolver::results_type endpoints)
{
std::lock_guard<std::mutex> lock(cbsMutex_);
while (not cbs_.empty()) {
cbs_.front()(ec, endpoints);
cbs_.pop();
}
error_ = ec;
endpoints_ = endpoints;
completed_ = true;
}
}
void
Resolver::addOnResolved(ResolvedCb cb)
{
std::lock_guard<std::mutex> lock(cbsMutex_);
if (completed_) {
cb(error_, endpoints_);
} else {
cbs_.push(std::move(cb));
}
}
/*
private:
std::mutex cbsMutex_;
std::queue<ResolvedCb> cbs_;
asio::ip::tcp::resolver resolver_;
asio::error_code error_;
asio::ip::basic_resolver_results<asio::ip::tcp> endpoints_;
} */
} // namespace http
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment