changeset 2418:e8b06344cd5b draft

Added -externalip and -discover -externalip=<ip> can be used to explicitly set the public IP address of your node. -discover=0 can be used to disable the automatic public IP discovery system.
author Pieter Wuille <pieter.wuille@gmail.com>
date Sun, 19 Feb 2012 20:44:35 +0100
parents fa61c1977722
children ba6ae7e6cd33
files src/init.cpp src/net.cpp src/net.h
diffstat 3 files changed, 47 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -187,6 +187,8 @@
             "  -addnode=<ip>    \t  "   + _("Add a node to connect to and attempt to keep the connection open") + "\n" +
             "  -connect=<ip>    \t\t  " + _("Connect only to the specified node") + "\n" +
             "  -seednode=<ip>   \t\t  " + _("Connect to a node to retrieve peer addresses, and disconnect") + "\n" +
+            "  -externalip=<ip> \t  "   + _("Specify your own public address") + "\n" +
+            "  -discover        \t  "   + _("Try to discover public IP address (default: 1)") + "\n" +
             "  -irc             \t  "   + _("Find peers using internet relay chat (default: 0)") + "\n" +
             "  -listen          \t  "   + _("Accept connections from outside (default: 1)") + "\n" +
 #ifdef QT_GUI
@@ -519,6 +521,9 @@
         }
     }
 
+    if (mapArgs.count("-connect"))
+        SoftSetBoolArg("-dnsseed", false);
+ 
     bool fTor = (fUseProxy && addrProxy.GetPort() == 9050);
     if (fTor)
     {
@@ -528,6 +533,7 @@
         SoftSetBoolArg("-irc", false);
         SoftSetBoolArg("-proxydns", true);
         SoftSetBoolArg("-upnp", false);
+        SoftSetBoolArg("-discover", false);
     }
 
     fNameLookup = GetBoolArg("-dns");
@@ -556,6 +562,12 @@
         }
     }
 
+    if (mapArgs.count("-externalip"))
+    {
+        BOOST_FOREACH(string strAddr, mapMultiArgs["-externalip"])
+            AddLocal(CNetAddr(strAddr, fNameLookup), LOCAL_MANUAL);
+    }
+
     if (mapArgs.count("-paytxfee"))
     {
         if (!ParseMoney(mapArgs["-paytxfee"], nTransactionFee))
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -973,19 +973,21 @@
     r = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
     if (r == 1)
     {
-        char externalIPAddress[40];
-        r = UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIPAddress);
-        if(r != UPNPCOMMAND_SUCCESS)
-            printf("UPnP: GetExternalIPAddress() returned %d\n", r);
-        else
-        {
-            if(externalIPAddress[0])
+        if (GetBoolArg("-discover", true)) {
+            char externalIPAddress[40];
+            r = UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIPAddress);
+            if(r != UPNPCOMMAND_SUCCESS)
+                printf("UPnP: GetExternalIPAddress() returned %d\n", r);
+            else
             {
-                printf("UPnP: ExternalIPAddress = %s\n", externalIPAddress);
-                AddLocal(CNetAddr(externalIPAddress), LOCAL_UPNP);
+                if(externalIPAddress[0])
+                {
+                    printf("UPnP: ExternalIPAddress = %s\n", externalIPAddress);
+                    AddLocal(CNetAddr(externalIPAddress), LOCAL_UPNP);
+                }
+                else
+                    printf("UPnP: GetExternalIPAddress failed.\n");
             }
-            else
-                printf("UPnP: GetExternalIPAddress failed.\n");
         }
 
         string strDesc = "Bitcoin " + FormatFullVersion();
@@ -1695,18 +1697,10 @@
     return true;
 }
 
-void StartNode(void* parg)
+void static Discover()
 {
-#ifdef USE_UPNP
-#if USE_UPNP
-    fUseUPnP = GetBoolArg("-upnp", true);
-#else
-    fUseUPnP = GetBoolArg("-upnp", false);
-#endif
-#endif
-
-    if (pnodeLocalHost == NULL)
-        pnodeLocalHost = new CNode(INVALID_SOCKET, CAddress(CService("127.0.0.1", 0), nLocalServices));
+    if (!GetBoolArg("-discover", true))
+        return;
 
 #ifdef WIN32
     // Get local host ip
@@ -1764,6 +1758,22 @@
     {
         CreateThread(ThreadGetMyExternalIP, NULL);
     }
+}
+
+void StartNode(void* parg)
+{
+#ifdef USE_UPNP
+#if USE_UPNP
+    fUseUPnP = GetBoolArg("-upnp", true);
+#else
+    fUseUPnP = GetBoolArg("-upnp", false);
+#endif
+#endif
+
+    if (pnodeLocalHost == NULL)
+        pnodeLocalHost = new CNode(INVALID_SOCKET, CAddress(CService("127.0.0.1", 0), nLocalServices));
+
+    Discover();
 
     //
     // Start threads
--- a/src/net.h
+++ b/src/net.h
@@ -49,6 +49,9 @@
     LOCAL_UPNP,
     LOCAL_IRC,
     LOCAL_HTTP,
+    LOCAL_MANUAL,
+
+    LOCAL_MAX
 };
 
 bool AddLocal(const CNetAddr& addr, int nScore = LOCAL_NONE);