upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src/net.cpp
diff options
context:
space:
mode:
authorbitflash-maintainer <noreply@bitflash.invalid>2026-09-01 17:14:12 +0000
committerbitflash-maintainer <noreply@bitflash.invalid>2026-09-01 17:14:12 +0000
commitb4f0bc693ef7175702f82bcb2110b627922e8cbd (patch)
tree73435feb1a076dfba94d8143d7d7b7784908c82f /src/net.cpp
parenta1d867ecbcfc9e218408d0a11863a450243a01f9 (diff)
parent6aa3dade77632f13189d2a3ef29897f29a5f9572 (diff)
Merge upstream v1.2.20 into the fork
Merges upstream tag v1.2.20 (6aa3dade) into our 1.2.19+sec tree. The merge base is bc3de30's descendant 9e39a50 -- upstream's own v1.2.19 -- so this is an ordinary three-way merge, not a replay. Five conflict blocks in four files, all resolved below. No consensus change. CheckBlock, ConnectBlock, DisconnectBlock, ConnectInputs, AcceptBlock, AcceptTransaction, GetNextWorkRequired and GetBlockValue hash identical to v1.2.19; script.cpp and script.h are byte-identical on both sides. main.cpp is +3 lines and main.h +2, all wallet-backend plumbing. rpc.cpp is untouched, so the payout ledger arrives unchanged. Makefile, VERSION. OURS, renumbered. 1.2.20+sec, for the same reason 1.2.19 carried +sec: this tree is not the upstream release of that number and the string names every release artifact. Makefile, AppImage recipe. OURS for the AppDir path, THEIRS for the bundled library. Upstream's hunk reverts the icon paths to a hardcoded /tmp/bitflash.AppDir, which is the local-user pre-placement hazard the fork moved out of /tmp in the first place; taking their side wholesale would have reintroduced it silently, inside a conflict about something else. The AppDir stays $(APPDIR), and libsqlite3.so.0 joins the bundled list, which the new backend genuinely needs. src/Makefile, src/makefile.mingw, HEADERS. BOTH. Ours drops market.h, theirs adds wallet_sqlite.h; the resolution does both. NODE_OBJS auto-merged correctly in both files -- obj/wallet_sqlite.o present, obj/market.o still gone -- and was verified rather than assumed, because that line has trapped this fork before. src/selftest.cpp, known-tests list. BOTH, union. Upstream adds eight wallet-storage tests, we keep payout-ledger. The dispatch chain itself auto-merged and still routes payout-ledger to RunPayoutLedgerSelfTest. Hardening verified intact after merge: the TLS 1.2 floor in nostr.cpp, the /rvrelay pin, opt-in managed Tor, strict sig3-on-onion descriptor verification, and the marketplace removal. Upstream shipped no build logs or __pycache__ this time; the three added files are docs/storage.md and src/wallet_sqlite.{cpp,h}. The SQLite backend this release introduces is NOT enabled here. An existing wallet.dat resolves to Berkeley DB on every branch of the new selection logic, and the conversion wizard is GUI-only and not compiled into the headless node. The review findings that gate ever turning it on -- the non-atomic backend marker, the connection-wide WriteHDMaster transaction, and the encrypt-swap crash window -- are recorded on the tracker, not fixed here.
Diffstat (limited to 'src/net.cpp')
-rw-r--r--src/net.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/net.cpp b/src/net.cpp
index fed6123..4741f09 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -1560,12 +1560,41 @@ void ThreadSocketHandler2(void* parg)
1560 unsigned int nNodes = 0; 1560 unsigned int nNodes = 0;
1561 CRITICAL_BLOCK(cs_vNodes) 1561 CRITICAL_BLOCK(cs_vNodes)
1562 nNodes = (unsigned int)vNodes.size(); 1562 nNodes = (unsigned int)vNodes.size();
1563 // Also count how many connections this one address already
1564 // holds. A single IP that keeps opening sockets -- a broken
1565 // node or a deliberate connection-exhaustion flood -- must not
1566 // be able to take the whole table, which is what starved the
1567 // relays.
1568 //
1569 // Loopback is exempt. Onion peers reach a managed-Tor node
1570 // through its local hidden-service listener, so every one of
1571 // them accepts as 127.0.0.1; capping loopback would cap all
1572 // inbound onion peers as a single group, which is the opposite
1573 // of where the network is headed. The global MAX_CONNECTIONS
1574 // still bounds the total, and the direct-IP flood this defends
1575 // against never arrives over loopback. (Per-onion-identity
1576 // limiting, once a peer's identity is known past accept(), is
1577 // the right tool for onion and is left for later.)
1578 bool fLoopback = (addr.GetByte(3) == 127);
1579 unsigned int nFromThisIP = 0;
1580 if (!fLoopback)
1581 CRITICAL_BLOCK(cs_vNodes)
1582 for (vector<CNode*>::iterator it = vNodes.begin(); it != vNodes.end(); ++it)
1583 if ((*it)->addr.ip == addr.ip)
1584 nFromThisIP++;
1585
1563 if (nNodes >= MAX_CONNECTIONS) 1586 if (nNodes >= MAX_CONNECTIONS)
1564 { 1587 {
1565 LogPrint("net", "refusing connection from %s, already at %u\n", 1588 LogPrint("net", "refusing connection from %s, already at %u\n",
1566 addr.ToString().c_str(), nNodes); 1589 addr.ToString().c_str(), nNodes);
1567 BtfCloseSocket(hSocket); 1590 BtfCloseSocket(hSocket);
1568 } 1591 }
1592 else if (!fLoopback && nFromThisIP >= MAX_CONNECTIONS_PER_IP)
1593 {
1594 LogPrint("net", "refusing connection from %s, already %u from that address\n",
1595 addr.ToString().c_str(), nFromThisIP);
1596 BtfCloseSocket(hSocket);
1597 }
1569 else 1598 else
1570 { 1599 {
1571 LogPrint("net", "accepted connection from %s\n", addr.ToString().c_str()); 1600 LogPrint("net", "accepted connection from %s\n", addr.ToString().c_str());