Refactored string conversions

Use `log::Stream` everywhere
pull/271/head
SChernykh 2023-06-27 14:29:19 +02:00
parent a32cc9f0f5
commit 3554adf0c1
4 changed files with 40 additions and 21 deletions

View File

@ -137,8 +137,14 @@ void p2pool_api::dump_to_file()
data = std::move(m_dumpData); data = std::move(m_dumpData);
} }
char buf[log::Stream::BUF_SIZE + 1];
buf[0] = '\0';
for (auto& it : data) { 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; work->req.data = work;
++m_counter; ++m_counter;

View File

@ -250,14 +250,17 @@ bool Params::Host::init_display_name(const Params& p)
} }
} }
const bool changed = (m_address != m_displayName); char buf[log::Stream::BUF_SIZE + 1];
const std::string rpc_port = ':' + std::to_string(m_rpcPort); buf[0] = '\0';
const std::string zmq_port = ":ZMQ:" + std::to_string(m_zmqPort); log::Stream s(buf);
m_displayName += rpc_port + zmq_port;
if (changed) { s << m_displayName << ':' << m_rpcPort << ":ZMQ:" << m_zmqPort;
m_displayName += " (" + m_address + ')'; if (m_address != m_displayName) {
s << " (" << m_address << ')';
} }
m_displayName.assign(buf, s.m_pos);
return true; return true;
} }

View File

@ -726,23 +726,26 @@ int add_portmapping(int external_port, int internal_port)
LOGINFO(1, "UPnP: WAN IP address " << log::Gray() << static_cast<const char*>(ext_addr)); LOGINFO(1, "UPnP: WAN IP address " << log::Gray() << static_cast<const char*>(ext_addr));
} }
const std::string eport = std::to_string(external_port); char eport[16] = {};
const std::string iport = std::to_string(internal_port); 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 // ConflictInMappingEntry: try to delete the old record and then add the new one again
if (result == 718) { if (result == 718) {
LOGWARN(1, "UPNP_AddPortMapping failed: ConflictInMappingEntry"); 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) { if (result) {
LOGWARN(1, "UPNP_DeletePortMapping returned error " << result); LOGWARN(1, "UPNP_DeletePortMapping returned error " << result);
return 0; return 0;
} }
else { else {
LOGINFO(1, "UPnP: Deleted mapping for external port " << external_port); 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; return;
} }
const std::string eport = std::to_string(external_port); char eport[16] = {};
result = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, eport.c_str(), "TCP", nullptr); do { log::Stream s(eport); s << external_port; } while (0);
result = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, eport, "TCP", nullptr);
if (result) { if (result) {
LOGWARN(1, "UPNP_DeletePortMapping returned error " << result); LOGWARN(1, "UPNP_DeletePortMapping returned error " << result);
} }

View File

@ -26,7 +26,6 @@ namespace p2pool {
ZMQReader::ZMQReader(const std::string& address, uint32_t zmq_port, const std::string& proxy, MinerCallbackHandler* handler) ZMQReader::ZMQReader(const std::string& address, uint32_t zmq_port, const std::string& proxy, MinerCallbackHandler* handler)
: m_monitor(nullptr) : m_monitor(nullptr)
, m_address(address)
, m_zmqPort(zmq_port) , m_zmqPort(zmq_port)
, m_proxy(proxy) , m_proxy(proxy)
, m_handler(handler) , m_handler(handler)
@ -39,12 +38,15 @@ ZMQReader::ZMQReader(const std::string& address, uint32_t zmq_port, const std::s
m_proxy.clear(); m_proxy.clear();
} }
char addr_buf[log::Stream::BUF_SIZE + 1];
addr_buf[0] = '\0';
std::random_device rd; std::random_device rd;
for (uint32_t port = 49152 + (rd() % 16384), i = 0; i < 100; ++i, port = (port < 65535) ? (port + 1) : 49152) { for (uint32_t port = 49152 + (rd() % 16384), i = 0; i < 100; ++i, port = (port < 65535) ? (port + 1) : 49152) {
try { try {
char addr[32]; log::Stream s(addr_buf);
snprintf(addr, sizeof(addr), "tcp://127.0.0.1:%u", port); s << "tcp://127.0.0.1:" << port << '\0';
m_publisher.bind(addr); m_publisher.bind(addr_buf);
m_publisherPort = static_cast<uint16_t>(port); m_publisherPort = static_cast<uint16_t>(port);
break; 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); 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)) { if (!connect(addr, false)) {
throw zmq::error_t(EFSM); 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())); 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)) { if (!connect(addr, true)) {
throw zmq::error_t(EFSM); throw zmq::error_t(EFSM);
} }
m_address = addr; m_address = std::move(addr);
m_subscriber.set(zmq::sockopt::socks_proxy, zmq::const_buffer()); m_subscriber.set(zmq::sockopt::socks_proxy, zmq::const_buffer());