|
@@ -133,7 +133,7 @@ void Peer::received(
|
|
|
Packet outp(_id.address(),RR->identity.address(),Packet::VERB_MULTICAST_LIKE);
|
|
|
const std::vector< SharedPtr<Network> > networks(RR->node->allNetworks());
|
|
|
for(std::vector< SharedPtr<Network> >::const_iterator n(networks.begin());n!=networks.end();++n) {
|
|
|
- if ( (isRoot) || ((*n)->isAllowed(_id.address())) ) {
|
|
|
+ if ( (isRoot) || ((*n)->isAllowed(_id.address())) || (_id.address() == (*n)->controller()) ) {
|
|
|
const std::vector<MulticastGroup> mgs((*n)->allMulticastGroups());
|
|
|
for(std::vector<MulticastGroup>::const_iterator mg(mgs.begin());mg!=mgs.end();++mg) {
|
|
|
if ((outp.size() + 18) > ZT_UDP_DEFAULT_PAYLOAD_MTU) {
|
|
@@ -211,7 +211,7 @@ void Peer::attemptToContactAt(const RuntimeEnvironment *RR,const InetAddress &at
|
|
|
void Peer::doPingAndKeepalive(const RuntimeEnvironment *RR,uint64_t now)
|
|
|
{
|
|
|
RemotePath *const bestPath = getBestPath(now);
|
|
|
- if ((bestPath)&&(bestPath->active(now))) {
|
|
|
+ if (bestPath) {
|
|
|
if ((now - bestPath->lastReceived()) >= ZT_PEER_DIRECT_PING_DELAY) {
|
|
|
TRACE("PING %s(%s)",_id.address().toString().c_str(),bestPath->address().toString().c_str());
|
|
|
attemptToContactAt(RR,bestPath->address(),now);
|
|
@@ -239,7 +239,7 @@ void Peer::pushDirectPaths(const RuntimeEnvironment *RR,RemotePath *path,uint64_
|
|
|
ps.push_back(',');
|
|
|
ps.append(p->address().toString());
|
|
|
}
|
|
|
- TRACE("pushing %u direct paths (local interface addresses) to %s: %s",(unsigned int)dps.size(),_id.address().toString().c_str(),ps.c_str());
|
|
|
+ TRACE("pushing %u direct paths to %s: %s",(unsigned int)dps.size(),_id.address().toString().c_str(),ps.c_str());
|
|
|
}
|
|
|
#endif
|
|
|
|