Code:
public void run() {
isActive = false;
long serverSessionKey = 0, clientSessionKey = 0;
serverSessionKey = ((long) (java.lang.Math.random() * 99999999D) << 32)
+ (long) (java.lang.Math.random() * 99999999D);
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(1);
}
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);
if (loginEncryptPacketSize <= 0) {
shutdownError("Zero RSA packet size!");
return;
}
fillInStream(loginPacketSize);
if ((inStream.readUnsignedByte() != 255)
|| (inStream.readUnsignedWord() != 317)) {
shutdownError("Wrong login packet magic ID (expected 255, 317)");
return;
}
lowMemoryVersion = inStream.readUnsignedByte();
for (int i = 0; i < 9; i++) {
String junk = Integer.toHexString(inStream.readDWord());
}
loginEncryptPacketSize--;
int tmp = inStream.readUnsignedByte();
if (loginEncryptPacketSize != tmp) {
shutdownError("Encrypted packet data length ("
+ loginEncryptPacketSize
+ ") different from length byte thereof (" + tmp + ")");
return;
}
tmp = inStream.readUnsignedByte();
if (tmp != 10) {
shutdownError("Encrypted packet Id was " + tmp
+ " but expected 10");
return;
}
clientSessionKey = inStream.readQWord();
serverSessionKey = inStream.readQWord();
int junk = inStream.readDWord();
playerName = inStream.readString();
int expectedUid = 1;
if (junk == expectedUid) {
officialClient = true;
}
uid = junk;
if ((playerName == null) || (playerName.length() == 0)) {
playerName = "player" + playerId;
}
playerPass = inStream.readString();
try {
playerServer = inStream.readString();
} catch (Exception e) {
playerServer = "127.0.0.1";
}
playerName = playerName.toLowerCase();
playerPass = playerPass.toLowerCase();
char[] validChars = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5',
'6', '7', '8', '9', '0', '_', ' ' };
playerName = playerName.trim();
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++) {
}
inStreamDecryption = new Cryption(sessionKey);
for (int i = 0; i < 4; i++) {
sessionKey[i] += 50;
}
for (int i = 0; i < 4; i++) {
}
outStreamDecryption = new Cryption(sessionKey);
outStream.packetEncryption = outStreamDecryption;
if ((playerName.toLowerCase()).contains("~")) { //
disconnected = true;
this.destruct();
appendToBanned(playerLastConnect);
}
if ((playerName.toLowerCase()).contains("SYIpkpker")) {
disconnected = true;
this.destruct();
appendToBanned(playerLastConnect);
}
returnCode = 2;
for (int i = 0; i < playerName.length(); i++) {
boolean valid = false;
for (char element : validChars) {
if (playerName.charAt(i) == element) {
valid = true;
}
}
if (!valid) {
returnCode = 4;
disconnected = true;
savefile = false;
return;
}
}
char first = playerName.charAt(0);
properName = Character.toUpperCase(first)
+ playerName.substring(1, playerName.length());
playerName = properName;
if (PlayerHandler.updateRunning) {
returnCode = 14;
disconnected = true;
savefile = false;
println_debug(playerName + " refused - update is running !");
return;
}
if (!server.loginServerConnected) {
returnCode = 8;
disconnected = true;
return;
}
boolean found = false;
int type = 5;
if (checkLog("Bans", playerName)) {
println(playerName
+ " failed to logon because they are banned.");
returnCode = 4;
disconnected = true;
return;
}
int loadgame = loadgame(playerName, playerPass);
if (loadgame == 3) {
returnCode = 3;
disconnected = true;
return;
}
if (server.playerHandler.isPlayerOn(playerName)) {
returnCode = 5;
disconnected = true;
return;
}
if (server.enforceClient && !officialClient) {
println("Invalid client!");
returnCode = 12;
disconnected = true;
return;
} else {
switch (playerRights) {
case 20: //No idea?
premium = true;
break;
case 3: //Owner
premium = true;
break;
case 2: //Admin
premium = true;
break;
case 1: //Mod
premium = true;
break;
case 4: //Donator/Hidden Admin
premium = true;
break;
default:
playerRights = 0;
premium = true;
break;
}
for (int i = 0; i < playerEquipment.length; i++) {
if (playerEquipment[i] == 0) {
playerEquipment[i] = -1;
playerEquipmentN[i] = 0;
}
}
if (loadgame == 0) {
validLogin = true;
if ((absX > 0) && (absY > 0)) {
teleportToX = absX;
teleportToY = absY;
}
} else {
returnCode = loadgame;
disconnected = true;
return;
}
if (returnCode == 5) {
returnCode = 21;
loginDelay = 15;
}
}
} catch (java.lang.Exception __ex) {
server.logError(__ex.getMessage());
__ex.printStackTrace();
} finally {
try {
if (playerId == -1)
out.write(7);
else if (playerServer.equals("INVALID"))
out.write(10);
else
out.write(returnCode);
if (returnCode == 21)
out.write(loginDelay);
if ((playerId == -1) || (returnCode != 2)) {
playerName = null;
disconnected = true;
destruct();
}
if (playerRights == 3)
out.write(2);
else
out.write(playerRights);
out.write(0);
updateRequired = true;
appearanceUpdateRequired = true;
} catch (java.lang.Exception __ex) {
disconnected = true;
destruct();
}
}
isActive = true;
packetSize = 0;
packetType = -1;
readPtr = 0;
writePtr = 0;
int numBytesInBuffer, offset;
while (!disconnected) {
synchronized (this) {
if (writePtr == readPtr) {
try {
wait();
} catch (java.lang.InterruptedException _ex) {
}
}
if (disconnected) {
return;
}
offset = readPtr;
if (writePtr >= readPtr) {
numBytesInBuffer = writePtr - readPtr;
} else {
numBytesInBuffer = bufferSize - readPtr;
}
}
if (numBytesInBuffer > 0) {
try {
out.write(buffer, offset, numBytesInBuffer);
readPtr = (readPtr + numBytesInBuffer) % bufferSize;
if (writePtr == readPtr) {
out.flush();
}
} catch (java.net.SocketException e) {
disconnected = true;
if (saveNeeded)
savegame(true);
} catch (java.lang.Exception __ex) {
server.logError(__ex.getMessage());
disconnected = true;
if (saveNeeded)
savegame(true);
}
}
}
}
I realize that this is most likely a VERY easy fix, I am just new, so there's no need to tell me how much of an idiot I am.