Ejemplo n.º 1
0
        protected virtual void HandleClientHelloResponse(byte[] packet)
        {
            // Get the response
            ToffeePacketIterator iterator = new ToffeePacketIterator(this, packet);
            ClientHelloResponse  response = iterator.ReadStruct <ClientHelloResponse>();

            // Was the request successful?
            if (response.Success)
            {
                // Does this server require a heartbeat?
                if (response.HeartbeatTime != 0)
                {
                    HeartbeatTimer          = new Timer(response.HeartbeatTime * 1000);
                    HeartbeatTimer.Elapsed += SendHeartbeat;
                    HeartbeatTimer.Start();
                }

                // Do we have encryption keys?
                ForceEncryption = response.ForcedEncryption;
                if ((!UseEncryption) && (response.ForcedEncryption))
                {
                    // The server requires encryption that we don't have enabled.
                    Disconnect();
                    return;
                }
            }
            else
            {
                // OnConnectionFailed(this);
                Disconnect();
            }
        }
Ejemplo n.º 2
0
 public void ReadFrom(ToffeePacketIterator iterator)
 {
     AppName       = iterator.ReadString();
     AppVersion    = iterator.ReadString();
     NetworkHash   = iterator.ReadUInt32();
     HasEncryption = iterator.ReadBoolean();
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Handles recieved packets.
        /// </summary>
        /// <param name="session">The session that received the packet.</param>
        /// <param name="packet">The packet data that was received.</param>
        public override void HandlePacket(ToffeeSession session, byte[] packet)
        {
            // Get the session
            ClientAgentSession sender = (ClientAgentSession)session;

            // Read the packet
            ToffeeClientPacketReadResult result = ToffeeClientPacket.Read(session, packet);

            // Was this a succcessful read?
            if (result.Success)
            {
                Log?.Debug("Received 0x{0:X2} from session {1}.", result.Header.OpCode, sender.SessionId);

                ToffeePacketIterator iterator = new ToffeePacketIterator(session, result.Data);
                switch (result.Header.OpCode)
                {
                case (ushort)ToffeeOpCode.ClientHello:
                    HandleClientHello(sender, iterator.ReadStruct <ClientHello>());
                    break;

                case (ushort)ToffeeOpCode.ClientHeartbeat:
                    HandleClientHeartbeat(sender);
                    break;
                }
            }
            else
            {
                Log?.Warning("Received corrupt packet from session {1}.", sender.SessionId);
            }
        }
Ejemplo n.º 4
0
 public void ReadFrom(ToffeePacketIterator iterator)
 {
     OpCode     = iterator.ReadUInt16();
     Compressed = iterator.ReadBoolean();
     Timestamp  = iterator.ReadInt64();
     Length     = iterator.ReadUInt16();
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Handles recieved packets.
        /// </summary>
        /// <param name="session">The session that received the packet.</param>
        /// <param name="packet">The packet data that was received.</param>
        public override void HandlePacket(ToffeeSession session, byte[] packet)
        {
            // Get the session
            ToffeeSession sender = session;

            // Read the packet
            ToffeeInternalPacketReadResult result = ToffeeInternalPacket.Read(session, packet);

            // Was this a succcessful read?
            if (result.Success)
            {
                Log?.Debug("Received 0x{0:X2} from session {1}.", result.Header.OpCode, sender.SessionId);

                ToffeePacketIterator iterator = new ToffeePacketIterator(session, result.Data);
                switch (result.Header.OpCode)
                {
                case (ushort)ToffeeOpCode.InternalHello:
                    break;
                }
            }
            else
            {
                Log?.Warning("Received corrupt packet from session {1}.", sender.SessionId);
            }
        }
Ejemplo n.º 6
0
        public static ToffeeInternalPacketReadResult Read(ToffeeParticipant receiver, byte[] packet)
        {
            try
            {
                // Iterate through the packet
                ToffeePacketIterator iterator = new ToffeePacketIterator(receiver, packet);

                // Get the header, data, and CRC
                InternalPacketHeader header = iterator.ReadStruct <InternalPacketHeader>();
                byte[] packetData           = iterator.ReadBytes(header.Length);
                uint   sentCrc = iterator.ReadUInt32();

                // Is the CRC correct?
                uint calculatedCrc = CRC.CalculateCRC32(packetData);
                if (sentCrc != calculatedCrc)
                {
                    return(new ToffeeInternalPacketReadResult(false, new InternalPacketHeader(), null));
                }

                // Is this packet compressed?
                if (header.Compressed)
                {
                    packetData = CompressionService.Decompress(packetData);
                }

                // Return the read result
                return(new ToffeeInternalPacketReadResult(true, header, packetData));
            }
            catch
            {
                return(new ToffeeInternalPacketReadResult(false, new InternalPacketHeader(), null));
            }
        }
Ejemplo n.º 7
0
 public void ReadFrom(ToffeePacketIterator iterator)
 {
     Sucess    = iterator.ReadBoolean();
     ErrorCode = iterator.ReadUInt8();
     Message   = iterator.ReadString();
     Channel   = iterator.ReadUInt32();
 }
Ejemplo n.º 8
0
 public void ReadFrom(ToffeePacketIterator iterator)
 {
     Success          = iterator.ReadBoolean();
     ErrorCode        = iterator.ReadUInt8();
     Message          = iterator.ReadString();
     HeartbeatTime    = iterator.ReadUInt32();
     ForcedEncryption = iterator.ReadBoolean();
 }
Ejemplo n.º 9
0
 public void ReadFrom(ToffeePacketIterator iterator)
 {
     Sender     = iterator.ReadUInt32();
     Receivers  = (uint[])iterator.ReadArray();
     OpCode     = iterator.ReadUInt16();
     Compressed = iterator.ReadBoolean();
     Length     = iterator.ReadUInt16();
 }
Ejemplo n.º 10
0
        public static ToffeeClientPacketReadResult Read(ToffeeParticipant receiver, byte[] packet)
        {
            try
            {
                // Is this packet encrypted?
                bool encrypted = packet[0] == 0x01;
                if (encrypted)
                {
                    // Is this client setup to use encryption?
                    if (receiver.UseEncryption)
                    {
                        packet = receiver.Encryption.Decrypt(packet.Skip(1).ToArray());
                    }
                }
                else
                {
                    packet = packet.Skip(1).ToArray();
                }

                // Iterate through the packet
                ToffeePacketIterator iterator = new ToffeePacketIterator(receiver, packet);

                // Get the header, data, and CRC
                ClientPacketHeader header     = iterator.ReadStruct <ClientPacketHeader>();
                byte[]             packetData = iterator.ReadBytes(header.Length);
                uint sentCrc = iterator.ReadUInt32();

                // Is the CRC correct?
                uint calculatedCrc = CRC.CalculateCRC32(packetData);
                if (sentCrc != calculatedCrc)
                {
                    return(new ToffeeClientPacketReadResult(false, encrypted, new ClientPacketHeader(), null));
                }

                // Is this packet compressed?
                if (header.Compressed)
                {
                    packetData = CompressionService.Decompress(packetData);
                }

                // Return the read result
                return(new ToffeeClientPacketReadResult(true, encrypted, header, packetData));
            }
            catch
            {
                return(new ToffeeClientPacketReadResult(false, false, new ClientPacketHeader(), null));
            }
        }
Ejemplo n.º 11
0
        public static ToffeeInternalPacketReadResult Read <T>(ToffeeParticipant receiver, byte[] packet, out T output) where T : new()
        {
            // Default the output
            output = new T();

            // Read the packet
            ToffeeInternalPacketReadResult result = Read(receiver, packet);

            if (result.Success)
            {
                // Create a new iterator for the decompressed/decrypted packet data
                ToffeePacketIterator iterator = new ToffeePacketIterator(receiver, result.Data);
                output = (T)iterator.Read(typeof(T));
            }

            // Return the read result
            return(result);
        }
Ejemplo n.º 12
0
 public void ReadFrom(ToffeePacketIterator iterator)
 {
     DistributedId = iterator.ReadUInt32();
     Destroyed     = iterator.ReadBoolean();
 }
Ejemplo n.º 13
0
 public void ReadFrom(ToffeePacketIterator iterator)
 {
     Services = (ServiceOpen[])iterator.ReadArray();
 }
Ejemplo n.º 14
0
 public void ReadFrom(ToffeePacketIterator iterator)
 {
     DistributedId = iterator.ReadUInt32();
     ServiceType   = iterator.ReadUInt32();
     CurrentState  = (FieldUpdate[])iterator.ReadArray();
 }
Ejemplo n.º 15
0
 public void ReadFrom(ToffeePacketIterator iterator)
 {
     DistributedId = iterator.ReadUInt32();
     ErrorCode     = iterator.ReadUInt8();
     Message       = iterator.ReadString();
 }
Ejemplo n.º 16
0
 public void ReadFrom(ToffeePacketIterator iterator)
 {
     FieldId    = iterator.ReadUInt32();
     Parameters = (byte[])iterator.ReadArray();
 }
Ejemplo n.º 17
0
 public void ReadFrom(ToffeePacketIterator iterator)
 {
     DistributedId = iterator.ReadUInt32();
     Updates       = (FieldUpdate[])iterator.ReadArray();
 }
Ejemplo n.º 18
0
 public void ReadFrom(ToffeePacketIterator iterator)
 {
     Name    = iterator.ReadString();
     Role    = iterator.ReadString();
     Channel = iterator.ReadUInt32();
 }