aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAva Chow <github@achow101.com>2024-06-26 15:28:26 -0400
committerAva Chow <github@achow101.com>2024-06-26 15:28:26 -0400
commitb27afb7fb774809c9c075d56e44657e0b607a00c (patch)
tree03888bebc853172be4991852d1e858341ebe4fdc
parent9ac4f69ec24b66b75507f21591161ea8731d69fe (diff)
parent7d3662fbe35032178c5a5e27e73c592268f6e41b (diff)
Merge bitcoin/bitcoin#29833: i2p: fix and improve logs
7d3662fbe35032178c5a5e27e73c592268f6e41b i2p: fix log when an interruption happens during `Accept` (brunoerg) 3d3a83fab2bcc5750e5c5854d121e943922fefd8 i2p: log errors properly according to their severity (brunoerg) Pull request description: This PR improves and fixes i2p logs (joint work with vasild). - It replaces `LogPrint` to `LogPrintLevel` so we can log according to the severity. - Fix log when interruption happens during `Accept`. Before this PR, when an interruption happens, it just logs "Error accepting:", no reason is logged as it does for other situations. This PR changes it to log "Accept interrupted". - Log errors according to the severity. Stuff like creating SAM session, destroying SAM session, etc... are logged as 'debug'. ACKs for top commit: achow101: ACK 7d3662fbe35032178c5a5e27e73c592268f6e41b marcofleon: ACK 7d3662fbe35032178c5a5e27e73c592268f6e41b. vasild: ACK 7d3662fbe35032178c5a5e27e73c592268f6e41b Tree-SHA512: 1c3d92108dbc22833f37a78e18b4efd723433d10f28166d17c74eab884cd97e908b4e0a0908fd16288df895eb2eb480f781de37b2ec6a6d414abfb71e0c86fe2
-rw-r--r--src/i2p.cpp28
-rw-r--r--src/i2p.h8
2 files changed, 13 insertions, 23 deletions
diff --git a/src/i2p.cpp b/src/i2p.cpp
index a907cfeacb..0420bc9238 100644
--- a/src/i2p.cpp
+++ b/src/i2p.cpp
@@ -148,7 +148,7 @@ bool Session::Listen(Connection& conn)
conn.sock = StreamAccept();
return true;
} catch (const std::runtime_error& e) {
- Log("Error listening: %s", e.what());
+ LogPrintLevel(BCLog::I2P, BCLog::Level::Error, "Couldn't listen: %s\n", e.what());
CheckControlSock();
}
return false;
@@ -204,7 +204,11 @@ bool Session::Accept(Connection& conn)
return true;
}
- Log("Error accepting%s: %s", disconnect ? " (will close the session)" : "", errmsg);
+ if (*m_interrupt) {
+ LogPrintLevel(BCLog::I2P, BCLog::Level::Debug, "Accept was interrupted\n");
+ } else {
+ LogPrintLevel(BCLog::I2P, BCLog::Level::Debug, "Error accepting%s: %s\n", disconnect ? " (will close the session)" : "", errmsg);
+ }
if (disconnect) {
LOCK(m_mutex);
Disconnect();
@@ -219,7 +223,7 @@ bool Session::Connect(const CService& to, Connection& conn, bool& proxy_error)
// Refuse connecting to arbitrary ports. We don't specify any destination port to the SAM proxy
// when connecting (SAM 3.1 does not use ports) and it forces/defaults it to I2P_SAM31_PORT.
if (to.GetPort() != I2P_SAM31_PORT) {
- Log("Error connecting to %s, connection refused due to arbitrary port %s", to.ToStringAddrPort(), to.GetPort());
+ LogPrintLevel(BCLog::I2P, BCLog::Level::Debug, "Error connecting to %s, connection refused due to arbitrary port %s\n", to.ToStringAddrPort(), to.GetPort());
proxy_error = false;
return false;
}
@@ -267,7 +271,7 @@ bool Session::Connect(const CService& to, Connection& conn, bool& proxy_error)
throw std::runtime_error(strprintf("\"%s\"", connect_reply.full));
} catch (const std::runtime_error& e) {
- Log("Error connecting to %s: %s", to.ToStringAddrPort(), e.what());
+ LogPrintLevel(BCLog::I2P, BCLog::Level::Debug, "Error connecting to %s: %s\n", to.ToStringAddrPort(), e.what());
CheckControlSock();
return false;
}
@@ -285,12 +289,6 @@ std::string Session::Reply::Get(const std::string& key) const
return pos->second.value();
}
-template <typename... Args>
-void Session::Log(const std::string& fmt, const Args&... args) const
-{
- LogPrint(BCLog::I2P, "%s\n", tfm::format(fmt, args...));
-}
-
Session::Reply Session::SendRequestAndGetReply(const Sock& sock,
const std::string& request,
bool check_result_ok) const
@@ -346,7 +344,7 @@ void Session::CheckControlSock()
std::string errmsg;
if (m_control_sock && !m_control_sock->IsConnected(errmsg)) {
- Log("Control socket error: %s", errmsg);
+ LogPrintLevel(BCLog::I2P, BCLog::Level::Debug, "Control socket error: %s\n", errmsg);
Disconnect();
}
}
@@ -416,7 +414,7 @@ void Session::CreateIfNotCreatedAlready()
const auto session_type = m_transient ? "transient" : "persistent";
const auto session_id = GetRandHash().GetHex().substr(0, 10); // full is overkill, too verbose in the logs
- Log("Creating %s SAM session %s with %s", session_type, session_id, m_control_host.ToString());
+ LogPrintLevel(BCLog::I2P, BCLog::Level::Debug, "Creating %s SAM session %s with %s\n", session_type, session_id, m_control_host.ToString());
auto sock = Hello();
@@ -453,7 +451,7 @@ void Session::CreateIfNotCreatedAlready()
m_session_id = session_id;
m_control_sock = std::move(sock);
- Log("%s SAM session %s created, my address=%s",
+ LogPrintLevel(BCLog::I2P, BCLog::Level::Info, "%s SAM session %s created, my address=%s\n",
Capitalize(session_type),
m_session_id,
m_my_addr.ToStringAddrPort());
@@ -484,9 +482,9 @@ void Session::Disconnect()
{
if (m_control_sock) {
if (m_session_id.empty()) {
- Log("Destroying incomplete SAM session");
+ LogPrintLevel(BCLog::I2P, BCLog::Level::Info, "Destroying incomplete SAM session\n");
} else {
- Log("Destroying SAM session %s", m_session_id);
+ LogPrintLevel(BCLog::I2P, BCLog::Level::Info, "Destroying SAM session %s\n", m_session_id);
}
m_control_sock.reset();
}
diff --git a/src/i2p.h b/src/i2p.h
index 8b0f1e1182..153263399d 100644
--- a/src/i2p.h
+++ b/src/i2p.h
@@ -157,14 +157,6 @@ private:
};
/**
- * Log a message in the `BCLog::I2P` category.
- * @param[in] fmt printf(3)-like format string.
- * @param[in] args printf(3)-like arguments that correspond to `fmt`.
- */
- template <typename... Args>
- void Log(const std::string& fmt, const Args&... args) const;
-
- /**
* Send request and get a reply from the SAM proxy.
* @param[in] sock A socket that is connected to the SAM proxy.
* @param[in] request Raw request to send, a newline terminator is appended to it.