From b98cc78b4223dba2c038d68721a60a71795965e5 Mon Sep 17 00:00:00 2001 From: Seva <seva@binarytrails.net> Date: Tue, 18 Jun 2019 10:17:21 -0400 Subject: [PATCH] dhtproxy: add if logger before using it --- src/dht_proxy_server.cpp | 27 ++++++++++++++++++--------- src/http.cpp | 27 ++++++++++++++++++--------- 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/src/dht_proxy_server.cpp b/src/dht_proxy_server.cpp index 7a9194bd..5f9c41d5 100644 --- a/src/dht_proxy_server.cpp +++ b/src/dht_proxy_server.cpp @@ -139,12 +139,14 @@ DhtProxyServer::makeHttpServerSettings() void DhtProxyServer::stop() { - logger_->d("[restinio] closing http server async operations"); + if (logger_) + logger_->d("[restinio] closing http server async operations"); httpServer_->io_context().reset(); httpServer_->io_context().stop(); if (httpServerThread_.joinable()) httpServerThread_.join(); - logger_->d("[restinio] http server closed"); + if (logger_) + logger_->d("[restinio] http server closed"); } void @@ -177,7 +179,8 @@ DhtProxyServer::asyncPrintStats() nodeInfo_ = std::move(newInfo); auto json = nodeInfo_.toJson(); auto str = Json::writeString(jsonBuilder_, json); - logger_->d("[stats] %s", str.c_str()); + if (logger_) + logger_->d("[stats] %s", str.c_str()); } printStatsTimer_->expires_at(printStatsTimer_->expiry() + PRINT_STATS_PERIOD); printStatsTimer_->async_wait(std::bind(&DhtProxyServer::asyncPrintStats, this)); @@ -413,7 +416,8 @@ DhtProxyServer::subscribe(restinio::request_handle_t request, auto isAndroid = platform == "android"; auto clientId = root.isMember("client_id") ? root["client_id"].asString() : std::string(); - logger_->w("[subscribe] %s client: %s", infoHash.toString().c_str(), clientId.c_str()); + if (logger_) + logger_->w("[subscribe] %s client: %s", infoHash.toString().c_str(), clientId.c_str()); // ================ Search for existing listener =================== // start the timer auto timeout = std::chrono::steady_clock::now() + proxy::OP_TIMEOUT; @@ -424,7 +428,8 @@ DhtProxyServer::subscribe(restinio::request_handle_t request, auto pushListeners = pushListener->second.listeners.emplace(infoHash, std::vector<Listener>{}).first; for (auto &listener: pushListeners->second){ - logger_->w("[subscribe] found client_id: %s", listener.clientId.c_str()); + if (logger_) + logger_->w("[subscribe] found client_id: %s", listener.clientId.c_str()); // Found -> Resubscribe if (listener.clientId == clientId){ // Reset timers @@ -490,9 +495,12 @@ DhtProxyServer::subscribe(restinio::request_handle_t request, listener.expireNotifyTimer->async_wait( [this, infoHash, pushToken, isAndroid, clientId](const asio::error_code &ec){ - logger_->d("[subscribe] sending refresh %s", infoHash.toString().c_str()); - if (ec) - logger_->d("[subscribe] error sending refresh: %s", ec.message().c_str()); + if (logger_) + logger_->d("[subscribe] sending refresh %s", infoHash.toString().c_str()); + if (ec){ + if (logger_) + logger_->d("[subscribe] error sending refresh: %s", ec.message().c_str()); + } Json::Value json; json["timeout"] = infoHash.toString(); json["to"] = clientId; @@ -561,7 +569,8 @@ DhtProxyServer::unsubscribe(restinio::request_handle_t request, void DhtProxyServer::cancelPushListen(const std::string& pushToken, const dht::InfoHash& key, const std::string& clientId) { - logger_->d("[cancelpushlisten] %s %s", key.toString().c_str(), clientId.c_str()); + if (logger_) + logger_->d("[cancelpushlisten] %s %s", key.toString().c_str(), clientId.c_str()); std::lock_guard<std::mutex> lock(*lockListener_); auto pushListener = pushListeners_.find(pushToken); diff --git a/src/http.cpp b/src/http.cpp index 84599f90..e01712df 100644 --- a/src/http.cpp +++ b/src/http.cpp @@ -90,11 +90,13 @@ ConnectionListener::state_changed(const restinio::connection_state::notice_t &no if (listeners_->find(id) != listeners_->end()){ if (notice.cause() == restinio::connection_state::cause_t::closed){ - logger_->d("[restinio] [connection:%li] cancelling listener", id); + if (logger_) + logger_->d("[restinio] [connection:%li] cancelling listener", id); dht_->cancelListen(listeners_->at(id).hash, std::move(listeners_->at(id).token)); listeners_->erase(id); - logger_->d("[restinio] %li listeners are connected", listeners_->size()); + if (logger_) + logger_->d("[restinio] %li listeners are connected", listeners_->size()); } } } @@ -160,7 +162,8 @@ Client::open_conn(){ connId_, std::move(asio::ip::tcp::socket{resolver_.get_io_context()}) ); - logger_->d("[connection:%i] created", conn->id()); + if (logger_) + logger_->d("[connection:%i] created", conn->id()); connId_++; return conn; } @@ -226,25 +229,29 @@ Client::async_request(std::string request, resolver_.async_resolve(build_query(), [=](std::error_code ec, tcp::resolver::results_type res){ if (ec or res.empty()){ - logger_->e("[connection:%i] error resolving", conn->id()); + if (logger_) + logger_->e("[connection:%i] error resolving", conn->id()); conn->close(); return; } for (auto da = res.begin(); da != res.end(); ++da){ - logger_->d("[connection:%i] resolved host=%s service=%s", + if (logger_) + logger_->d("[connection:%i] resolved host=%s service=%s", conn->id(), da->host_name().c_str(), da->service_name().c_str()); conn->start(da); break; } if (!conn->is_open()){ - logger_->e("[connection:%i] error closed connection", conn->id()); + if (logger_) + logger_->e("[connection:%i] error closed connection", conn->id()); return; } // send request logger_->d("[connection:%i] request write", conn->id()); conn->write(request, ec); if (ec and ec != asio::error::eof){ - logger_->e("[connection:%i] error: %s", conn->id(), ec.message().c_str()); + if (logger_) + logger_->e("[connection:%i] error: %s", conn->id(), ec.message().c_str()); return; } // read response @@ -262,14 +269,16 @@ Client::async_request(std::string request, // detect parsing errors if (HPE_OK != parser->http_errno && HPE_PAUSED != parser->http_errno){ auto err = HTTP_PARSER_ERRNO(parser.get()); - logger_->e("[connection:%i] error parsing: %s", + if (logger_) + logger_->e("[connection:%i] error parsing: %s", conn->id(), http_errno_name(err)); } } if (ec != asio::error::eof) throw std::runtime_error{fmt::format( "[connection:{}] error parsing: {}", conn->id(), ec)}; - logger_->d("[connection:%i] request finished", conn->id()); + if (logger_) + logger_->d("[connection:%i] request finished", conn->id()); }); } -- GitLab