public string Dump() { StringBuilder str = new StringBuilder(); str.AppendLine(GetType().ToString() + " dump:"); IPAddress ipAddress = new IPAddress(address); str.AppendFormat("Socket: {0} Address: {1},{2}\n", socket, ipAddress, port); str.AppendFormat("Seed: {0}\nPredefined messages pending: {1}\n", seed, predefinedClientMsgs != null); str.AppendFormat("Client encryption: {0}\nServer encryption: {1}\n", clientEncryption, serverEncryption); str.AppendLine(); if (fromClientBuffer != null) { str.Append("Client->Phoenix part buffer: " + PacketLogging.BuildString(fromClientBuffer)); } if (fromServerBuffer != null) { str.Append("Server->Phoenix part buffer: " + PacketLogging.BuildString(fromServerBuffer)); } str.AppendLine(); if (toClientBuffer.Count > 0) { str.AppendLine("Phoenix->Client pending messages:"); foreach (byte[] data in toClientBuffer) { str.Append(PacketLogging.BuildString(data)); } } else { str.AppendLine("Phoenix->Client: No messages pending."); } if (toServerBuffer.Count > 0) { str.AppendLine("Phoenix->Server pending messages:"); foreach (byte[] data in toServerBuffer) { str.Append(PacketLogging.BuildString(data)); } } else { str.AppendLine("Phoenix->Server: No messages pending."); } str.AppendLine(); return(str.ToString()); }
public void SendToClient(byte[] data) { lock (sendSync) { PacketLogging.Write(PacketDirection.PhoenixToClient, data); if (!CheckPacketIntegrity(data)) { throw new SocketException("Packet integrity error.", this, data); } if (PacketFilter.OnServerMessage(data)) { return; } byte[] encryptedBuffer = clientEncryption.Encrypt(data); toClientBuffer.Add(encryptedBuffer); } }
private byte[] ReadPacket(byte[] buffer, int msgLen, ref int offset, bool fromServer) { if (offset + msgLen <= buffer.Length) { byte[] msg = new byte[msgLen]; Array.Copy(buffer, offset, msg, 0, msgLen); offset += msgLen; if (fromServer) { PacketLogging.Write(PacketDirection.ServerToPhoenix, msg); bool eat = OnServerMessage(msg); if (!eat) { SendToClient(msg); } } else { PacketLogging.Write(PacketDirection.ClientToPhoenix, msg); bool eat = OnClientMessage(msg); if (!eat) { SendToServer(msg); } } return(null); } else { // Part message int partLen = buffer.Length - offset; byte[] partBuffer = new byte[partLen]; Array.Copy(buffer, offset, partBuffer, 0, partLen); offset += partLen; return(partBuffer); } }
internal SocketException(string message, UltimaSocket socket, byte[] data, Exception inner) : base(message, inner) { socketDump = socket.Dump(); socketDump += "Current data:\n" + PacketLogging.BuildString(data); }