|
|
|
|
@ -1342,7 +1342,7 @@ bool IncomingPacket::_doCIRCUIT_TEST(const RuntimeEnvironment *RR,const SharedPt
|
|
|
|
|
outp.append((uint8_t)hops()); |
|
|
|
|
_path->localAddress().serialize(outp); |
|
|
|
|
_path->address().serialize(outp); |
|
|
|
|
outp.append((uint16_t)0); // no additional fields
|
|
|
|
|
outp.append((uint16_t)_path->linkQuality()); |
|
|
|
|
outp.append((uint8_t)breadth); |
|
|
|
|
for(unsigned int h=0;h<breadth;++h) { |
|
|
|
|
nextHop[h].appendTo(outp); |
|
|
|
|
@ -1399,16 +1399,20 @@ bool IncomingPacket::_doCIRCUIT_TEST_REPORT(const RuntimeEnvironment *RR,const S
|
|
|
|
|
|
|
|
|
|
const unsigned int receivedOnLocalAddressLen = reinterpret_cast<InetAddress *>(&(report.receivedOnLocalAddress))->deserialize(*this,ZT_PACKET_IDX_PAYLOAD + 58); |
|
|
|
|
const unsigned int receivedFromRemoteAddressLen = reinterpret_cast<InetAddress *>(&(report.receivedFromRemoteAddress))->deserialize(*this,ZT_PACKET_IDX_PAYLOAD + 58 + receivedOnLocalAddressLen); |
|
|
|
|
unsigned int ptr = ZT_PACKET_IDX_PAYLOAD + 58 + receivedOnLocalAddressLen + receivedFromRemoteAddressLen; |
|
|
|
|
if (report.protocolVersion >= 9) { |
|
|
|
|
report.receivedFromLinkQuality = at<uint16_t>(ptr); ptr += 2; |
|
|
|
|
} else { |
|
|
|
|
report.receivedFromLinkQuality = ZT_PATH_LINK_QUALITY_MAX; |
|
|
|
|
ptr += at<uint16_t>(ptr) + 2; // this field was once an 'extended field length' reserved field, which was always set to 0
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
unsigned int nhptr = ZT_PACKET_IDX_PAYLOAD + 58 + receivedOnLocalAddressLen + receivedFromRemoteAddressLen; |
|
|
|
|
nhptr += at<uint16_t>(nhptr) + 2; // add "additional field" length, which right now will be zero
|
|
|
|
|
|
|
|
|
|
report.nextHopCount = (*this)[nhptr++]; |
|
|
|
|
report.nextHopCount = (*this)[ptr++]; |
|
|
|
|
if (report.nextHopCount > ZT_CIRCUIT_TEST_MAX_HOP_BREADTH) // sanity check, shouldn't be possible
|
|
|
|
|
report.nextHopCount = ZT_CIRCUIT_TEST_MAX_HOP_BREADTH; |
|
|
|
|
for(unsigned int h=0;h<report.nextHopCount;++h) { |
|
|
|
|
report.nextHops[h].address = Address(field(nhptr,ZT_ADDRESS_LENGTH),ZT_ADDRESS_LENGTH).toInt(); nhptr += ZT_ADDRESS_LENGTH; |
|
|
|
|
nhptr += reinterpret_cast<InetAddress *>(&(report.nextHops[h].physicalAddress))->deserialize(*this,nhptr); |
|
|
|
|
report.nextHops[h].address = Address(field(ptr,ZT_ADDRESS_LENGTH),ZT_ADDRESS_LENGTH).toInt(); ptr += ZT_ADDRESS_LENGTH; |
|
|
|
|
ptr += reinterpret_cast<InetAddress *>(&(report.nextHops[h].physicalAddress))->deserialize(*this,ptr); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
RR->node->postCircuitTestReport(&report); |
|
|
|
|
|