public PeerHelloPacket(byte[] packetUdpPayloadData) { // if (packetUdpPayloadData.Length < MinEncodedSize) throw new ArgumentException(nameof(packetUdpPayloadData)); var index = P2ptpCommon.HeaderSize; FromPeerId = PeerId.Decode(packetUdpPayloadData, ref index); StreamId = StreamId.Decode(packetUdpPayloadData, ref index); ToPeerId = PeerId.Decode(packetUdpPayloadData, ref index); LibraryVersion = PacketProcedures.DecodeUInt32(packetUdpPayloadData, ref index); ProtocolVersion = PacketProcedures.DecodeUInt16(packetUdpPayloadData, ref index); Status = (PeerHelloRequestStatus)packetUdpPayloadData[index++]; RequestTime32 = PacketProcedures.DecodeUInt32(packetUdpPayloadData, ref index); Flags = packetUdpPayloadData[index++]; var extensionIdsLength = packetUdpPayloadData[index++]; ExtensionIds = new string[extensionIdsLength]; for (byte i = 0; i < extensionIdsLength; i++) { ExtensionIds[i] = PacketProcedures.DecodeString1ASCII(packetUdpPayloadData, ref index); } if (index < packetUdpPayloadData.Length) { // after version 190608 RequestSequenceNumber = PacketProcedures.DecodeUInt16(packetUdpPayloadData, ref index); ResponseCpuDelayMs = PacketProcedures.DecodeUInt16(packetUdpPayloadData, ref index); RequestedFromIp = PacketProcedures.DecodeString1ASCII(packetUdpPayloadData, ref index); var reader = PacketProcedures.CreateBinaryReader(packetUdpPayloadData, index); if (FlagIshareMyIpLocation) { IpLocationData = IpLocationData.Decode(reader); } } }
internal static PeersListPacket_SharedPeerIpv4 Decode(byte[] data, ref int index) { return(new PeersListPacket_SharedPeerIpv4( StreamId.Decode(data, ref index), PeerId.Decode(data, ref index), new IPEndPoint(new IPAddress(BinaryProcedures.DecodeUInt32(data, ref index)), BinaryProcedures.DecodeUInt16(data, ref index)) )); }
internal static (PeerId fromPeerId, PeerId toPeerId, StreamId streamId, string extensionId) ParseExtensionSignalingPacket(BinaryReader reader) { var fromPeerId = PeerId.Decode(reader); var toPeerId = PeerId.Decode(reader); var streamId = StreamId.Decode(reader); var extensionId = P2ptpCommon.DecodeString1ASCII(reader); return(fromPeerId, toPeerId, streamId, extensionId); }
internal static (ILocalPeerExtension extension, StreamId streamId, int index) ParseReceivedExtensionPayloadPacket(byte[] data, ILocalPeerExtension[] extensions) { var extension = extensions.FirstOrDefault(x => ExtensionPacketHeaderMatches(x, data)); if (extension != null) { var index = extension.PayloadPacketHeader.Length; var streamId = StreamId.Decode(data, ref index); return(extension, streamId, index); } return(null, null, 0); }
public PeersListPacketIpv4(byte[] data) { if (data.Length < EncodedSizeMinimum) { throw new ArgumentException(nameof(data)); } var index = P2ptpCommon.HeaderSize; FromPeerId = PeerId.Decode(data, ref index); StreamId = StreamId.Decode(data, ref index); var count = data[index++]; SharedPeers = new PeersListPacket_SharedPeerIpv4[count]; for (byte i = 0; i < count; i++) { SharedPeers[i] = PeersListPacket_SharedPeerIpv4.Decode(data, ref index); } }
public PeerHelloPacket(byte[] data) { if (data.Length < MinEncodedSize) { throw new ArgumentException(nameof(data)); } var index = P2ptpCommon.HeaderSize; FromPeerId = PeerId.Decode(data, ref index); StreamId = StreamId.Decode(data, ref index); ToPeerId = PeerId.Decode(data, ref index); LibraryVersion = P2ptpCommon.DecodeUInt32(data, ref index); ProtocolVersion = P2ptpCommon.DecodeUInt16(data, ref index); Status = (PeerHelloRequestStatus)data[index++]; RequestTime32 = P2ptpCommon.DecodeUInt32(data, ref index); RoleFlags = data[index++]; var extensionIdsLength = data[index++]; ExtensionIds = new string[extensionIdsLength]; for (byte i = 0; i < extensionIdsLength; i++) { ExtensionIds[i] = P2ptpCommon.DecodeString1ASCII(data, ref index); } }