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);
}
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;

View File

@ -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;
}

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));
}
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);
}

View File

@ -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<uint16_t>(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());