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