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(); } }
public void ReadFrom(ToffeePacketIterator iterator) { AppName = iterator.ReadString(); AppVersion = iterator.ReadString(); NetworkHash = iterator.ReadUInt32(); HasEncryption = iterator.ReadBoolean(); }
/// <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); } }
public void ReadFrom(ToffeePacketIterator iterator) { OpCode = iterator.ReadUInt16(); Compressed = iterator.ReadBoolean(); Timestamp = iterator.ReadInt64(); Length = iterator.ReadUInt16(); }
/// <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); } }
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)); } }
public void ReadFrom(ToffeePacketIterator iterator) { Sucess = iterator.ReadBoolean(); ErrorCode = iterator.ReadUInt8(); Message = iterator.ReadString(); Channel = iterator.ReadUInt32(); }
public void ReadFrom(ToffeePacketIterator iterator) { Success = iterator.ReadBoolean(); ErrorCode = iterator.ReadUInt8(); Message = iterator.ReadString(); HeartbeatTime = iterator.ReadUInt32(); ForcedEncryption = iterator.ReadBoolean(); }
public void ReadFrom(ToffeePacketIterator iterator) { Sender = iterator.ReadUInt32(); Receivers = (uint[])iterator.ReadArray(); OpCode = iterator.ReadUInt16(); Compressed = iterator.ReadBoolean(); Length = iterator.ReadUInt16(); }
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)); } }
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); }
public void ReadFrom(ToffeePacketIterator iterator) { DistributedId = iterator.ReadUInt32(); Destroyed = iterator.ReadBoolean(); }
public void ReadFrom(ToffeePacketIterator iterator) { Services = (ServiceOpen[])iterator.ReadArray(); }
public void ReadFrom(ToffeePacketIterator iterator) { DistributedId = iterator.ReadUInt32(); ServiceType = iterator.ReadUInt32(); CurrentState = (FieldUpdate[])iterator.ReadArray(); }
public void ReadFrom(ToffeePacketIterator iterator) { DistributedId = iterator.ReadUInt32(); ErrorCode = iterator.ReadUInt8(); Message = iterator.ReadString(); }
public void ReadFrom(ToffeePacketIterator iterator) { FieldId = iterator.ReadUInt32(); Parameters = (byte[])iterator.ReadArray(); }
public void ReadFrom(ToffeePacketIterator iterator) { DistributedId = iterator.ReadUInt32(); Updates = (FieldUpdate[])iterator.ReadArray(); }
public void ReadFrom(ToffeePacketIterator iterator) { Name = iterator.ReadString(); Role = iterator.ReadString(); Channel = iterator.ReadUInt32(); }