Skip to content

Commit 7ecdcd9

Browse files
committed
Merge pull request #6307
1c043d5 fix lock issue for QT node diconnect and RPC disconnectnode (Jonas Schnelli) 932687b setban: add IPv6 tests (Jonas Schnelli) 62909f6 fix missing lock in CNode::ClearBanned() (Jonas Schnelli)
2 parents 529a44c + 1c043d5 commit 7ecdcd9

File tree

4 files changed

+31
-3
lines changed

4 files changed

+31
-3
lines changed

Diff for: src/net.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,7 @@ CCriticalSection CNode::cs_setBanned;
448448

449449
void CNode::ClearBanned()
450450
{
451+
LOCK(cs_setBanned);
451452
setBanned.clear();
452453
}
453454

Diff for: src/qt/rpcconsole.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -687,7 +687,7 @@ void RPCConsole::disconnectSelectedNode()
687687
QString strNode = GUIUtil::getEntryData(ui->peerWidget, 0, PeerTableModel::Address);
688688
// Find the node, disconnect it and clear the selected node
689689
if (CNode *bannedNode = FindNode(strNode.toStdString())) {
690-
bannedNode->CloseSocketDisconnect();
690+
bannedNode->fDisconnect = true;
691691
clearSelectedNode();
692692
}
693693
}

Diff for: src/rpcnet.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ UniValue disconnectnode(const UniValue& params, bool fHelp)
231231
if (pNode == NULL)
232232
throw JSONRPCError(RPC_CLIENT_NODE_NOT_CONNECTED, "Node not found in connected nodes");
233233

234-
pNode->CloseSocketDisconnect();
234+
pNode->fDisconnect = true;
235235

236236
return NullUniValue;
237237
}
@@ -519,7 +519,7 @@ UniValue setban(const UniValue& params, bool fHelp)
519519

520520
//disconnect possible nodes
521521
while(CNode *bannedNode = (isSubnet ? FindNode(subNet) : FindNode(netAddr)))
522-
bannedNode->CloseSocketDisconnect();
522+
bannedNode->fDisconnect = true;
523523
}
524524
else if(strCommand == "remove")
525525
{

Diff for: src/test/rpc_tests.cpp

+27
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,33 @@ BOOST_AUTO_TEST_CASE(rpc_ban)
231231
BOOST_CHECK_NO_THROW(r = CallRPC(string("listbanned")));
232232
ar = r.get_array();
233233
BOOST_CHECK_EQUAL(ar.size(), 0);
234+
235+
236+
BOOST_CHECK_THROW(r = CallRPC(string("setban test add")), runtime_error); //invalid IP
237+
238+
//IPv6 tests
239+
BOOST_CHECK_NO_THROW(r = CallRPC(string("setban FE80:0000:0000:0000:0202:B3FF:FE1E:8329 add")));
240+
BOOST_CHECK_NO_THROW(r = CallRPC(string("listbanned")));
241+
ar = r.get_array();
242+
o1 = ar[0].get_obj();
243+
adr = find_value(o1, "address");
244+
BOOST_CHECK_EQUAL(adr.get_str(), "fe80::202:b3ff:fe1e:8329/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
245+
246+
BOOST_CHECK_NO_THROW(CallRPC(string("clearbanned")));
247+
BOOST_CHECK_NO_THROW(r = CallRPC(string("setban 2001:db8::/30 add")));
248+
BOOST_CHECK_NO_THROW(r = CallRPC(string("listbanned")));
249+
ar = r.get_array();
250+
o1 = ar[0].get_obj();
251+
adr = find_value(o1, "address");
252+
BOOST_CHECK_EQUAL(adr.get_str(), "2001:db8::/ffff:fffc:0:0:0:0:0:0");
253+
254+
BOOST_CHECK_NO_THROW(CallRPC(string("clearbanned")));
255+
BOOST_CHECK_NO_THROW(r = CallRPC(string("setban 2001:4d48:ac57:400:cacf:e9ff:fe1d:9c63/128 add")));
256+
BOOST_CHECK_NO_THROW(r = CallRPC(string("listbanned")));
257+
ar = r.get_array();
258+
o1 = ar[0].get_obj();
259+
adr = find_value(o1, "address");
260+
BOOST_CHECK_EQUAL(adr.get_str(), "2001:4d48:ac57:400:cacf:e9ff:fe1d:9c63/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
234261
}
235262

236263
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)