rendered paste bodytry {
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);