public SentRequest(DrpPeerEngine engine, Logger logger, IPEndPoint destinationEndpoint, ConnectionToNeighbor destinationNeighborNullable, byte[] requestUdpData, RequestP2pSequenceNumber16 sentReqP2pSeq16, LowLevelUdpResponseScanner ack1Scanner) { _destinationEndpoint = destinationEndpoint; _logger = logger; _requestUdpData = requestUdpData; _sentReqP2pSeq16 = sentReqP2pSeq16; _ack1Scanner = ack1Scanner; _destinationNeighborNullable = destinationNeighborNullable; _engine = engine; }
/// <param name="waitNhaFromNeighborNullable">is used to verify NPACK.NeighborHMAC</param> internal async Task <NeighborPeerAckPacket> OptionallySendUdpRequestAsync_Retransmit_WaitForNeighborPeerAck(string completionActionVisibleId, byte[] requestPacketDataNullable, IPEndPoint responderEndpoint, RequestP2pSequenceNumber16 reqP2pSeq16, ConnectionToNeighbor waitNhaFromNeighborNullable = null, Action <BinaryWriter> npaRequestFieldsForNeighborHmacNullable = null) { var npaScanner = NeighborPeerAckPacket.GetScanner(reqP2pSeq16, waitNhaFromNeighborNullable, npaRequestFieldsForNeighborHmacNullable); if (WriteToLog_udp_deepDetail_enabled) { WriteToLog_udp_deepDetail($"waiting for NPACK, scanner: {MiscProcedures.ByteArrayToString(npaScanner.ResponseFirstBytes)} npaSeq={reqP2pSeq16}"); } var nextHopResponsePacketData = await SendUdpRequestAsync_Retransmit( new PendingLowLevelUdpRequest(completionActionVisibleId, responderEndpoint, npaScanner, DateTimeNowUtc, Configuration.UdpLowLevelRequests_ExpirationTimeoutS, requestPacketDataNullable, Configuration.UdpLowLevelRequests_InitialRetransmissionTimeoutS, Configuration.UdpLowLevelRequests_RetransmissionTimeoutIncrement )); if (nextHopResponsePacketData == null) { string desc = "no NPACK response to DRP request '"; if (requestPacketDataNullable != null) { desc += (PacketTypes)requestPacketDataNullable[0]; } desc += $"' - timeout expired ({Configuration.UdpLowLevelRequests_ExpirationTimeoutS}s) completionAction={completionActionVisibleId}"; if (waitNhaFromNeighborNullable != null) { desc += $", neighbor={waitNhaFromNeighborNullable}"; } throw new DrpTimeoutException(desc); } var nextHopResponsePacket = new NeighborPeerAckPacket(nextHopResponsePacketData); if (nextHopResponsePacket.ResponseCode != ResponseOrFailureCode.accepted) { if (WriteToLog_udp_deepDetail_enabled) { WriteToLog_udp_deepDetail($"got NPACK with {nextHopResponsePacket.ResponseCode} throwing exception"); } throw new RequestRejectedException(nextHopResponsePacket.ResponseCode); } return(nextHopResponsePacket); }