From 0b19ae183e146ad8d50d95f196e98333514b29e0 Mon Sep 17 00:00:00 2001 From: zippy Date: Tue, 27 Nov 2007 02:28:55 +0000 Subject: [PATCH] Support for client 6.0.5.0. The satisfies my yearly RunUO commit for 2007. :-P --- Server/Network/MessagePump.cs | 10 ++++++++-- Server/Network/PacketHandlers.cs | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/Server/Network/MessagePump.cs b/Server/Network/MessagePump.cs index 355da4bb6..29cce78f4 100644 --- a/Server/Network/MessagePump.cs +++ b/Server/Network/MessagePump.cs @@ -152,7 +152,13 @@ namespace Server.Network if ( !ns.Seeded ) { - if ( buffer.Length >= 4 ) + 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 ); @@ -180,7 +186,7 @@ namespace Server.Network { int packetID = buffer.GetPacketID(); - if ( !ns.SentFirstPacket && packetID != 0xF0 && packetID != 0xF1 && packetID != 0xCF && packetID != 0x80 && packetID != 0x91 && packetID != 0xA4 ) + 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(); diff --git a/Server/Network/PacketHandlers.cs b/Server/Network/PacketHandlers.cs index 6168eac16..a6f89d8ec 100644 --- a/Server/Network/PacketHandlers.cs +++ b/Server/Network/PacketHandlers.cs @@ -147,6 +147,7 @@ namespace Server.Network Register( 0xD1, 2, true, new OnPacketReceive( LogoutReq ) ); Register( 0xD6, 0, true, new OnPacketReceive( BatchQueryProperties ) ); Register( 0xD7, 0, true, new OnPacketReceive( EncodedCommand ) ); + Register( 0xEF, 21, false, new OnPacketReceive( LoginServerSeed ) ); Register6017( 0x08, 15, true, new OnPacketReceive( DropReq6017 ) ); @@ -2231,6 +2232,26 @@ namespace Server.Network } } + public static void LoginServerSeed( NetState state, PacketReader pvSrc ) + { + state.m_Seed = pvSrc.ReadInt32(); + state.Seeded = true; + + if ( state.m_Seed == 0 ) + { + Console.WriteLine("Login: {0}: Invalid client detected, disconnecting", state); + state.Dispose(); + return; + } + + int clientMaj = pvSrc.ReadInt32(); + int clientMin = pvSrc.ReadInt32(); + int clientRev = pvSrc.ReadInt32(); + int clientPat = pvSrc.ReadInt32(); + + state.Version = new ClientVersion( clientMaj, clientMin, clientRev, clientPat ); + } + public static void AccountLogin( NetState state, PacketReader pvSrc ) { if ( state.SentFirstPacket )