/// <summary> /// Handles the initial packet sent by the server /// </summary> static public void Handle_SC_Initial(SC_Initial pkt, Client client) { //Has he already been initialized? if (client._bInitialized) { //Make a note Log.write(TLog.Warning, "Server attempted to initialize connection twice."); //client.destroy(); return; } client._C2S_UDPSize = Client.udpMaxSize; client._S2C_UDPSize = pkt.serverUDPMax; client._connectionID = pkt.connectionID; //Set up our CRC state client._CRCLength = pkt.CRCLen; client._CRC_C2S.key = (uint)pkt.CRCSeed; client._CRC_S2C.key = (uint)pkt.CRCSeed; //Enable CRC! client._CRC_C2S.bActive = (pkt.CRCLen > 0); client._CRC_S2C.bActive = (pkt.CRCLen > 0); //We're now initialized client._bInitialized = true; }
{ /// <summary> /// Handles the initial packet sent by the server /// </summary> static public void Handle_SC_Initial(SC_Initial pkt, Client client) { //We will be sending out state packet only once, as the sync doesn't //really matter on the Zone -> Database connection CS_State csi = new CS_State(); csi.tickCount = (ushort)Environment.TickCount; csi.packetsSent = client._packetsSent; csi.packetsReceived = client._packetsReceived; client.send(csi); }
/// <summary> /// Handles the initial packet sent by the server /// </summary> static public void Handle_SC_Initial(SC_Initial pkt, Client client) { CS_State csi = new CS_State(); csi.tickCount = (ushort)Environment.TickCount; csi.packetsSent = client._packetsSent; csi.packetsReceived = client._packetsReceived; client.send(csi); }
{ /// <summary> /// Handles the initial packet sent by the client /// </summary> static public void Handle_CS_Initial(CS_Initial pkt, Client client) { //Has he already been initialized? if (client._bInitialized) { //Make a note Log.write(TLog.Warning, "Client " + client + " attempted to initialize connection twice."); client.destroy(); return; } client._C2S_UDPSize = pkt.udpMaxPacket; client._connectionID = pkt.connectionID; //Set up our CRC keys int CRCKey = new Random().Next(); client._CRC_C2S.key = (uint)CRCKey; client._CRC_S2C.key = (uint)CRCKey; //Send our initial login packet SC_Initial sci = new SC_Initial(); sci.connectionID = pkt.connectionID; sci.CRCSeed = CRCKey; client._CRCLength = sci.CRCLen = (byte)Client.crcLength; sci.serverUDPMax = Client.udpMaxSize; sci.unk1 = 2; client.send(sci); //Enable CRC! client._CRC_C2S.bActive = true; client._CRC_S2C.bActive = true; //He's now initialized client._bInitialized = true; }
{ /// <summary> /// Creates a new system protocol packet. /// </summary> public PacketBase createSystemPacket(ushort typeID, byte[] buffer, int offset, int size) { //Ready our packet base PacketBase packet = null; offset++; size--; //What are we dealing with? switch (typeID) { case SC_Initial.TypeID: packet = new SC_Initial(typeID, buffer, offset, size); break; case SC_Login.TypeID: packet = new SC_Login(typeID, buffer, offset, size); break; case SC_State.TypeID: packet = new SC_State(typeID, buffer, offset, size); break; case SC_PatchInfo.TypeID: packet = new SC_PatchInfo(typeID, buffer, offset, size); break; case SC_AssetInfo.TypeID: packet = new SC_AssetInfo(typeID, buffer, offset, size); break; case SC_SetIngame.TypeID: packet = new SC_SetIngame(typeID, buffer, offset, size); break; case SC_Chat.TypeID: packet = new SC_Chat(typeID, buffer, offset, size); break; case BoxPacket.TypeID: packet = new BoxPacket(typeID, buffer, offset, size); break; case Disconnect.TypeID: packet = new Disconnect(typeID, buffer, offset, size); break; case PingPacket.TypeID: packet = new PingPacket(typeID, buffer, offset, size); break; case Reliable.TypeID: packet = new Reliable(typeID, buffer, offset, size, 0); break; case Reliable.TypeID + 1: packet = new Reliable(typeID, buffer, offset, size, 1); break; case Reliable.TypeID + 2: packet = new Reliable(typeID, buffer, offset, size, 2); break; case Reliable.TypeID + 3: packet = new Reliable(typeID, buffer, offset, size, 3); break; case OutOfSync.TypeID: packet = new OutOfSync(typeID, buffer, offset, size, 0); break; case OutOfSync.TypeID + 1: packet = new OutOfSync(typeID, buffer, offset, size, 1); break; case OutOfSync.TypeID + 2: packet = new OutOfSync(typeID, buffer, offset, size, 2); break; case OutOfSync.TypeID + 3: packet = new OutOfSync(typeID, buffer, offset, size, 3); break; case ReliableEcho.TypeID: packet = new ReliableEcho(typeID, buffer, offset, size, 0); break; case ReliableEcho.TypeID + 1: packet = new ReliableEcho(typeID, buffer, offset, size, 1); break; case ReliableEcho.TypeID + 2: packet = new ReliableEcho(typeID, buffer, offset, size, 2); break; case ReliableEcho.TypeID + 3: packet = new ReliableEcho(typeID, buffer, offset, size, 3); break; case ReliableBox.TypeID: packet = new ReliableBox(typeID, buffer, offset, size, 0); break; case ReliableBox.TypeID + 1: packet = new ReliableBox(typeID, buffer, offset, size, 1); break; case ReliableBox.TypeID + 2: packet = new ReliableBox(typeID, buffer, offset, size, 2); break; case ReliableBox.TypeID + 3: packet = new ReliableBox(typeID, buffer, offset, size, 3); break; case DataPacketRcv.TypeID: packet = new DataPacketRcv(typeID, buffer, offset, size, 0); break; case DataPacketRcv.TypeID + 1: packet = new DataPacketRcv(typeID, buffer, offset, size, 1); break; case DataPacketRcv.TypeID + 2: packet = new DataPacketRcv(typeID, buffer, offset, size, 2); break; case DataPacketRcv.TypeID + 3: packet = new DataPacketRcv(typeID, buffer, offset, size, 3); break; default: //An undefined packet. packet = new PacketDummy(typeID, buffer, offset, size); break; } return(packet); }