public void AddReceivePacket(byte[] processedBytes, int length, string message, PacketHandler handler) { byte[] toAdd = new byte[processedBytes.Length]; for (int i = 0; i < length; i++) { toAdd[i] = processedBytes[i]; } Packets.Enqueue(new PacketReceiveSimulation(toAdd, length, message, handler)); Console.WriteLine("Logging Received Packet: " + PacketHandlers.Handlers[handler.PacketID].OnReceive.Method.ToString()); }
public static void Initialize() { m_OldEFHandler = PacketHandlers.GetHandler(0xEF); PacketHandlers.Register(0xEF, 21, false, new Server.Network.OnPacketReceive(LoginServerSeed)); PacketHandlers.Register(Config.EncapsulationHeader, 0, false, new Server.Network.OnPacketReceive(UOExtPacket)); uint ip = (uint)(BitConverter.ToInt32(IPAddress.Parse(Config.IP).GetAddressBytes(), 0)); m_UOExtSupport = new UOExtSupport(); m_UOExtSupport.SetStatic(); m_handler = UOExt.PacketHandler.Instatinate(); Console.WriteLine("UOExt: Adapter started."); }
public static void Initialize() { m_OldEFHandler = PacketHandlers.GetHandler(0xEF); PacketHandlers.Register(0xEF, 21, false, new Server.Network.OnPacketReceive(LoginServerSeed)); PacketHandlers.Register(Config.EncapsulationHeader, 0, false, new Server.Network.OnPacketReceive(UOExtPacket)); uint ip = (uint)(BitConverter.ToInt32(IPAddress.Parse(Config.IP).GetAddressBytes(), 0)); m_UOExtSupport = new UOExtSupport(); m_UOExtSupport.SetStatic(); m_handler = UOExt.PacketHandler.Instatinate(); Console.WriteLine("UOExt: Adapter started."); }
public static void Configure() { EventSink.QuestGumpRequest += XmlQuest.QuestButton; ContentChangeParent = PacketHandlers.GetHandler(0x66); UseReqParent = PacketHandlers.GetHandler(0x06); LookReqParent = PacketHandlers.GetHandler(0x09); PacketHandlers.Register(0x66, 0, true, BaseEntryBook.ContentChange); PacketHandlers.Register(0x06, 5, true, XmlAttach.UseReq); PacketHandlers.Register(0x09, 5, true, XmlAttach.LookReq); #if CLIENT6017 PacketHandlers.Register6017(0x66, 0, true, BaseEntryBook.ContentChange); PacketHandlers.Register6017(0x06, 5, true, XmlAttach.UseReq); PacketHandlers.Register6017(0x09, 5, true, XmlAttach.LookReq); #endif }
public static void Register(int packetID, bool ingame, OnPacketReceive onReceive) { m_Handlers[packetID] = new PacketHandler(packetID, 0, ingame, onReceive); }
public PacketReceiveSimulation(byte[] sentBytes, int length, string message, PacketHandler handler) : base(sentBytes, length, message) { Handler = handler; }
public void AddReceivePacket(byte[] processedBytes, int length, string message, PacketHandler handler) { byte[] toAdd = new byte[processedBytes.Length]; for (int i = 0; i < length; i++) { toAdd[i] = processedBytes[i]; } Packets.Enqueue(new PacketReceiveSimulation(toAdd, length, message, handler)); Console.WriteLine("Logging Received Packet: " + PacketHandlers.Handlers[handler.PacketID].OnReceive.Method.ToString()); }
public static void Register(int packetID, int length, bool ingame, OnPacketReceive onReceive) { m_Handlers[packetID] = new PacketHandler(packetID, length, ingame, onReceive); }
public static void Register(int cmd, bool ingame, OnPacketReceive onReceive) => _handlers[cmd] = new PacketHandler(cmd, 0, ingame, onReceive);
public bool HandleReceive(NetState ns) { ByteQueue buffer = ns.Buffer; if (buffer == null || buffer.Length <= 0) { return(true); } lock ( buffer ) { int length = buffer.Length; if (!ns.Seeded) { if (buffer.GetPacketID() == 0xEF) { // new packet in client 6.0.5.0 replaces the traditional seed method with a seed packet // 0xEF = 239 = multicast IP, so this should never appear in a normal seed. So this is backwards compatible with older clients. ns.Seeded = true; } else if (buffer.Length >= 4) { buffer.Dequeue(m_Peek, 0, 4); int seed = (m_Peek[0] << 24) | (m_Peek[1] << 16) | (m_Peek[2] << 8) | m_Peek[3]; if (seed == 0) { Console.WriteLine("Login: {0}: Invalid client detected, disconnecting", ns); ns.Dispose(); return(false); } ns.m_Seed = seed; ns.Seeded = true; length = buffer.Length; } else { return(true); } } while (length > 0 && ns.Running) { int packetID = buffer.GetPacketID(); if (!ns.SentFirstPacket && packetID != 0xF0 && packetID != 0xF1 && packetID != 0xCF && packetID != 0x80 && packetID != 0x91 && packetID != 0xA4 && packetID != 0xEF) { Console.WriteLine("Client: {0}: Encrypted client detected, disconnecting", ns); ns.Dispose(); break; } PacketHandler handler = ns.GetHandler(packetID); if (handler == null) { byte[] data = new byte[length]; length = buffer.Dequeue(data, 0, length); new PacketReader(data, length, false).Trace(ns); break; } int packetLength = handler.Length; if (packetLength <= 0) { if (length >= 3) { packetLength = buffer.GetPacketLength(); if (packetLength < 3) { ns.Dispose(); break; } } else { break; } } if (length >= packetLength) { if (handler.Ingame && ns.Mobile == null) { Console.WriteLine("Client: {0}: Sent ingame packet (0x{1:X2}) before having been attached to a mobile", ns, packetID); ns.Dispose(); break; } else if (handler.Ingame && ns.Mobile.Deleted) { ns.Dispose(); break; } else { ThrottlePacketCallback throttler = handler.ThrottleCallback; if (throttler != null && !throttler(ns)) { m_Throttled.Enqueue(ns); return(false); } PacketReceiveProfile prof = PacketReceiveProfile.Acquire(packetID); if (prof != null) { prof.Start(); } byte[] packetBuffer; if (BufferSize >= packetLength) { packetBuffer = m_Buffers.AcquireBuffer(); } else { packetBuffer = new byte[packetLength]; } packetLength = buffer.Dequeue(packetBuffer, 0, packetLength); PacketReader r = new PacketReader(packetBuffer, packetLength, handler.Length != 0); handler.OnReceive(ns, r); length = buffer.Length; if (BufferSize >= packetLength) { m_Buffers.ReleaseBuffer(packetBuffer); } if (prof != null) { prof.Finish(packetLength); } } } else { break; } } } return(true); }
public bool HandleReceive(NetState ns) { lock ( ns ) { ByteQueue buffer = ns.Buffer; if (buffer == null) { return(true); } int length = buffer.Length; if (!ns.Seeded) { if (length >= 4) { buffer.Dequeue(m_Peek, 0, 4); int seed = (m_Peek[0] << 24) | (m_Peek[1] << 16) | (m_Peek[2] << 8) | m_Peek[3]; //Console.WriteLine( "Login: {0}: Seed is 0x{1:X8}", ns, seed ); if (seed == 0) { log.Warn(String.Format("Login: {0}: Invalid client detected, disconnecting", ns)); ns.Dispose(); return(false); } ns.m_Seed = seed; ns.Seeded = true; } return(true); } //Console.WriteLine( "{" ); while (length > 0 && ns.Running) { int packetID = buffer.GetPacketID(); if (!ns.SentFirstPacket && packetID != 0xF1 && packetID != 0xCF && packetID != 0x80 && packetID != 0x91 && packetID != 0xA4 && packetID != 0xBF) { log.Warn(String.Format("Client: {0}: Encrypted client detected, disconnecting", ns)); ns.Dispose(); break; } PacketHandler handler = PacketHandlers.GetHandler(packetID); if (handler == null) { byte[] data = new byte[length]; length = buffer.Dequeue(data, 0, length); new PacketReader(data, length, false).Trace(ns); break; } int packetLength = handler.Length; if (packetLength <= 0) { if (length >= 3) { packetLength = buffer.GetPacketLength(); if (packetLength < 3) { ns.Dispose(); break; } } else { break; } } if (length >= packetLength) { if (handler.Ingame && ns.Mobile == null) { log.Warn(String.Format("Client: {0}: Sent ingame packet (0x{1:X2}) before having been attached to a mobile", ns, packetID)); ns.Dispose(); break; } else if (handler.Ingame && ns.Mobile.Deleted) { ns.Dispose(); break; } else { ThrottlePacketCallback throttler = handler.ThrottleCallback; if (throttler != null && !throttler(ns)) { m_Throttled.Enqueue(ns); //Console.WriteLine( "}" ); return(false); } //Console.WriteLine( handler.OnReceive.Method.Name ); PacketProfile profile = PacketProfile.GetIncomingProfile(packetID); DateTime start = (profile == null ? DateTime.MinValue : DateTime.Now); byte[] packetBuffer; if (BufferSize >= packetLength) { packetBuffer = m_Buffers.AquireBuffer(); } else { packetBuffer = new byte[packetLength]; } packetLength = buffer.Dequeue(packetBuffer, 0, packetLength); PacketReader r = new PacketReader(packetBuffer, packetLength, handler.Length != 0); try { handler.OnReceive(ns, r); } catch (Exception e) { log.Fatal(String.Format("Exception disarmed in HandleReceive from {0}", ns.Address), e); } length = buffer.Length; if (BufferSize >= packetLength) { m_Buffers.ReleaseBuffer(packetBuffer); } if (profile != null) { profile.Record(packetLength, DateTime.Now - start); } //Console.WriteLine( "Client: {0}: Unhandled packet 0x{1:X2}", ns, packetID ); //Utility.FormatBuffer( Console.Out, new System.IO.MemoryStream( r.Buffer ), r.Buffer.Length ); } } else { break; } } //Console.WriteLine( "}" ); } return(true); }
public void HandleReceive(NetState ns) { ByteQueue buffer = ns.Buffer; if (buffer == null || buffer.Length <= 0) { return; } lock (buffer) { if (!ns.Seeded && !HandleSeed(ns, buffer)) { return; } int length = buffer.Length; while (length > 0 && ns.Running) { int packetID = buffer.GetPacketID(); if (CheckEncrypted(ns, packetID)) { return; } PacketHandler handler = ns.GetHandler(packetID); if (handler == null) { var data = new byte[length]; length = buffer.Dequeue(data, 0, length); new PacketReader(data, length, false).Trace(ns); return; } int packetLength = handler.Length; if (packetLength <= 0) { if (length >= 3) { packetLength = buffer.GetPacketLength(); if (packetLength < 3) { ns.Dispose(); return; } } else { return; } } if (length < packetLength) { return; } if (handler.Ingame) { if (ns.Mobile == null) { Utility.PushColor(ConsoleColor.Red); Console.WriteLine("Client: {0}: Packet (0x{1:X2}) Requires State Mobile", ns, packetID); Utility.PopColor(); ns.Dispose(); return; } if (ns.Mobile.Deleted) { Utility.PushColor(ConsoleColor.Red); Console.WriteLine("Client: {0}: Packet (0x{1:X2}) Ivalid State Mobile", ns, packetID); Utility.PopColor(); ns.Dispose(); return; } } ThrottlePacketCallback throttler = handler.ThrottleCallback; if (throttler != null) { bool drop; if (!throttler(ns, out drop)) { if (!drop) { m_Throttled.Enqueue(ns); } else { buffer.Dequeue(new byte[packetLength], 0, packetLength); } return; } } PacketReceiveProfile prof = null; if (Core.Profiling) { prof = PacketReceiveProfile.Acquire(packetID); } if (prof != null) { prof.Start(); } byte[] packetBuffer; if (BufferSize >= packetLength) { packetBuffer = m_Buffers.AcquireBuffer(); } else { packetBuffer = new byte[packetLength]; } packetLength = buffer.Dequeue(packetBuffer, 0, packetLength); if (packetBuffer != null && packetBuffer.Length > 0 && packetLength > 0) { PacketReader r = new PacketReader(packetBuffer, packetLength, handler.Length != 0); handler.OnReceive(ns, r); if (BufferSize >= packetLength) { m_Buffers.ReleaseBuffer(packetBuffer); } } if (prof != null) { prof.Finish(packetLength); } length = buffer.Length; } } }
public void HandleReceive(NetState ns) { ByteQueue buffer = ns.Buffer; if (buffer == null || buffer.Length <= 0) { return; } lock (buffer) { if (!ns.Seeded) { if (!HandleSeed(ns, buffer)) { return; } } int length = buffer.Length; while (length > 0 && ns.Running) { int packetID = buffer.GetPacketID(); if (CheckEncrypted(ns, packetID)) { break; } PacketHandler handler = ns.GetHandler(packetID); if (handler == null) { var data = new byte[length]; length = buffer.Dequeue(data, 0, length); new PacketReader(data, length, false).Trace(ns); break; } int packetLength = handler.Length; if (packetLength <= 0) { if (length >= 3) { packetLength = buffer.GetPacketLength(); if (packetLength < 3) { ns.Dispose(); break; } } else { break; } } if (length >= packetLength) { if (handler.Ingame) { if (ns.Mobile == null) { Utility.PushColor(ConsoleColor.DarkRed); Console.WriteLine( "Client: {0}: Sent ingame packet (0x{1:X2}) before having been attached to a mobile", ns, packetID); Utility.PopColor(); ns.Dispose(); break; } else if (ns.Mobile.Deleted) { ns.Dispose(); break; } } ThrottlePacketCallback throttler = handler.ThrottleCallback; if (throttler != null && !throttler(ns)) { m_Throttled.Enqueue(ns); return; } PacketReceiveProfile prof = null; if (Core.Profiling) { prof = PacketReceiveProfile.Acquire(packetID); } if (prof != null) { prof.Start(); } byte[] packetBuffer; if (BufferSize >= packetLength) { packetBuffer = m_Buffers.AcquireBuffer(); } else { packetBuffer = new byte[packetLength]; } packetLength = buffer.Dequeue(packetBuffer, 0, packetLength); PacketReader r = new PacketReader(packetBuffer, packetLength, handler.Length != 0); handler.OnReceive(ns, r); length = buffer.Length; if (BufferSize >= packetLength) { m_Buffers.ReleaseBuffer(packetBuffer); } if (prof != null) { prof.Finish(packetLength); } } else { break; } } } #region Enhance Client // Would be nicer to detect the enhanced client in clientversion.cs // It seems that UOKR-EH sends a version number bigger 66.0.0.0, UOSA-EH bigger 67.0.0.0 try { if (ns.Version.Major > 8) { ns.IsKRClient = true; } } //Standard classic client does not display version this early, so we can rule SA enhanced client out catch { ns.IsKRClient = false; } return; #endregion }
public void HandleReceive(NetState ns) { ByteQueue buffer = ns.Buffer; if (buffer == null || buffer.Length <= 0) { return; } lock (buffer) { if (!ns.Seeded) { if (!HandleSeed(ns, buffer)) { return; } } int length = buffer.Length; while (length > 0 && ns.Running) { int packetID = buffer.GetPacketID(); if (CheckEncrypted(ns, packetID)) { break; } PacketHandler handler = ns.GetHandler(packetID); if (handler == null) { byte[] data = new byte[length]; length = buffer.Dequeue(data, 0, length); new PacketReader(data, length, false).Trace(ns); break; } int packetLength = handler.Length; if (packetLength <= 0) { if (length >= 3) { packetLength = buffer.GetPacketLength(); if (packetLength < 3) { ns.Dispose(); break; } } else { break; } } if (length >= packetLength) { if (handler.Ingame) { if (ns.Mobile == null) { Utility.WriteConsole(ConsoleColor.Yellow, "Client: {0}: Sent ingame packet (0x{1:X2}) before having been attached to a mobile", ns, packetID); ns.Dispose(); break; } else if (ns.Mobile.Deleted) { ns.Dispose(); break; } } ThrottlePacketCallback throttler = handler.ThrottleCallback; if (throttler != null && !throttler(ns)) { m_Throttled.Enqueue(ns); return; } PacketReceiveProfile prof = null; if (Core.Profiling) { prof = PacketReceiveProfile.Acquire(packetID); } if (prof != null) { prof.Start(); } byte[] packetBuffer; if (BufferSize >= packetLength) { packetBuffer = m_Buffers.AcquireBuffer(); } else { packetBuffer = new byte[packetLength]; } packetLength = buffer.Dequeue(packetBuffer, 0, packetLength); PacketReader r = new PacketReader(packetBuffer, packetLength, handler.Length != 0); handler.OnReceive(ns, r); length = buffer.Length; if (BufferSize >= packetLength) { m_Buffers.ReleaseBuffer(packetBuffer); } if (prof != null) { prof.Finish(packetLength); } } else { break; } } } }
public static void Register6017( int packetID, int length, bool ingame, OnPacketReceive onReceive ) { m_6017Handlers[packetID] = new PacketHandler( packetID, length, ingame, onReceive ); }
public PacketReceiveSimulation(byte[] sentBytes, int length, string message, PacketHandler handler) : base(sentBytes, length, message) { Handler = handler; }
public static void RegisterExtended( int packetID, bool ingame, OnPacketReceive onReceive ) { if ( packetID >= 0 && packetID < 0x100 ) m_ExtendedHandlersLow[packetID] = new PacketHandler( packetID, 0, ingame, onReceive ); else m_ExtendedHandlersHigh[packetID] = new PacketHandler( packetID, 0, ingame, onReceive ); }
public static void Register(int packetID, bool ingame, OnPacketReceive onReceive) { _handlers[packetID] = new PacketHandler(packetID, 0, ingame, onReceive); }