|
@@ -348,7 +348,7 @@ bool IncomingPacket::_doHELLO(const RuntimeEnvironment *RR,SharedPtr<Peer> &peer
|
|
RR->antiRec->logOutgoingZT(outp.data(),outp.size());
|
|
RR->antiRec->logOutgoingZT(outp.data(),outp.size());
|
|
RR->node->putPacket(_localAddress,_remoteAddress,outp.data(),outp.size());
|
|
RR->node->putPacket(_localAddress,_remoteAddress,outp.data(),outp.size());
|
|
|
|
|
|
- peer->setRemoteVersion(protoVersion,vMajor,vMinor,vRevision);
|
|
|
|
|
|
+ peer->setRemoteVersion(protoVersion,vMajor,vMinor,vRevision); // important for this to go first so received() knows the version
|
|
peer->received(RR,_localAddress,_remoteAddress,hops(),pid,Packet::VERB_HELLO,0,Packet::VERB_NOP);
|
|
peer->received(RR,_localAddress,_remoteAddress,hops(),pid,Packet::VERB_HELLO,0,Packet::VERB_NOP);
|
|
} catch ( ... ) {
|
|
} catch ( ... ) {
|
|
TRACE("dropped HELLO from %s(%s): unexpected exception",source().toString().c_str(),_remoteAddress.toString().c_str());
|
|
TRACE("dropped HELLO from %s(%s): unexpected exception",source().toString().c_str(),_remoteAddress.toString().c_str());
|
|
@@ -426,6 +426,9 @@ bool IncomingPacket::_doOK(const RuntimeEnvironment *RR,const SharedPtr<Peer> &p
|
|
}
|
|
}
|
|
} break;
|
|
} break;
|
|
|
|
|
|
|
|
+ //case Packet::VERB_ECHO: {
|
|
|
|
+ //} break;
|
|
|
|
+
|
|
case Packet::VERB_MULTICAST_GATHER: {
|
|
case Packet::VERB_MULTICAST_GATHER: {
|
|
const uint64_t nwid = at<uint64_t>(ZT_PROTO_VERB_MULTICAST_GATHER__OK__IDX_NETWORK_ID);
|
|
const uint64_t nwid = at<uint64_t>(ZT_PROTO_VERB_MULTICAST_GATHER__OK__IDX_NETWORK_ID);
|
|
const MulticastGroup mg(MAC(field(ZT_PROTO_VERB_MULTICAST_GATHER__OK__IDX_MAC,6),6),at<uint32_t>(ZT_PROTO_VERB_MULTICAST_GATHER__OK__IDX_ADI));
|
|
const MulticastGroup mg(MAC(field(ZT_PROTO_VERB_MULTICAST_GATHER__OK__IDX_MAC,6),6),at<uint32_t>(ZT_PROTO_VERB_MULTICAST_GATHER__OK__IDX_ADI));
|
|
@@ -638,7 +641,9 @@ bool IncomingPacket::_doECHO(const RuntimeEnvironment *RR,const SharedPtr<Peer>
|
|
Packet outp(peer->address(),RR->identity.address(),Packet::VERB_OK);
|
|
Packet outp(peer->address(),RR->identity.address(),Packet::VERB_OK);
|
|
outp.append((unsigned char)Packet::VERB_ECHO);
|
|
outp.append((unsigned char)Packet::VERB_ECHO);
|
|
outp.append((uint64_t)pid);
|
|
outp.append((uint64_t)pid);
|
|
- outp.append(field(ZT_PACKET_IDX_PAYLOAD,size() - ZT_PACKET_IDX_PAYLOAD),size() - ZT_PACKET_IDX_PAYLOAD);
|
|
|
|
|
|
+ if (size() > ZT_PACKET_IDX_PAYLOAD)
|
|
|
|
+ outp.append(reinterpret_cast<const unsigned char *>(data()) + ZT_PACKET_IDX_PAYLOAD,size() - ZT_PACKET_IDX_PAYLOAD);
|
|
|
|
+ outp.armor(peer->key(),true);
|
|
RR->antiRec->logOutgoingZT(outp.data(),outp.size());
|
|
RR->antiRec->logOutgoingZT(outp.data(),outp.size());
|
|
RR->node->putPacket(_localAddress,_remoteAddress,outp.data(),outp.size());
|
|
RR->node->putPacket(_localAddress,_remoteAddress,outp.data(),outp.size());
|
|
peer->received(RR,_localAddress,_remoteAddress,hops(),pid,Packet::VERB_ECHO,0,Packet::VERB_NOP);
|
|
peer->received(RR,_localAddress,_remoteAddress,hops(),pid,Packet::VERB_ECHO,0,Packet::VERB_NOP);
|