Ejemplo n.º 1
0
        private void TransmitL2Packet(L2PacketType PacketType, Byte[] Parameter)
        {
            Byte[] OutgoingPacket = new Byte[8 + Parameter.Length];

            OutgoingPacket[L2HeaderOffset]    = L2PacketHeader;
            OutgoingPacket[L2PacketNumOffset] = (Byte)nPacketLastSent;
            OutgoingPacket[L2PacketAckOffset] = (Byte)nPacketLastSeen;
            OutgoingPacket[L2TypeOffset]      = (Byte)PacketType;
            Parameter.CopyTo(OutgoingPacket, L2ParameterOffset);

            int nCalcCRC = compute_CRC(OutgoingPacket);

            OutgoingPacket[L2CRC1Offset] = (Byte)(((nCalcCRC >> 8) & 0xF0) | 0x01);
            OutgoingPacket[L2CRC2Offset] = (Byte)(((nCalcCRC >> 8) & 0x0F) | 0x40);
            OutgoingPacket[L2CRC3Offset] = (Byte)((nCalcCRC & 0xF0) | 0x01);
            OutgoingPacket[L2CRC4Offset] = (Byte)((nCalcCRC & 0x0F) | 0x40);

            Console.Write("Sending packet: ");
            for (Int32 i = 0; i < OutgoingPacket.Length; i++)
            {
                Console.Write("{0,02:X} ", OutgoingPacket[i]);
            }
            Console.WriteLine();

            clientStream.Write(OutgoingPacket, 0, OutgoingPacket.Length);
            clientStream.WriteByte(L2PacketFooter);
        }
Ejemplo n.º 2
0
        public void ProcessPacket(Byte[] NextPacket)
        {
            Console.Write("Packet: ");
            for (Int32 i = 0; i < NextPacket.Length; i++)
            {
                Console.Write("{0,02:X} ", NextPacket[i]);
            }
            Console.WriteLine();
            UInt16 nPacketCRC = (UInt16)((((UInt16)(NextPacket[L2CRC1Offset] & 0xF0)) | ((UInt16)(NextPacket[L2CRC2Offset] & 0x0F))) << 8);

            nPacketCRC |= (UInt16)(((UInt16)(NextPacket[L2CRC3Offset] & 0xF0)) | ((UInt16)(NextPacket[L2CRC4Offset] & 0x0F)));
            UInt16 nCalcCRC = compute_CRC(NextPacket);

            if ((nPacketCRC != nCalcCRC) && (0 != nPacketCRC))
            {
                // Officially, this packet did NOT happen!
                Console.WriteLine("CRC error!  Got {0,04:X} and expected {1,04:X}", nCalcCRC, nPacketCRC);
                return;
            }

            nPacketLastSeen = NextPacket[L2PacketNumOffset];             // Keep track of the packet # we have seen

            L2PacketType CurrentPacketType = (L2PacketType)NextPacket[L2TypeOffset];

            Byte[] OutgoingParameter = new Byte[NextPacket.Length - L2ParameterOffset];
            Array.Copy(NextPacket, L2ParameterOffset, OutgoingParameter, 0, NextPacket.Length - L2ParameterOffset);

            switch (CurrentPacketType)
            {
            case L2PacketType.l2ptData:
                HandlePacketData(OutgoingParameter);
                break;

            case L2PacketType.l2ptWindowFull:
                HandleClientWindowFull();
                break;

            case L2PacketType.l2ptProtocolReset:
                HandleProtocolReset(OutgoingParameter);
                break;

            case L2PacketType.l2ptTimeout:
                HandleProtocolTimer();
                break;
            }
        }
Ejemplo n.º 3
0
 private void TransmitL2Packet(L2PacketType PacketType)
 {
     TransmitL2Packet(PacketType, new Byte[0]);
 }