aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgmaxwell <gmaxwell@gmail.com>2012-02-11 15:14:02 -0800
committergmaxwell <gmaxwell@gmail.com>2012-02-11 15:14:02 -0800
commit9f3de58d83f54536076be44fe945f56670ef9b60 (patch)
treee7411480aa60b09a698e149f16cd80c2f9ce68e9 /src
parent7c39b56c3b00820256a735e4faa37e16b586fc94 (diff)
parentbaba6e7de28940a8f4cc907d57d2ea5b780d39ea (diff)
downloadbitcoin-9f3de58d83f54536076be44fe945f56670ef9b60.tar.xz
Merge pull request #817 from TheBlueMatt/dpiversionfix
Get ext. IP from UPnP, make sure addrMe IsRoutable() in version.
Diffstat (limited to 'src')
-rw-r--r--src/net.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/net.cpp b/src/net.cpp
index f0ea5506e2..63829d0e0a 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -530,7 +530,7 @@ void CNode::PushVersion()
/// when NTP implemented, change to just nTime = GetAdjustedTime()
int64 nTime = (fInbound ? GetAdjustedTime() : GetTime());
CAddress addrYou = (fUseProxy ? CAddress(CService("0.0.0.0",0)) : addr);
- CAddress addrMe = (fUseProxy ? CAddress(CService("0.0.0.0",0)) : addrLocalHost);
+ CAddress addrMe = (fUseProxy || !addrLocalHost.IsRoutable() ? CAddress(CService("0.0.0.0",0)) : addrLocalHost);
RAND_bytes((unsigned char*)&nLocalHostNonce, sizeof(nLocalHostNonce));
PushMessage("version", PROTOCOL_VERSION, nLocalServices, nTime, addrYou, addrMe,
nLocalHostNonce, FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, std::vector<string>()), nBestHeight);
@@ -965,6 +965,26 @@ void ThreadMapPort2(void* parg)
r = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
if (r == 1)
{
+ if (!addrLocalHost.IsRoutable())
+ {
+ 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])
+ {
+ printf("UPnP: ExternalIPAddress = %s\n", externalIPAddress);
+ CAddress addrExternalFromUPnP(CService(externalIPAddress, 0), nLocalServices);
+ if (addrExternalFromUPnP.IsRoutable())
+ addrLocalHost = addrExternalFromUPnP;
+ }
+ else
+ printf("UPnP: GetExternalIPAddress failed.\n");
+ }
+ }
+
string strDesc = "Bitcoin " + FormatFullVersion();
#ifndef UPNPDISCOVER_SUCCESS
/* miniupnpc 1.5 */