diff options
author | s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b> | 2010-12-15 22:43:51 +0000 |
---|---|---|
committer | s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b> | 2010-12-15 22:43:51 +0000 |
commit | 629e37dde1fa93f6ce31544d1ebb5ee5c19052cb (patch) | |
tree | 4b8e7ae1cc3ed5b07a75a2d11f04660aac442c81 /net.cpp | |
parent | fc73ad644f0b87b91f49b7f6f6b2348f78bdbbf4 (diff) | |
download | bitcoin-629e37dde1fa93f6ce31544d1ebb5ee5c19052cb.tar.xz |
get external ip from irc
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@202 1a98c847-1fd6-4fd8-948a-caf3550aa51b
Diffstat (limited to 'net.cpp')
-rw-r--r-- | net.cpp | 49 |
1 files changed, 37 insertions, 12 deletions
@@ -163,7 +163,7 @@ bool GetMyExternalIP2(const CAddress& addrConnect, const char* pszGet, const cha return error("GetMyExternalIP() : connection closed"); } - +// We now get our external IP from the IRC server first and only use this as a backup bool GetMyExternalIP(unsigned int& ipRet) { CAddress addrConnect; @@ -176,6 +176,10 @@ bool GetMyExternalIP(unsigned int& ipRet) for (int nLookup = 0; nLookup <= 1; nLookup++) for (int nHost = 1; nHost <= 2; nHost++) { + // We should be phasing out our use of sites like these. If we need + // replacements, we should ask for volunteers to put this simple + // php file on their webserver that prints the client IP: + // <?php echo $_SERVER["REMOTE_ADDR"]; ?> if (nHost == 1) { addrConnect = CAddress("91.198.22.70:80"); // checkip.dyndns.org @@ -222,6 +226,36 @@ bool GetMyExternalIP(unsigned int& ipRet) return false; } +void ThreadGetMyExternalIP(void* parg) +{ + // Wait for IRC to get it first + if (!GetBoolArg("-noirc")) + { + for (int i = 0; i < 2 * 60; i++) + { + Sleep(1000); + if (fGotExternalIP || fShutdown) + return; + } + } + + // Fallback in case IRC fails to get it + if (GetMyExternalIP(addrLocalHost.ip)) + { + printf("GetMyExternalIP() returned %s\n", addrLocalHost.ToStringIP().c_str()); + if (addrLocalHost.IsRoutable()) + { + // If we already connected to a few before we had our IP, go back and addr them. + // setAddrKnown automatically filters any duplicate sends. + CAddress addr(addrLocalHost); + addr.nTime = GetAdjustedTime(); + CRITICAL_BLOCK(cs_vNodes) + foreach(CNode* pnode, vNodes) + pnode->PushAddress(addr); + } + } +} + @@ -1310,8 +1344,7 @@ void StartNode(void* parg) #endif printf("addrLocalHost = %s\n", addrLocalHost.ToString().c_str()); - // Get our external IP address for incoming connections - if (fUseProxy) + if (fUseProxy || mapArgs.count("-connect")) { // Proxies can't take incoming connections addrLocalHost.ip = CAddress("0.0.0.0").ip; @@ -1319,15 +1352,7 @@ void StartNode(void* parg) } else { - if (addrIncoming.IsValid()) - addrLocalHost.ip = addrIncoming.ip; - - if (GetMyExternalIP(addrLocalHost.ip)) - { - addrIncoming = addrLocalHost; - CWalletDB().WriteSetting("addrIncoming", addrIncoming); - printf("addrLocalHost = %s\n", addrLocalHost.ToString().c_str()); - } + CreateThread(ThreadGetMyExternalIP, NULL); } // |