diff options
author | Pieter Wuille <pieter.wuille@gmail.com> | 2012-02-19 20:44:35 +0100 |
---|---|---|
committer | Pieter Wuille <pieter.wuille@gmail.com> | 2012-05-04 16:12:23 +0200 |
commit | 19b6958cfd5c5207ffe8259ef48ebbd24ca89725 (patch) | |
tree | 454edd591d114938e4f7d19b972bde3b00e609c1 /src | |
parent | 39857190dee3ed296112cfcfd79b0a375143b6c6 (diff) |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/init.cpp | 12 | ||||
-rw-r--r-- | src/net.cpp | 54 | ||||
-rw-r--r-- | src/net.h | 3 |
3 files changed, 47 insertions, 22 deletions
diff --git a/src/init.cpp b/src/init.cpp index f9ea998cee..4696428972 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -187,6 +187,8 @@ bool AppInit2(int argc, char* argv[]) " -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 @@ 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 0a78bc445f..c626e49b1b 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 @@ -49,6 +49,9 @@ enum LOCAL_UPNP, LOCAL_IRC, LOCAL_HTTP, + LOCAL_MANUAL, + + LOCAL_MAX }; bool AddLocal(const CNetAddr& addr, int nScore = LOCAL_NONE); |