From 65a9574e52aa70f41e6c3814918b9f39a7271604 Mon Sep 17 00:00:00 2001 From: SChernykh Date: Fri, 28 Oct 2022 14:06:26 +0200 Subject: [PATCH] Added `--p2p-external-port` command line parameter --- docs/COMMAND_LINE.MD | 1 + src/main.cpp | 1 + src/p2p_server.cpp | 6 ++++++ src/p2p_server.h | 2 ++ src/params.cpp | 9 +++++++-- src/params.h | 1 + src/tcp_server.h | 2 +- 7 files changed, 19 insertions(+), 3 deletions(-) diff --git a/docs/COMMAND_LINE.MD b/docs/COMMAND_LINE.MD index f7e2b4f..e358e50 100644 --- a/docs/COMMAND_LINE.MD +++ b/docs/COMMAND_LINE.MD @@ -25,6 +25,7 @@ --rpc-login Specify username[:password] required for Monero RPC server --socks5 Specify IP:port of a SOCKS5 proxy to use for outgoing connections --no-dns disable DNS queries, use only IP addresses to connect to peers (seed node DNS will be unavailable too) +--p2p-external-port port number that your router uses for mapping to your local p2p port. Use it if you are behind a NAT and still want to accept incoming connections ``` ### Example command line diff --git a/src/main.cpp b/src/main.cpp index 5409967..3e50ebf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -50,6 +50,7 @@ void p2pool_usage() "--rpc-login Specify username[:password] required for Monero RPC server\n" "--socks5 Specify IP:port of a SOCKS5 proxy to use for outgoing connections\n" "--no-dns disable DNS queries, use only IP addresses to connect to peers (seed node DNS will be unavailable too)\n" + "--p2p-external-port port number that your router uses for mapping to your local p2p port. Use it if you are behind a NAT and still want to accept incoming connections\n" "--help Show this help message\n\n" "Example command line:\n\n" "%s --host 127.0.0.1 --rpc-port 18081 --zmq-port 18083 --wallet YOUR_WALLET_ADDRESS --stratum 0.0.0.0:%d --p2p 0.0.0.0:%d\n\n", diff --git a/src/p2p_server.cpp b/src/p2p_server.cpp index aec27ad..222ab2c 100644 --- a/src/p2p_server.cpp +++ b/src/p2p_server.cpp @@ -933,6 +933,12 @@ void P2PServer::show_peers() LOGINFO(0, "Total: " << n << " peers"); } +int P2PServer::listen_port() const +{ + const Params& params = m_pool->params(); + return params.m_p2pExternalPort ? params.m_p2pExternalPort : m_listenPort; +} + int P2PServer::deserialize_block(const uint8_t* buf, uint32_t size) { int result; diff --git a/src/p2p_server.h b/src/p2p_server.h index 3915cfe..73dfb17 100644 --- a/src/p2p_server.h +++ b/src/p2p_server.h @@ -138,6 +138,8 @@ public: void show_peers_async(); size_t peer_list_size() const { MutexLock lock(m_peerListLock); return m_peerList.size(); } + int listen_port() const override; + uint32_t max_outgoing_peers() const { return m_maxOutgoingPeers; } uint32_t max_incoming_peers() const { return m_maxIncomingPeers; } diff --git a/src/params.cpp b/src/params.cpp index fc09195..8fa696e 100644 --- a/src/params.cpp +++ b/src/params.cpp @@ -35,12 +35,12 @@ Params::Params(int argc, char* argv[]) } if ((strcmp(argv[i], "--rpc-port") == 0) && (i + 1 < argc)) { - m_rpcPort = strtoul(argv[++i], nullptr, 10); + m_rpcPort = std::min(std::max(strtoul(argv[++i], nullptr, 10), 1UL), 65535UL); ok = true; } if ((strcmp(argv[i], "--zmq-port") == 0) && (i + 1 < argc)) { - m_zmqPort = strtoul(argv[++i], nullptr, 10); + m_zmqPort = std::min(std::max(strtoul(argv[++i], nullptr, 10), 1UL), 65535UL); ok = true; } @@ -146,6 +146,11 @@ Params::Params(int argc, char* argv[]) ok = true; } + if ((strcmp(argv[i], "--p2p-external-port") == 0) && (i + 1 < argc)) { + m_p2pExternalPort = std::min(std::max(strtoul(argv[++i], nullptr, 10), 1UL), 65535UL); + ok = true; + } + if (!ok) { fprintf(stderr, "Unknown command line parameter %s\n\n", argv[i]); p2pool_usage(); diff --git a/src/params.h b/src/params.h index e5c0934..163fd6b 100644 --- a/src/params.h +++ b/src/params.h @@ -52,6 +52,7 @@ struct Params std::string m_rpcLogin; std::string m_socks5Proxy; bool m_dns = true; + uint32_t m_p2pExternalPort = 0; }; } // namespace p2pool diff --git a/src/tcp_server.h b/src/tcp_server.h index 96bf876..856323d 100644 --- a/src/tcp_server.h +++ b/src/tcp_server.h @@ -42,7 +42,7 @@ public: uv_loop_t* get_loop() { return &m_loop; } - int listen_port() const { return m_listenPort; } + virtual int listen_port() const { return m_listenPort; } bool connect_to_peer(bool is_v6, const raw_ip& ip, int port); virtual void on_connect_failed(bool /*is_v6*/, const raw_ip& /*ip*/, int /*port*/) {}