From 3554adf0c1a397ce8b752cb72b9aba28333c771a Mon Sep 17 00:00:00 2001 From: SChernykh Date: Tue, 27 Jun 2023 14:29:19 +0200 Subject: [PATCH] Refactored string conversions Use `log::Stream` everywhere --- src/p2pool_api.cpp | 8 +++++++- src/params.cpp | 15 +++++++++------ src/util.cpp | 19 ++++++++++++------- src/zmq_reader.cpp | 19 ++++++++++++------- 4 files changed, 40 insertions(+), 21 deletions(-) diff --git a/src/p2pool_api.cpp b/src/p2pool_api.cpp index 82e71e3..9935517 100644 --- a/src/p2pool_api.cpp +++ b/src/p2pool_api.cpp @@ -137,8 +137,14 @@ void p2pool_api::dump_to_file() data = std::move(m_dumpData); } + char buf[log::Stream::BUF_SIZE + 1]; + buf[0] = '\0'; + for (auto& it : data) { - DumpFileWork* work = new DumpFileWork{ {}, 0, it.first, it.first + std::to_string(m_counter), std::move(it.second) }; + log::Stream s(buf); + s << it.first << m_counter << '\0'; + + DumpFileWork* work = new DumpFileWork{ {}, 0, it.first, buf, std::move(it.second) }; work->req.data = work; ++m_counter; diff --git a/src/params.cpp b/src/params.cpp index ea9a0ee..e9f22a2 100644 --- a/src/params.cpp +++ b/src/params.cpp @@ -250,14 +250,17 @@ bool Params::Host::init_display_name(const Params& p) } } - const bool changed = (m_address != m_displayName); - const std::string rpc_port = ':' + std::to_string(m_rpcPort); - const std::string zmq_port = ":ZMQ:" + std::to_string(m_zmqPort); - m_displayName += rpc_port + zmq_port; - if (changed) { - m_displayName += " (" + m_address + ')'; + char buf[log::Stream::BUF_SIZE + 1]; + buf[0] = '\0'; + log::Stream s(buf); + + s << m_displayName << ':' << m_rpcPort << ":ZMQ:" << m_zmqPort; + if (m_address != m_displayName) { + s << " (" << m_address << ')'; } + m_displayName.assign(buf, s.m_pos); + return true; } diff --git a/src/util.cpp b/src/util.cpp index 821a759..6eab49e 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -726,23 +726,26 @@ int add_portmapping(int external_port, int internal_port) LOGINFO(1, "UPnP: WAN IP address " << log::Gray() << static_cast(ext_addr)); } - const std::string eport = std::to_string(external_port); - const std::string iport = std::to_string(internal_port); + char eport[16] = {}; + do { log::Stream s(eport); s << external_port; } while (0); - result = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, eport.c_str(), iport.c_str(), local_addr, "P2Pool", "TCP", nullptr, nullptr); + char iport[16] = {}; + do { log::Stream s(iport); s << internal_port; } while (0); + + result = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, eport, iport, local_addr, "P2Pool", "TCP", nullptr, nullptr); // ConflictInMappingEntry: try to delete the old record and then add the new one again if (result == 718) { LOGWARN(1, "UPNP_AddPortMapping failed: ConflictInMappingEntry"); - result = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, eport.c_str(), "TCP", nullptr); + result = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, eport, "TCP", nullptr); if (result) { LOGWARN(1, "UPNP_DeletePortMapping returned error " << result); return 0; } else { LOGINFO(1, "UPnP: Deleted mapping for external port " << external_port); - result = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, eport.c_str(), iport.c_str(), local_addr, "P2Pool", "TCP", nullptr, nullptr); + result = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, eport, iport, local_addr, "P2Pool", "TCP", nullptr, nullptr); } } @@ -776,8 +779,10 @@ void remove_portmapping(int external_port) return; } - const std::string eport = std::to_string(external_port); - result = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, eport.c_str(), "TCP", nullptr); + char eport[16] = {}; + do { log::Stream s(eport); s << external_port; } while (0); + + result = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, eport, "TCP", nullptr); if (result) { LOGWARN(1, "UPNP_DeletePortMapping returned error " << result); } diff --git a/src/zmq_reader.cpp b/src/zmq_reader.cpp index 1a89c4b..336e2e7 100644 --- a/src/zmq_reader.cpp +++ b/src/zmq_reader.cpp @@ -26,7 +26,6 @@ namespace p2pool { ZMQReader::ZMQReader(const std::string& address, uint32_t zmq_port, const std::string& proxy, MinerCallbackHandler* handler) : m_monitor(nullptr) - , m_address(address) , m_zmqPort(zmq_port) , m_proxy(proxy) , m_handler(handler) @@ -39,12 +38,15 @@ ZMQReader::ZMQReader(const std::string& address, uint32_t zmq_port, const std::s m_proxy.clear(); } + char addr_buf[log::Stream::BUF_SIZE + 1]; + addr_buf[0] = '\0'; + std::random_device rd; for (uint32_t port = 49152 + (rd() % 16384), i = 0; i < 100; ++i, port = (port < 65535) ? (port + 1) : 49152) { try { - char addr[32]; - snprintf(addr, sizeof(addr), "tcp://127.0.0.1:%u", port); - m_publisher.bind(addr); + log::Stream s(addr_buf); + s << "tcp://127.0.0.1:" << port << '\0'; + m_publisher.bind(addr_buf); m_publisherPort = static_cast(port); break; } @@ -62,7 +64,7 @@ ZMQReader::ZMQReader(const std::string& address, uint32_t zmq_port, const std::s m_subscriber.set(zmq::sockopt::connect_timeout, 1000); - std::string addr = "tcp://127.0.0.1:" + std::to_string(m_publisherPort); + std::string addr(addr_buf); if (!connect(addr, false)) { throw zmq::error_t(EFSM); } @@ -71,11 +73,14 @@ ZMQReader::ZMQReader(const std::string& address, uint32_t zmq_port, const std::s m_subscriber.set(zmq::sockopt::socks_proxy, zmq::const_buffer(m_proxy.c_str(), m_proxy.length())); } - addr = "tcp://" + m_address + ':' + std::to_string(m_zmqPort); + log::Stream s(addr_buf); + s << "tcp://" << address << ':' << m_zmqPort << '\0'; + addr.assign(addr_buf); + if (!connect(addr, true)) { throw zmq::error_t(EFSM); } - m_address = addr; + m_address = std::move(addr); m_subscriber.set(zmq::sockopt::socks_proxy, zmq::const_buffer());