changeset 2555:d06cafd08674 draft

-onlynet instead of -blocknet
author Pieter Wuille <pieter.wuille@gmail.com>
date Mon, 14 May 2012 17:15:58 +0200
parents e12a52335289
children 9adbcc15b7f8
files src/init.cpp src/net.cpp src/net.h
diffstat 3 files changed, 21 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -204,7 +204,7 @@
         "  -connect=<ip>          " + _("Connect only to the specified node") + "\n" +
         "  -seednode=<ip>         " + _("Connect to a node to retrieve peer addresses, and disconnect") + "\n" +
         "  -externalip=<ip>       " + _("Specify your own public address") + "\n" +
-        "  -blocknet=<net>        " + _("Do not connect to addresses in network <net> (IPv4 or IPv6)") + "\n" +
+        "  -onlynet=<net>         " + _("Only connect to nodes in network <net> (IPv4 or IPv6)") + "\n" +
         "  -discover              " + _("Try to discover public IP address (default: 1)") + "\n" +
         "  -irc                   " + _("Find peers using internet relay chat (default: 0)") + "\n" +
         "  -listen                " + _("Accept connections from outside (default: 1)") + "\n" +
@@ -572,12 +572,18 @@
         SoftSetBoolArg("-discover", false);
     }
 
-    if (mapArgs.count("-blocknet")) {
-        BOOST_FOREACH(std::string snet, mapMultiArgs["-blocknet"]) {
+    if (mapArgs.count("-onlynet")) {
+        std::set<enum Network> nets;
+        BOOST_FOREACH(std::string snet, mapMultiArgs["-onlynet"]) {
             enum Network net = ParseNetwork(snet);
             if (net == NET_UNROUTABLE)
-                return InitError(strprintf(_("Unknown network specified in -blocknet: '%s'"), snet.c_str()));
-            SetLimited(net);
+                return InitError(strprintf(_("Unknown network specified in -onlynet: '%s'"), snet.c_str()));
+            nets.insert(net);
+        }
+        for (int n = 0; n < NET_MAX; n++) {
+            enum Network net = (enum Network)n;
+            if (!nets.count(net))
+                SetLimited(net);
         }
     }
 
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -245,14 +245,21 @@
 /** Make a particular network entirely off-limits (no automatic connects to it) */
 void SetLimited(enum Network net, bool fLimited)
 {
+    if (net == NET_UNROUTABLE)
+        return;
     LOCK(cs_mapLocalHost);
     vfLimited[net] = fLimited;
 }
 
-bool IsLimited(const CNetAddr& addr)
+bool IsLimited(enum Network net)
 {
     LOCK(cs_mapLocalHost);
-    return vfLimited[addr.GetNetwork()];
+    return vfLimited[net];
+}
+
+bool IsLimited(const CNetAddr &addr)
+{
+    return IsLimited(addr.GetNetwork());
 }
 
 /** vote for a local address */
--- a/src/net.h
+++ b/src/net.h
@@ -57,6 +57,7 @@
 };
 
 void SetLimited(enum Network net, bool fLimited = true);
+bool IsLimited(enum Network net);
 bool IsLimited(const CNetAddr& addr);
 bool AddLocal(const CService& addr, int nScore = LOCAL_NONE);
 bool AddLocal(const CNetAddr& addr, int nScore = LOCAL_NONE);