|
|
|
@ -530,7 +530,7 @@ void CNode::PushVersion()
@@ -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)
@@ -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 */ |
|
|
|
|