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.
This commit is contained in:
Pieter Wuille 2012-02-19 20:44:35 +01:00
parent 39857190de
commit 19b6958cfd
3 changed files with 48 additions and 23 deletions

View File

@ -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" + " -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" + " -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" + " -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" + " -irc \t " + _("Find peers using internet relay chat (default: 0)") + "\n" +
" -listen \t " + _("Accept connections from outside (default: 1)") + "\n" + " -listen \t " + _("Accept connections from outside (default: 1)") + "\n" +
#ifdef QT_GUI #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); bool fTor = (fUseProxy && addrProxy.GetPort() == 9050);
if (fTor) if (fTor)
{ {
@ -528,6 +533,7 @@ bool AppInit2(int argc, char* argv[])
SoftSetBoolArg("-irc", false); SoftSetBoolArg("-irc", false);
SoftSetBoolArg("-proxydns", true); SoftSetBoolArg("-proxydns", true);
SoftSetBoolArg("-upnp", false); SoftSetBoolArg("-upnp", false);
SoftSetBoolArg("-discover", false);
} }
fNameLookup = GetBoolArg("-dns"); 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 (mapArgs.count("-paytxfee"))
{ {
if (!ParseMoney(mapArgs["-paytxfee"], nTransactionFee)) if (!ParseMoney(mapArgs["-paytxfee"], nTransactionFee))

View File

@ -973,19 +973,21 @@ void ThreadMapPort2(void* parg)
r = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr)); r = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
if (r == 1) if (r == 1)
{ {
char externalIPAddress[40]; if (GetBoolArg("-discover", true)) {
r = UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIPAddress); char externalIPAddress[40];
if(r != UPNPCOMMAND_SUCCESS) r = UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIPAddress);
printf("UPnP: GetExternalIPAddress() returned %d\n", r); if(r != UPNPCOMMAND_SUCCESS)
else printf("UPnP: GetExternalIPAddress() returned %d\n", r);
{
if(externalIPAddress[0])
{
printf("UPnP: ExternalIPAddress = %s\n", externalIPAddress);
AddLocal(CNetAddr(externalIPAddress), LOCAL_UPNP);
}
else else
printf("UPnP: GetExternalIPAddress failed.\n"); {
if(externalIPAddress[0])
{
printf("UPnP: ExternalIPAddress = %s\n", externalIPAddress);
AddLocal(CNetAddr(externalIPAddress), LOCAL_UPNP);
}
else
printf("UPnP: GetExternalIPAddress failed.\n");
}
} }
string strDesc = "Bitcoin " + FormatFullVersion(); string strDesc = "Bitcoin " + FormatFullVersion();
@ -1695,18 +1697,10 @@ bool BindListenPort(string& strError)
return true; return true;
} }
void StartNode(void* parg) void static Discover()
{ {
#ifdef USE_UPNP if (!GetBoolArg("-discover", true))
#if USE_UPNP return;
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));
#ifdef WIN32 #ifdef WIN32
// Get local host ip // Get local host ip
@ -1764,6 +1758,22 @@ void StartNode(void* parg)
{ {
CreateThread(ThreadGetMyExternalIP, NULL); 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 // Start threads

View File

@ -49,6 +49,9 @@ enum
LOCAL_UPNP, LOCAL_UPNP,
LOCAL_IRC, LOCAL_IRC,
LOCAL_HTTP, LOCAL_HTTP,
LOCAL_MANUAL,
LOCAL_MAX
}; };
bool AddLocal(const CNetAddr& addr, int nScore = LOCAL_NONE); bool AddLocal(const CNetAddr& addr, int nScore = LOCAL_NONE);