diff options
author | Vasil Dimov <vd@FreeBSD.org> | 2020-10-18 14:45:35 +0200 |
---|---|---|
committer | Vasil Dimov <vd@FreeBSD.org> | 2022-03-02 15:42:37 +0100 |
commit | 0cfc0cd32239d3c08d2121e028b297022450b320 (patch) | |
tree | 5f385c8afa2d2efc9435579e3b5a3b5651e1c7c5 /src/net_processing.cpp | |
parent | f98cdcb3574ee661223e1a09e1762b2cc85fab2f (diff) | |
download | bitcoin-0cfc0cd32239d3c08d2121e028b297022450b320.tar.xz |
net: fix GetListenPort() to derive the proper port
`GetListenPort()` uses a simple logic: "if `-port=P` is given, then we
must be listening on `P`, otherwise we must be listening on `8333`".
This is however not true if `-bind=` has been provided with `:port` part
or if `-whitebind=` has been provided. Thus, extend `GetListenPort()` to
return the port from `-bind=` or `-whitebind=`, if any.
Fixes https://github.com/bitcoin/bitcoin/issues/20184 (cases 1. 2. 3. 5.)
Diffstat (limited to 'src/net_processing.cpp')
-rw-r--r-- | src/net_processing.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/net_processing.cpp b/src/net_processing.cpp index f05b4fd8e2..aee1e4c30c 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -2711,6 +2711,10 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, LogPrint(BCLog::NET, "ProcessMessages: advertising address %s\n", addr.ToString()); PushAddress(*peer, addr, insecure_rand); } else if (IsPeerAddrLocalGood(&pfrom)) { + // Override just the address with whatever the peer sees us as. + // Leave the port in addr as it was returned by GetLocalAddress() + // above, as this is an outbound connection and the peer cannot + // observe our listening port. addr.SetIP(addrMe); LogPrint(BCLog::NET, "ProcessMessages: advertising address %s\n", addr.ToString()); PushAddress(*peer, addr, insecure_rand); |