static void Socket_SocketConnection_PacketReceived_Event(SocketConnection socketConnection, Packet pak) { if (pak.IsValid()) { uint Header = pak.Readuint(); switch (Header) { case Packets.PAK_CLI_LGNRQST: PacketHandlers.HandleLoginRequest(socketConnection, pak); break; case Packets.PAK_CLI_FRNDLSTRQST: PacketHandlers.HandleFriendListRequest(socketConnection, pak); break; case Packets.PAK_CLI_MEMINFORQST: PacketHandlers.HandleMemberInfoRequest(socketConnection, pak); break; case Packets.PAK_CLI_SNDMSG: PacketHandlers.HandleMessageSend(socketConnection, pak); break; case Packets.PAK_CLI_CHNGSTSRQST: PacketHandlers.HandleStatusChangeRequest(socketConnection, pak); break; case Packets.PAK_CLI_OFFLNMSGRQST: PacketHandlers.HandleOfflineMessagesRequest(socketConnection, pak); break; case Packets.PAK_CLI_FRNDADDRQST: PacketHandlers.HandleFriendAddRequest(socketConnection, pak); break; case Packets.PAK_CLI_FRNDDNYRQST: PacketHandlers.HandleFriendDenyRequest(socketConnection, pak); break; case Packets.PAK_CLI_CHNGUPDTRQST: PacketHandlers.HandleChangeUpdateRequest(socketConnection, pak); break; case Packets.PAK_CLI_FRNDRMVRQST: PacketHandlers.HandleFriendRemoveRequest(socketConnection, pak); break; case Packets.PAK_CLI_CALL_RQST: PacketHandlers.HandleCallRequest(socketConnection, pak); break; case Packets.PAK_CLI_CALL_ACC: PacketHandlers.HandleCallAccept(socketConnection, pak); break; case Packets.PAK_CLI_CALL_DNY: PacketHandlers.HandleCallDeny(socketConnection, pak); break; default: Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Invalid packet from {0}, 0x{1:X}", socketConnection.IP, Header); break; } } else { //Console.ForegroundColor = ConsoleColor.Red; //Console.WriteLine("Invalid packet from {0}", socketConnection.IP); //socketConnection.clientSocket.Close(); } }
/// <summary> /// Splits the buffer into all the nagled packets /// </summary> /// <param name="Buffer">Buffer to create the packets with</param> /// <returns>Nagle split packets</returns> public static Packet[] SplitPackets(byte[] Buffer) { List <Packet> Packets = new List <Packet>(); MemoryStream MemoryBuffer = new MemoryStream(); BinaryReader MemoryReader = new BinaryReader(MemoryBuffer); MemoryBuffer.Seek(0, SeekOrigin.Begin); MemoryBuffer.Write(Buffer, 0, Buffer.Length); MemoryBuffer.Position = 0; int CurrentPosition = 0; while (true) { try { if (!MemoryBuffer.CanRead) { break; } int PacketInnerLength = MemoryReader.ReadInt32(); if (PacketInnerLength == 0 || (MemoryBuffer.Length - MemoryBuffer.Position) < PacketInnerLength) { break; } MemoryBuffer.Position = CurrentPosition; byte[] PacketData = MemoryReader.ReadBytes(PacketInnerLength + 8); CurrentPosition += PacketInnerLength + 8; Packet pak = new Packet(PacketData); if (pak.IsValid()) { Packets.Add(pak); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); break; } } MemoryReader.Close(); MemoryBuffer.Close(); MemoryReader.Dispose(); MemoryBuffer.Dispose(); return(Packets.ToArray()); }
public void CSocket_ClientSocketPacketReceived_Event(object sender, ClientSocket clientSocket, Packet pak) { if (pak.IsValid()) { uint PacketHeader = pak.Readuint(); switch (PacketHeader) { case Packets.PAK_SRV_LGNRESP: this.HandleLoginResponse(clientSocket, pak); break; case Packets.PAK_SRV_FRNDLSTRESP: this.HandleFriendListResponse(clientSocket, pak); break; case Packets.PAK_SRV_MEMINFORESP: this.HandleMemberInfoResponse(clientSocket, pak); break; case Packets.PAK_SRV_MSGDLVR: this.HandleMessageDeliver(clientSocket, pak); break; case Packets.PAK_SRV_NEWSTSDLVR: this.HandleStatusChangeDeliver(clientSocket, pak); break; case Packets.PAK_SRV_NEWUPDTDLVR: this.HandleUpdateChangeDeliver(clientSocket, pak); break; case Packets.PAK_SRV_FRNDRMVDLVR: this.HandleFriendRemoveDeliver(clientSocket, pak); break; case Packets.PAK_SRV_CALL_DLVR: this.HandleCallRequest(clientSocket, pak); break; case Packets.PAK_SRV_CALL_ACC_DLVR: this.HandleCallAcceptRequest(clientSocket, pak); break; case Packets.PAK_SRV_CALL_DNY_DLVR: this.HandleCallDenyRequest(clientSocket, pak); break; default: break; } } }
/// <summary> /// Splits the buffer into all the nagled packets /// </summary> /// <param name="Buffer">Buffer to create the packets with</param> /// <returns>Nagle split packets</returns> public static Packet[] SplitPackets(byte[] Buffer) { List<Packet> Packets = new List<Packet>(); MemoryStream MemoryBuffer = new MemoryStream(); BinaryReader MemoryReader = new BinaryReader(MemoryBuffer); MemoryBuffer.Seek(0, SeekOrigin.Begin); MemoryBuffer.Write(Buffer, 0, Buffer.Length); MemoryBuffer.Position = 0; int CurrentPosition = 0; while (true) { try { if(!MemoryBuffer.CanRead) break; int PacketInnerLength = MemoryReader.ReadInt32(); if (PacketInnerLength == 0 || (MemoryBuffer.Length - MemoryBuffer.Position) < PacketInnerLength) break; MemoryBuffer.Position = CurrentPosition; byte[] PacketData = MemoryReader.ReadBytes(PacketInnerLength + 8); CurrentPosition += PacketInnerLength + 8; Packet pak = new Packet(PacketData); if(pak.IsValid()) Packets.Add(pak); } catch (Exception ex) { Console.WriteLine(ex.ToString()); break; } } MemoryReader.Close(); MemoryBuffer.Close(); MemoryReader.Dispose(); MemoryBuffer.Dispose(); return Packets.ToArray(); }