From 19b6958cfd5c5207ffe8259ef48ebbd24ca89725 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Sun, 19 Feb 2012 20:44:35 +0100 Subject: [PATCH] Added -externalip and -discover -externalip= 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. --- src/init.cpp | 12 ++++++++++++ src/net.cpp | 54 +++++++++++++++++++++++++++++++--------------------- src/net.h | 3 +++ 3 files changed, 47 insertions(+), 22 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index f9ea998cee9..46964289727 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -187,6 +187,8 @@ bool AppInit2(int argc, char* argv[]) " -addnode= \t " + _("Add a node to connect to and attempt to keep the connection open") + "\n" + " -connect= \t\t " + _("Connect only to the specified node") + "\n" + " -seednode= \t\t " + _("Connect to a node to retrieve peer addresses, and disconnect") + "\n" + + " -externalip= \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 @@ bool AppInit2(int argc, char* argv[]) } } + if (mapArgs.count("-connect")) + SoftSetBoolArg("-dnsseed", false); + bool fTor = (fUseProxy && addrProxy.GetPort() == 9050); if (fTor) { @@ -528,6 +533,7 @@ bool AppInit2(int argc, char* argv[]) SoftSetBoolArg("-irc", false); SoftSetBoolArg("-proxydns", true); SoftSetBoolArg("-upnp", false); + SoftSetBoolArg("-discover", false); } fNameLookup = GetBoolArg("-dns"); @@ -556,6 +562,12 @@ bool AppInit2(int argc, char* argv[]) } } + 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)) diff --git a/src/net.cpp b/src/net.cpp index 0a78bc445f8..c626e49b1bc 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -973,19 +973,21 @@ void ThreadMapPort2(void* parg) 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 @@ bool BindListenPort(string& strError) 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 @@ void StartNode(void* parg) { 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 diff --git a/src/net.h b/src/net.h index 239971e2cae..a00dd1b8cc0 100644 --- a/src/net.h +++ b/src/net.h @@ -49,6 +49,9 @@ enum LOCAL_UPNP, LOCAL_IRC, LOCAL_HTTP, + LOCAL_MANUAL, + + LOCAL_MAX }; bool AddLocal(const CNetAddr& addr, int nScore = LOCAL_NONE);