public static void ExtendedCommand(NetState state, PacketReader pvSrc) { int packetID = pvSrc.ReadUInt16(); PacketHandler ph = GetExtendedHandler(packetID); if (ph != null) { if (ph.Ingame && state.Mobile == null) { Console.WriteLine("Client: {0}: Sent ingame packet (0xBFx{1:X2}) before having been attached to a mobile", state, packetID); state.Dispose(); } else if (ph.Ingame && state.Mobile.Deleted) { state.Dispose(); } else { ph.OnReceive(state, pvSrc); } } else { pvSrc.Trace(state); } }
private static void OnHandshakeResponse(NetState state, PacketReader pvSrc) { pvSrc.Trace(state); if (state == null || state.Mobile == null || !state.Running) return; Timer t; Mobile m = state.Mobile; if (m_Dictionary.TryGetValue(m, out t)) { if (t != null) t.Stop(); m_Dictionary.Remove(m); } }
public static void OnPacket( NetState state, PacketReader pvSrc ) { MahjongGame game = World.FindItem( pvSrc.ReadInt32() ) as MahjongGame; if ( game != null ) game.Players.CheckPlayers(); pvSrc.ReadByte(); int cmd = pvSrc.ReadByte(); OnMahjongPacketReceive onReceive = GetSubCommandDelegate( cmd ); if ( onReceive != null ) { onReceive( game, state, pvSrc ); } else { pvSrc.Trace( state ); } }
public static void MobileQuery2(NetState state, PacketReader pvSrc) { Mobile from = state.Mobile; pvSrc.ReadInt32(); // 0xEDEDEDED int type = pvSrc.ReadByte(); Mobile m = World.FindMobile(pvSrc.ReadInt32()); if (m != null) { switch (type) { case 0x00: // Unknown, sent by godclient { if ( PacketHandlers.VerifyGC( state ) ) Console.WriteLine( "God Client: {0}: Query 0x{1:X2} on {2} '{3}'", state, type, m.Serial, m.Name ); break; } case 0x04: // Stats { m.OnStatsQuery( from ); break; } case 0x05: { m.SendGump( new TMSS.ParallelSkillsGump( m ) ); break; } default: { pvSrc.Trace( state ); break; } } } }
public static void GameCentralMoniter( NetState state, PacketReader pvSrc ) { if ( VerifyGC( state ) ) { int type = pvSrc.ReadByte(); int num1 = pvSrc.ReadInt32(); Console.WriteLine( "God Client: {0}: Game central moniter", state ); Console.WriteLine( " - Type: {0}", type ); Console.WriteLine( " - Number: {0}", num1 ); pvSrc.Trace( state ); } }
public static void EncodedCommand( NetState state, PacketReader pvSrc ) { IEntity e = World.FindEntity( pvSrc.ReadInt32() ); int packetID = pvSrc.ReadUInt16(); EncodedPacketHandler ph = GetEncodedHandler( packetID ); if ( ph != null ) { if ( ph.Ingame && state.Mobile == null ) { Console.WriteLine( "Client: {0}: Sent ingame packet (0xD7x{1:X2}) before having been attached to a mobile", state, packetID ); state.Dispose(); } else if ( ph.Ingame && state.Mobile.Deleted ) { state.Dispose(); } else { ph.OnReceive( state, e, new EncodedReader( pvSrc ) ); } } else { pvSrc.Trace( state ); } }
public static void PartyMessage( NetState state, PacketReader pvSrc ) { if ( state.Mobile == null ) return; switch ( pvSrc.ReadByte() ) { case 0x01: PartyMessage_AddMember( state, pvSrc ); break; case 0x02: PartyMessage_RemoveMember( state, pvSrc ); break; case 0x03: PartyMessage_PrivateMessage( state, pvSrc ); break; case 0x04: PartyMessage_PublicMessage( state, pvSrc ); break; case 0x06: PartyMessage_SetCanLoot( state, pvSrc ); break; case 0x08: PartyMessage_Accept( state, pvSrc ); break; case 0x09: PartyMessage_Decline( state, pvSrc ); break; default: pvSrc.Trace( state ); break; } }
public static void ExtendedCommand( NetState state, PacketReader pvSrc ) { int packetID = pvSrc.ReadUInt16(); PacketHandler ph = GetExtendedHandler( packetID ); if ( ph != null ) { if ( ph.Ingame && state.Mobile == null ) { Console.WriteLine( "Client: {0}: Sent ingame packet (0xBFx{1:X2}) before having been attached to a mobile", state, packetID ); state.Dispose(); } else if ( ph.Ingame && state.Mobile.Deleted ) { state.Dispose(); } else { ph.OnReceive( state, pvSrc ); } } else { pvSrc.Trace( state ); } }
public static void NewAnimData( NetState state, PacketReader pvSrc ) { if ( VerifyGC( state ) ) { log.InfoFormat("God Client: {0}: New tile animation", state); pvSrc.Trace( state ); } }
public static void GameCentralMoniter( NetState state, PacketReader pvSrc ) { if ( VerifyGC( state ) ) { int type = pvSrc.ReadByte(); int num1 = pvSrc.ReadInt32(); log.InfoFormat("God Client: {0}: Game central moniter; Type={1} Number={2}", state, type, num1); pvSrc.Trace( state ); } }
private void OnReceived(NetState state, ByteQueue buffer, out bool throttle) { throttle = false; GameClient client; if (!m_Clients.TryGetValue(state, out client)) { Logger.Error("Inconsistent game server state: game client for {0} not found", state); return; } if (!client.Seeded) { if (buffer.GetPacketID() == 0xEF) { client.Seeded = true; } else if (buffer.Length >= 4) { byte[] peek = new byte[4]; buffer.Dequeue(peek, 0, 4); int seed = (peek[0] << 24) | (peek[1] << 16) | (peek[2] << 8) | peek[3]; if (seed == 0) { Console.WriteLine("Login: {0}: Invalid client detected, disconnecting", client); client.Dispose(); return; } client.m_Seed = seed; client.Seeded = true; } else { return; // Need at least 4 bytes for the seed } } int length = buffer.Length; while (length > 0 && buffer.Length > 0) { int packetID = buffer.GetPacketID(); if (!client.SentFirstPacket && packetID != 0xF1 && packetID != 0xCF && packetID != 0x80 && packetID != 0x91 && packetID != 0xA4 && packetID != 0xEF) { Console.WriteLine("Client: {0}: Encrypted client detected, disconnecting", client); client.Dispose(); return; } PacketHandler handler = m_Handlers.GetHandler(packetID); if (handler == null) { byte[] data = new byte[length]; length = buffer.Dequeue(data, 0, length); if (Environment.Logging) { PacketReader reader = PacketReader.CreateInstance(data, length, false); reader.Trace(client); PacketReader.ReleaseInstance(reader); } return; } int packetLength = handler.Length; if (packetLength == 0) { // Dynamic length packet. Need at leaset 3 bytes (1 packet cmd + 2 length) if (length >= 3) { packetLength = buffer.GetPacketLength(); if (packetLength < 3) { client.Dispose(); return; } } else { break; } } if (length >= packetLength) { if (handler.Ingame && client.Mobile == null) { Console.WriteLine("Client: {0}: Sent ingame packet (0x{1:X2}) before having been attached to a mobile", client, packetID); client.Dispose(); return; } else if (handler.Ingame && client.Mobile.Deleted) { client.Dispose(); return; } else { ThrottlePacketCallback throttler = handler.ThrottleCallback; if (throttler != null && !throttler(client)) { throttle = true; return; } PacketProfile profile = PacketProfile.GetIncomingProfile(packetID); DateTime start = (profile == null ? DateTime.MinValue : DateTime.Now); byte[] packetBuffer; if (BufferSize >= packetLength) { packetBuffer = m_Buffers.AcquireBuffer(); } else { packetBuffer = new byte[packetLength]; } packetLength = buffer.Dequeue(packetBuffer, 0, packetLength); PacketReader reader = PacketReader.CreateInstance(packetBuffer, packetLength, handler.Length != 0); try { handler.OnReceive(client, reader); } catch (Exception e) { Logger.Error("Exception disarmed in HandleReceive from {0}: {1}", client.Address, e); } PacketReader.ReleaseInstance(reader); length = buffer.Length; if (BufferSize >= packetLength) { m_Buffers.ReleaseBuffer(packetBuffer); } if (profile != null) { profile.Record(packetLength, DateTime.Now - start); } } } else { break; } } }
public void Trace(NetState state) { m_Reader.Trace(state); }
private static void OnHandshakeResponse( NetState state, PacketReader pvSrc ) { pvSrc.Trace( state ); if ( state == null || state.Mobile == null || !state.Running ) return; Mobile m = state.Mobile; Timer t = null; if ( m_Table.Contains( m ) ) { t = m_Table[m] as Timer; if ( t != null ) t.Stop(); m_Table.Remove( m ); } }
private static void OnHandshakeResponse(NetState state, PacketReader pvSrc) { pvSrc.Trace(state); if (state == null || state.Mobile == null || !state.Running) { return; } Mobile m = state.Mobile; if (!_Dictionary.ContainsKey(m)) { return; } Timer t = _Dictionary[m]; if (t != null) { t.Stop(); } _Dictionary.Remove(m); }
public static void GMSingle( NetState state, PacketReader pvSrc ) { if ( VerifyGC( state ) ) pvSrc.Trace( state ); }
public static void MobileQuery( NetState state, PacketReader pvSrc ) { Mobile from = state.Mobile; pvSrc.ReadInt32(); // 0xEDEDEDED int type = pvSrc.ReadByte(); Mobile m = World.FindMobile( pvSrc.ReadInt32() ); if ( m != null ) { switch ( type ) { case 0x00: // Unknown, sent by godclient { if ( VerifyGC( state ) ) log.InfoFormat("God Client: {0}: Query 0x{1:X2} on {2} '{3}'", state, type, m.Serial, m.Name); break; } case 0x04: // Stats { m.OnStatsQuery( from ); break; } case 0x05: { m.OnSkillsQuery( from ); break; } default: { pvSrc.Trace( state ); break; } } } }
public static void NewAnimData( NetState state, PacketReader pvSrc ) { if ( VerifyGC( state ) ) { Console.WriteLine( "God Client: {0}: New tile animation", state ); pvSrc.Trace( state ); } }
public void GMSingle( GameClient state, PacketReader pvSrc ) { if ( VerifyGC( state ) ) pvSrc.Trace( state ); }