예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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 = PacketProcedures.DecodeString1ASCII(reader);

            return(fromPeerId, toPeerId, streamId, extensionId);
        }