All pastes #551273 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-06-08 18:51 UTC
rendered paste body
try {
			fillInStream(2);
			if(inStream.readUnsignedByte() != 14) {
				shutdownError("Expected Login ID 14 From Client.");
				disconnected = true;
				return;
			}

			int namePart = inStream.readUnsignedByte();
			for(int i = 0; i < 8; i++) out.write(0);
			out.write(0);

			outStream.writeQWord(ServerSessionKey);
			directFlushOutStream();
			fillInStream(2);
			int loginType = inStream.readUnsignedByte();
			if(loginType != 16 && loginType != 18) {
				shutdownError("Unexpected Login Type "+loginType);
				return;
			}
			int loginPacketSize = inStream.readUnsignedByte();
			int loginEncryptPacketSize = loginPacketSize-(36+1+1+2);
			Misc.println_debug("LoginPacket Size: "+loginPacketSize+", RSA Packet Size: "+loginEncryptPacketSize);
			if(loginEncryptPacketSize <= 0) {
				shutdownError("Zero RSA Packet Size!");
				return;
			}
			fillInStream(loginPacketSize);
			if(inStream.readUnsignedByte() != 255 || inStream.readUnsignedWord() != 377) {
				shutdownError("Wrong Login Packet Magic ID (Expected 255, 377)");
				return;
			}
			lowMemoryVersion = inStream.readUnsignedByte();
			Misc.println_debug("Client Type: "+((lowMemoryVersion==1) ? "Low" : "High")+" Memory Version");
			for(int i = 0; i < 9; i++) {
				Misc.println_debug("dataFileVersion["+i+"]: 0x"+Integer.toHexString(inStream.readDWord()));
			}

			loginEncryptPacketSize--;		// don't count length byte
			int tmp = inStream.readUnsignedByte();
			if(loginEncryptPacketSize != tmp) {
				shutdownError("Encrypted Packet Data Length ("+loginEncryptPacketSize+") Different From Length Byte Thereof ("+tmp+")");
				return;
			}

			ClientSessionKey = inStream.readQWord();
			ServerSessionKey = inStream.readQWord();
			Misc.println("UserID: "+inStream.readDWord());

			int sessionKey[] = new int[4];
			sessionKey[0] = (int)(ClientSessionKey >> 32);
			sessionKey[1] = (int)ClientSessionKey;
			sessionKey[2] = (int)(ServerSessionKey >> 32);
			sessionKey[3] = (int)ServerSessionKey;

			for(int i = 0; i < 4; i++)
				Misc.println_debug("inStreamSessionKey["+i+"]: 0x"+Integer.toHexString(sessionKey[i]));

			inStreamDecryption = new KeySet(sessionKey);
			for(int i = 0; i < 4; i++) sessionKey[i] += 50;

			for(int i = 0; i < 4; i++)
				Misc.println_debug("outStreamSessionKey["+i+"]: 0x"+Integer.toHexString(sessionKey[i]));

			outStreamDecryption = new KeySet(sessionKey);
			outStream.packetEncryption = outStreamDecryption;

				returnCode = 2;

			if(playerId == -1) out.write(7);
			else out.write(returnCode);
			out.write(playerRights);
			out.write(0);