From 2c37861acd78ab794684a3d8878bc67004f53a5e Mon Sep 17 00:00:00 2001 From: WolverinDEV Date: Mon, 15 Feb 2021 19:52:14 +0100 Subject: [PATCH] Fixed TSDNS --- native/dns/src/resolver.cpp | 12 +++++++----- native/dns/src/resolver.h | 2 +- native/dns/test/main.cpp | 4 ++-- native/dns/utils.cpp | 13 +++++++------ 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/native/dns/src/resolver.cpp b/native/dns/src/resolver.cpp index e547b02..d239a44 100644 --- a/native/dns/src/resolver.cpp +++ b/native/dns/src/resolver.cpp @@ -234,9 +234,6 @@ void Resolver::resolve_tsdns(const char *query, const sockaddr_storage& server_a #endif } - event_add(request->event_write, nullptr); - event_add(request->event_read, nullptr); - { auto seconds = chrono::floor(timeout); auto microseconds = chrono::ceil(timeout - seconds); @@ -252,6 +249,9 @@ void Resolver::resolve_tsdns(const char *query, const sockaddr_storage& server_a this->tsdns_requests.push_back(request); } + event_add(request->event_write, nullptr); + event_add(request->event_read, nullptr); + /* Activate the event loop */ this->event.condition.notify_one(); } @@ -269,12 +269,14 @@ void Resolver::event_tsdns_read(Resolver::tsdns_request *request) { if(buffer_length < 0) { #ifdef WIN32 auto error = WSAGetLastError(); - if(error != WSAEWOULDBLOCK) + if(error == WSAEWOULDBLOCK) { return; + } request->callback(ResultState::TSDNS_CONNECTION_FAIL, -2, "read failed: " + to_string(error)); #else - if(errno == EAGAIN) + if(errno == EAGAIN) { return; + } request->callback(ResultState::TSDNS_CONNECTION_FAIL, -2, "read failed: " + to_string(errno) + "/" + strerror(errno)); #endif this->destroy_tsdns_request(request); diff --git a/native/dns/src/resolver.h b/native/dns/src/resolver.h index bea25e1..14649ef 100644 --- a/native/dns/src/resolver.h +++ b/native/dns/src/resolver.h @@ -72,7 +72,7 @@ namespace tc::dns { std::string bogus; uint8_t secure_state{0}; #else - DNSResponse(std::shared_ptr); + explicit DNSResponse(std::shared_ptr); #endif std::shared_ptr data{nullptr}; diff --git a/native/dns/test/main.cpp b/native/dns/test/main.cpp index cdb7312..fbbe2b3 100644 --- a/native/dns/test/main.cpp +++ b/native/dns/test/main.cpp @@ -43,8 +43,8 @@ int main() { auto begin = chrono::system_clock::now(); for(int i = 0; i < 1; i++) { cr(resolver, { - "alex.ts3clan.pp.ua", - 9922 + "ttesting.ts3index.com", //alex.ts3clan.pp.ua + 9987 }, [begin](bool success, auto data) { auto end = chrono::system_clock::now(); cout << "Success: " << success << " Time: " << chrono::ceil(end - begin).count() << "ms" << endl; diff --git a/native/dns/utils.cpp b/native/dns/utils.cpp index 58bb35b..05d0a11 100644 --- a/native/dns/utils.cpp +++ b/native/dns/utils.cpp @@ -268,9 +268,9 @@ void tc::dns::cr_tsdns(tc::dns::Resolver &resolver, const tc::dns::ServerAddress std::transform(query.begin(), query.end(), query.begin(), tolower); resolver.resolve_tsdns(query.c_str(), tsdns_address, std::chrono::seconds{5}, [callback, query, address](Resolver::ResultState::value error, int detail, const std::string& response) { if(error == Resolver::ResultState::SUCCESS) { - if(response == "404") + if(response == "404") { callback(false, "no record found for " + query); - else { + } else { std::string host{response}; std::string port{"$PORT"}; @@ -329,7 +329,7 @@ struct CrStatus { this->finished |= this->try_answer(_this); //May invokes next DNS query assert(this->pending > 0); - if(--pending == 0 && !this->finished) { //Order matters we have to decrease pensing! + if(--this->pending == 0 && !this->finished) { //Order matters we have to decrease pensing! this->print_status(); this->callback(false, "no results"); this->finished = true; @@ -508,17 +508,18 @@ void tc::dns::cr(Resolver& resolver, const tc::dns::ServerAddress& address, cons status->execute_root_tsdns = { false, [&resolver, root_domain](const std::shared_ptr& status) { - //std::cout << "Execute tsdns" << std::endl; + std::cout << "Execute tsdns (root)" << std::endl; status->pending++; tc::dns::cr_tsdns(resolver, { root_domain, status->address.port }, [status](bool success, auto data) { + std::cout << "Done tsdns (root)" << std::endl; if(success) { - status->tsdns = {CrStatus::SUCCESS, "", std::get(data)}; + status->root_tsdns = {CrStatus::SUCCESS, "", std::get(data)}; } else { - status->tsdns = {CrStatus::FAILED, std::get(data), {}}; + status->root_tsdns = {CrStatus::FAILED, std::get(data), {}}; } status->do_done(status); });