diff options
author | gmaxwell <gmaxwell@gmail.com> | 2012-02-11 15:14:02 -0800 |
---|---|---|
committer | gmaxwell <gmaxwell@gmail.com> | 2012-02-11 15:14:02 -0800 |
commit | 9f3de58d83f54536076be44fe945f56670ef9b60 (patch) | |
tree | e7411480aa60b09a698e149f16cd80c2f9ce68e9 | |
parent | 7c39b56c3b00820256a735e4faa37e16b586fc94 (diff) | |
parent | baba6e7de28940a8f4cc907d57d2ea5b780d39ea (diff) |
Merge pull request #817 from TheBlueMatt/dpiversionfix
Get ext. IP from UPnP, make sure addrMe IsRoutable() in version.
-rw-r--r-- | src/net.cpp | 22 |
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 */ |