Merge pull request #817 from TheBlueMatt/dpiversionfix
Get ext. IP from UPnP, make sure addrMe IsRoutable() in version.
This commit is contained in:
commit
9f3de58d83
1 changed files with 21 additions and 1 deletions
22
src/net.cpp
22
src/net.cpp
|
@ -530,7 +530,7 @@ void CNode::PushVersion()
|
||||||
/// when NTP implemented, change to just nTime = GetAdjustedTime()
|
/// when NTP implemented, change to just nTime = GetAdjustedTime()
|
||||||
int64 nTime = (fInbound ? GetAdjustedTime() : GetTime());
|
int64 nTime = (fInbound ? GetAdjustedTime() : GetTime());
|
||||||
CAddress addrYou = (fUseProxy ? CAddress(CService("0.0.0.0",0)) : addr);
|
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));
|
RAND_bytes((unsigned char*)&nLocalHostNonce, sizeof(nLocalHostNonce));
|
||||||
PushMessage("version", PROTOCOL_VERSION, nLocalServices, nTime, addrYou, addrMe,
|
PushMessage("version", PROTOCOL_VERSION, nLocalServices, nTime, addrYou, addrMe,
|
||||||
nLocalHostNonce, FormatSubVersion(CLIENT_NAME, CLIENT_VERSION, std::vector<string>()), nBestHeight);
|
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));
|
r = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
|
||||||
if (r == 1)
|
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();
|
string strDesc = "Bitcoin " + FormatFullVersion();
|
||||||
#ifndef UPNPDISCOVER_SUCCESS
|
#ifndef UPNPDISCOVER_SUCCESS
|
||||||
/* miniupnpc 1.5 */
|
/* miniupnpc 1.5 */
|
||||||
|
|
Loading…
Reference in a new issue