public ClientConnection(Socket pSocket) : base(pSocket) { uniqueid = Program.Random.Next(0, 10000); Pong = true; IsFake = false; Program.Clients.Add(this); Clear(); _exporter = new MSBExporter(); Logger_WriteLine("Client Connected!"); byte[] sendkey = new byte[32], recvkey = new byte[32]; Program.Random.NextBytes(sendkey); Program.Random.NextBytes(recvkey); using (MaplePacket pack = new MaplePacket(MaplePacket.CommunicationType.ServerPacket, 0xEEFF)) { pack.WriteString(Logger.Version); // Add encryption keys pack.WriteBytes(recvkey); pack.WriteBytes(sendkey); for (byte i = 0; i < (byte)MaplePacket.CommunicationType.AMOUNT; i++) { pack.WriteUShort((ushort)Program.ValidHeaders[i].Keys.Count); foreach (var header in Program.ValidHeaders[i].Keys) pack.WriteUShort(header); } pack.WriteByte((byte)Program.AcceptedIPs.Count); foreach (string ip in Program.AcceptedIPs) pack.WriteString(ip); #if LOCALE_GMS pack.WriteBool(true); pack.WriteBytes(GMSKeys.GetKeyForVersion()); #elif LOCALE_KMS pack.WriteBool(false); #else pack.WriteBool(true); pack.WriteBytes(new byte[] { 0x13, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00 }); #endif pack.WriteByte(ServerMapleInfo.LOCALE); pack.WriteUShort(ServerMapleInfo.VERSION); SendPacket(pack); } SetKeys(sendkey, recvkey); SendInfoText("Welcome! Please open MapleStory."); }
public void ForwardPacket(MaplePacket.CommunicationType pType, MaplePacket pPacket) { pPacket.Reset(); ushort header = pPacket.ReadUShort(); if (!_validHeaders[(byte)pType].Contains(header)) { return; } using (MaplePacket packet = new MaplePacket(pType, header)) { packet.WriteBytes(pPacket.ReadLeftoverBytes()); SendPacket(packet); } }