All pastes #27135 Raw Edit

Something

public text v1 · immutable
#27135 ·published 2005-10-31 16:03 UTC
rendered paste body
Index: 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);