rendered paste bodyIndex: java/net/sf/l2j/loginserver/ClientThread.java
===================================================================
--- java\net\sf\l2j\loginserver\ClientThread.java (revision 1346)
+++ java\net\sf\l2j\loginserver\ClientThread.java (working copy)
@@ -33,6 +33,7 @@
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.ClientScheduler;
import net.sf.l2j.loginserver.clientpackets.RequestAuthLogin;
+import net.sf.l2j.loginserver.clientpackets.RequestAuthLogin2;
import net.sf.l2j.loginserver.clientpackets.RequestServerLogin;
import net.sf.l2j.loginserver.serverpackets.Init;
import net.sf.l2j.loginserver.serverpackets.LoginFail;
@@ -41,6 +42,8 @@
import net.sf.l2j.loginserver.serverpackets.ServerBasePacket;
import net.sf.l2j.loginserver.serverpackets.ServerList;
+import java.io.File;
+import java.io.FileInputStream;
/**
* This class ...
*
@@ -94,6 +97,7 @@
int lengthLo =0;
int length = 0;
boolean checksumOk = false;
+ boolean oldcrypt = false;
int sessionKey = -1;
String account = null;
@@ -148,12 +152,18 @@
decrypt = _crypt.decrypt(decrypt);
checksumOk = _crypt.checksum(decrypt);
- if (!checksumOk)
- {
- //_log.warning("Incorrect packet checksum, closing connection..");
- _log.warning("Client is not using latest Authentication method. (Min is 557)");
- break;
- }
+ if (!checksumOk)
+ {
+ _crypt = new NewCrypt("[;'.]94-31==-%&@!^+]\000");
+ System.arraycopy(incoming, 2, decrypt, 0, decrypt.length);
+ // decrypt if we have a key
+ decrypt = _crypt.decrypt(decrypt);
+ checksumOk = _crypt.checksum(decrypt);
+ oldcrypt = true;
+ if (!checksumOk){
+ _log.warning("Incorrect packet checksum, closing connection..");
+ break;}
+ }
if (Config.DEBUG)
_log.warning("[C]\n"+printData(decrypt, decrypt.length));
@@ -163,7 +173,8 @@
{
case 00:
{
- RequestAuthLogin ral = new RequestAuthLogin(decrypt, _logins.getPrivateKey());
+ if (!oldcrypt)
+ {RequestAuthLogin ral = new RequestAuthLogin(decrypt, _logins.getPrivateKey());
account = ral.getUser().toLowerCase();
if (Config.DEBUG) _log.fine("RequestAuthLogin from user:" + account);
@@ -226,7 +237,72 @@
break;
}
-
+ if (oldcrypt)
+ {
+ RequestAuthLogin2 ral = new RequestAuthLogin2(decrypt);
+ account = ral.getUser().toLowerCase();
+ if (Config.DEBUG) _log.fine("RequestAuthLogin from user:" + account);
+
+ LoginController lc = LoginController.getInstance();
+ if (_logins.loginValid(account, ral.getPassword(), _csocket.getInetAddress()))
+ {
+ if (_logins.loginBanned(account))
+ {
+ //Login BANNED
+ LoginFail lok = new LoginFail(LoginFail.REASON_ACCOUNT_BANNED);
+ sendPacket(lok);
+ }
+ else
+ {
+ //FIXME: this has to be done per server and not on login
+ if(LoginController.getInstance().getOnlinePlayerCount() >= LoginController.getInstance().getMaxAllowedOnlinePlayers())
+ {
+ if (Config.DEBUG) _log.fine("Player tryed to login but server is full");
+ LoginFail lfail = new LoginFail(LoginFail.REASON_ACCESS_FAILED );
+ sendPacket(lfail);
+ }
+ else if (!lc.isAccountInGameServer(account) && !lc.isAccountInLoginServer(account) )
+ {
+ sessionKey = lc.assignSessionKeyToLogin(account, _csocket);
+ if (Config.DEBUG) _log.fine("assigned SessionKey:" + Integer.toHexString(sessionKey));
+ LoginOk lok = new LoginOk();
+ sendPacket(lok);
+ }
+ else
+ {
+ if (Config.DEBUG) _log.fine("KICKING!");
+ if (lc.isAccountInLoginServer(account)) {
+ _log.warning("account is in use on Login server (kicking off):" + account);
+ try
+ {
+ lc.getLoginServerConnection(account).close();
+ lc.removeLoginServerLogin(account);
+ }
+ catch(NullPointerException e)
+ {
+ _log.warning("Error while kicking loginserver account, lost connection?");
+ }
+ }
+ if (lc.isAccountInGameServer(account)) {
+ _log.warning("account is in use on Gamea server (kicking off):" + account);
+ lc.getClientConnection(account).close();
+ lc.removeGameServerLogin(account);
+ }
+ LoginFail lok = new LoginFail(LoginFail.REASON_ACCOUNT_IN_USE);
+ sendPacket(lok);
+ }
+ }
+ }
+ else
+ {
+ LoginFail lok = new LoginFail(LoginFail.REASON_USER_OR_PASS_WRONG);
+ sendPacket(lok);
+ if (Config.DEBUG) _log.fine("login failed sent");
+ }
+
+ break;
+ }
+ }
case 02:
{
if (Config.DEBUG) _log.fine("RequestServerLogin");
@@ -252,7 +328,35 @@
sendPacket(sl);
break;
}
-
+ case 07:
+ {
+ byte[] raw = null;
+ String filename = "07";
+ File file = new File(filename);
+ if (!file.exists())
+ {
+
+ }
+ else
+ {
+ FileInputStream fis = null;
+ try
+ {
+ fis = new FileInputStream(file);
+ raw = new byte[fis.available()];
+ fis.read(raw);
+ }
+ catch (Exception e)
+ { _log.warning("problem with message text "+e);
+ }
+ finally
+ {
+ try { fis.close(); } catch (Exception e1) {/* ignore this */}
+ }
+ }
+ _out.write(raw);
+ _out.flush();
+ }
default:
{
_log.warning("Unknown Packet:" + packetType);