mirror of
https://github.com/twisterarmy/twister-core.git
synced 2025-01-22 12:34:24 +00:00
get external ip from irc
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@202 1a98c847-1fd6-4fd8-948a-caf3550aa51b
This commit is contained in:
parent
fc73ad644f
commit
629e37dde1
10
irc.cpp
10
irc.cpp
@ -5,6 +5,7 @@
|
|||||||
#include "headers.h"
|
#include "headers.h"
|
||||||
|
|
||||||
int nGotIRCAddresses = 0;
|
int nGotIRCAddresses = 0;
|
||||||
|
bool fGotExternalIP = false;
|
||||||
|
|
||||||
void ThreadIRCSeed2(void* parg);
|
void ThreadIRCSeed2(void* parg);
|
||||||
|
|
||||||
@ -223,6 +224,8 @@ bool GetIPFromIRC(SOCKET hSocket, string strMyName, unsigned int& ipRet)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Hybrid IRC used by lfnet always returns IP when you userhost yourself,
|
||||||
|
// but in case another IRC is ever used this should work.
|
||||||
printf("GetIPFromIRC() got userhost %s\n", strHost.c_str());
|
printf("GetIPFromIRC() got userhost %s\n", strHost.c_str());
|
||||||
if (fUseProxy)
|
if (fUseProxy)
|
||||||
return false;
|
return false;
|
||||||
@ -327,14 +330,15 @@ void ThreadIRCSeed2(void* parg)
|
|||||||
}
|
}
|
||||||
Sleep(500);
|
Sleep(500);
|
||||||
|
|
||||||
// Get my external IP from IRC server
|
// Get our external IP from the IRC server and re-nick before joining the channel
|
||||||
CAddress addrFromIRC;
|
CAddress addrFromIRC;
|
||||||
if (GetIPFromIRC(hSocket, strMyName, addrFromIRC.ip))
|
if (GetIPFromIRC(hSocket, strMyName, addrFromIRC.ip))
|
||||||
{
|
{
|
||||||
// Just using it as a backup for now
|
|
||||||
printf("GetIPFromIRC() returned %s\n", addrFromIRC.ToStringIP().c_str());
|
printf("GetIPFromIRC() returned %s\n", addrFromIRC.ToStringIP().c_str());
|
||||||
if (addrFromIRC.IsRoutable() && !fUseProxy && !addrLocalHost.IsRoutable())
|
if (!fUseProxy && addrFromIRC.IsRoutable())
|
||||||
{
|
{
|
||||||
|
// IRC lets you to re-nick
|
||||||
|
fGotExternalIP = true;
|
||||||
addrLocalHost.ip = addrFromIRC.ip;
|
addrLocalHost.ip = addrFromIRC.ip;
|
||||||
strMyName = EncodeAddress(addrLocalHost);
|
strMyName = EncodeAddress(addrLocalHost);
|
||||||
Send(hSocket, strprintf("NICK %s\r", strMyName.c_str()).c_str());
|
Send(hSocket, strprintf("NICK %s\r", strMyName.c_str()).c_str());
|
||||||
|
1
irc.h
1
irc.h
@ -6,3 +6,4 @@ bool RecvLine(SOCKET hSocket, string& strLine);
|
|||||||
void ThreadIRCSeed(void* parg);
|
void ThreadIRCSeed(void* parg);
|
||||||
|
|
||||||
extern int nGotIRCAddresses;
|
extern int nGotIRCAddresses;
|
||||||
|
extern bool fGotExternalIP;
|
||||||
|
2
main.h
2
main.h
@ -1733,6 +1733,8 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Alerts are for notifying old versions if they become too obsolete and
|
||||||
|
// need to upgrade. The message is displayed in the status bar.
|
||||||
// Alert messages are broadcast as a vector of signed data. Unserializing may
|
// Alert messages are broadcast as a vector of signed data. Unserializing may
|
||||||
// not read the entire buffer if the alert is for a newer version, but older
|
// not read the entire buffer if the alert is for a newer version, but older
|
||||||
// versions can still relay the original data.
|
// versions can still relay the original data.
|
||||||
|
49
net.cpp
49
net.cpp
@ -163,7 +163,7 @@ bool GetMyExternalIP2(const CAddress& addrConnect, const char* pszGet, const cha
|
|||||||
return error("GetMyExternalIP() : connection closed");
|
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)
|
bool GetMyExternalIP(unsigned int& ipRet)
|
||||||
{
|
{
|
||||||
CAddress addrConnect;
|
CAddress addrConnect;
|
||||||
@ -176,6 +176,10 @@ bool GetMyExternalIP(unsigned int& ipRet)
|
|||||||
for (int nLookup = 0; nLookup <= 1; nLookup++)
|
for (int nLookup = 0; nLookup <= 1; nLookup++)
|
||||||
for (int nHost = 1; nHost <= 2; nHost++)
|
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)
|
if (nHost == 1)
|
||||||
{
|
{
|
||||||
addrConnect = CAddress("91.198.22.70:80"); // checkip.dyndns.org
|
addrConnect = CAddress("91.198.22.70:80"); // checkip.dyndns.org
|
||||||
@ -222,6 +226,36 @@ bool GetMyExternalIP(unsigned int& ipRet)
|
|||||||
return false;
|
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
|
#endif
|
||||||
printf("addrLocalHost = %s\n", addrLocalHost.ToString().c_str());
|
printf("addrLocalHost = %s\n", addrLocalHost.ToString().c_str());
|
||||||
|
|
||||||
// Get our external IP address for incoming connections
|
if (fUseProxy || mapArgs.count("-connect"))
|
||||||
if (fUseProxy)
|
|
||||||
{
|
{
|
||||||
// Proxies can't take incoming connections
|
// Proxies can't take incoming connections
|
||||||
addrLocalHost.ip = CAddress("0.0.0.0").ip;
|
addrLocalHost.ip = CAddress("0.0.0.0").ip;
|
||||||
@ -1319,15 +1352,7 @@ void StartNode(void* parg)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (addrIncoming.IsValid())
|
CreateThread(ThreadGetMyExternalIP, NULL);
|
||||||
addrLocalHost.ip = addrIncoming.ip;
|
|
||||||
|
|
||||||
if (GetMyExternalIP(addrLocalHost.ip))
|
|
||||||
{
|
|
||||||
addrIncoming = addrLocalHost;
|
|
||||||
CWalletDB().WriteSetting("addrIncoming", addrIncoming);
|
|
||||||
printf("addrLocalHost = %s\n", addrLocalHost.ToString().c_str());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -25,7 +25,7 @@ class CDataStream;
|
|||||||
class CAutoFile;
|
class CAutoFile;
|
||||||
static const unsigned int MAX_SIZE = 0x02000000;
|
static const unsigned int MAX_SIZE = 0x02000000;
|
||||||
|
|
||||||
static const int VERSION = 31900;
|
static const int VERSION = 31901;
|
||||||
static const char* pszSubVer = "";
|
static const char* pszSubVer = "";
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user