Fix a bug that we visually found in Windows code -- it was not advertising uPnP addresses?!?

This commit is contained in:
Adam Ierymenko 2016-01-11 09:09:24 -08:00
parent 1023ef23b7
commit ab19e19f00
2 changed files with 12 additions and 2 deletions

View File

@ -1334,8 +1334,10 @@ void ZT_Node_freeQueryResult(ZT_Node *node,void *qr);
/** /**
* Add a local interface address * Add a local interface address
* *
* Take care that these are never ZeroTier interface addresses, otherwise * It is the responsibility of the caller to take care that these are never
* strange things might happen or they simply won't work. * ZeroTier interface addresses, whether these are assigned by ZeroTier or
* are otherwise assigned to an interface managed by this ZeroTier instance.
* This can cause recursion or other undesirable behavior.
* *
* Addresses can also be added here if they are the result of a UPnP or * Addresses can also be added here if they are the result of a UPnP or
* NAT-PMP port mapping or other discovery or mapping means. * NAT-PMP port mapping or other discovery or mapping means.

View File

@ -811,6 +811,14 @@ public:
ztDevices.push_back(t->second->luid()); ztDevices.push_back(t->second->luid());
} }
_node->clearLocalInterfaceAddresses();
#ifdef ZT_USE_MINIUPNPC
std::vector<InetAddress> mappedAddresses(_portMapper->get());
for(std::vector<InetAddress>::const_iterator ext(mappedAddresses.begin());ext!=mappedAddresses.end();++ext)
_node->addLocalInterfaceAddress(reinterpret_cast<const struct sockaddr_storage *>(&(*ext)));
#endif
char aabuf[16384]; char aabuf[16384];
ULONG aalen = sizeof(aabuf); ULONG aalen = sizeof(aabuf);
if (GetAdaptersAddresses(AF_UNSPEC,GAA_FLAG_SKIP_ANYCAST|GAA_FLAG_SKIP_MULTICAST|GAA_FLAG_SKIP_DNS_SERVER,(void *)0,reinterpret_cast<PIP_ADAPTER_ADDRESSES>(aabuf),&aalen) == NO_ERROR) { if (GetAdaptersAddresses(AF_UNSPEC,GAA_FLAG_SKIP_ANYCAST|GAA_FLAG_SKIP_MULTICAST|GAA_FLAG_SKIP_DNS_SERVER,(void *)0,reinterpret_cast<PIP_ADAPTER_ADDRESSES>(aabuf),&aalen) == NO_ERROR) {