Beispiel #1
0
        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());
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
 internal SocketException(string message, UltimaSocket socket, byte[] data, Exception inner)
     : base(message, inner)
 {
     socketDump  = socket.Dump();
     socketDump += "Current data:\n" + PacketLogging.BuildString(data);
 }