From 38374b496c2f6e4a101d4655271298c955473a4b Mon Sep 17 00:00:00 2001 From: darkk1138 Date: Sat, 9 Nov 2013 22:34:12 +0100 Subject: [PATCH 1/6] fix local login provider fix import typo --- src/main/NGECore.java | 11 +++++- src/services/LoginService.java | 47 ++++++++++++++++---------- src/services/object/ObjectService.java | 5 ++- 3 files changed, 44 insertions(+), 19 deletions(-) diff --git a/src/main/NGECore.java b/src/main/NGECore.java index f1a4ed52..22ff957b 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -59,6 +59,8 @@ import services.command.CombatCommand; import services.command.CommandService; import services.gcw.GCWService; import services.guild.GuildService; +import services.login.LoginService; +import services.login.LoginService; import services.map.MapService; import services.object.ObjectService; import services.object.UpdateService; @@ -176,12 +178,19 @@ public class NGECore { // Database databaseConnection = new DatabaseConnection(); databaseConnection.connect(config.getString("DB.URL"), config.getString("DB.NAME"), config.getString("DB.USER"), config.getString("DB.PASS"), "postgresql"); + + String db2Url = config.getString("DB2.URL"); + if (db2Url == null || db2Url.matches("^\\s*$")) { + databaseConnection2 = null; + } else { + databaseConnection2 = new DatabaseConnection(); + databaseConnection2.connect(config.getString("DB2.URL"), config.getString("DB2.NAME"), config.getString("DB2.USER"), config.getString("DB2.PASS"), "mysql"); + } databaseConnection2 = new DatabaseConnection(); setGalaxyStatus(1); creatureODB = new ObjectDatabase("creature", true, false, true); mailODB = new ObjectDatabase("mails", true, false, true); - // Services loginService = new LoginService(this); connectionService = new ConnectionService(this); diff --git a/src/services/LoginService.java b/src/services/LoginService.java index 92a3d42c..ba568f1f 100644 --- a/src/services/LoginService.java +++ b/src/services/LoginService.java @@ -37,8 +37,11 @@ import org.apache.mina.core.session.IoSession; import engine.clients.Client; import engine.protocol.soe.Disconnect; import engine.resources.database.DatabaseConnection; +import engine.resources.service.ILoginProvider; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; +import engine.resources.service.LocalDbLoginProvider; +import engine.resources.service.VBLoginProvider; import protocol.swg.CharacterCreationDisabled; import protocol.swg.ClientUIErrorMessage; @@ -61,16 +64,21 @@ public class LoginService implements INetworkDispatch{ private int sessionKeyLength = 0; private NGECore core; - private DatabaseConnection databaseConnection; + private DatabaseConnection databaseConnection1; private DatabaseConnection databaseConnection2; private Random random; public LoginService(NGECore core) { this.core = core; this.sessionKeyLength = core.getConfig().getInt("LOGIN.SESSION_KEY_SIZE"); - this.databaseConnection = core.getDatabase1(); + this.databaseConnection1 = core.getDatabase1(); this.databaseConnection2 = core.getDatabase2(); this.random = new Random(); + if (databaseConnection2 == null) { + LoginProvider = new LocalDbLoginProvider(databaseConnection1); + } else { + LoginProvider = new VBLoginProvider(databaseConnection1, databaseConnection2); + } } public void insertTimedEventBindings(ScheduledExecutorService executor) { @@ -91,16 +99,22 @@ public class LoginService implements INetworkDispatch{ String err = ""; String user = clientID.getAccountName(); String pass = clientID.getPassword(); - int id = getAccountID(user); - if (id == -1) err = "Invalid Username"; - //String email = getAccountEmail(user); - //String encryptPass = getAccountPassword(user); + int id = LoginProvider.getAccountId(user, pass, session.getRemoteAddress().toString()); - if (err == "") - err = canUserLogin(user, /*email*/"", pass, /*encryptPass*/"", id, session.getRemoteAddress().toString()); - - if (err != "") { - System.out.println(user + " failed login because " + err); + if (id < 0) { + + String err = ""; + switch (id) { + case -1: + err = "Database error"; + break; + case -2: + err = "invalid user or password"; + break; + case -3: + err = "user is banned"; + break; + } ClientUIErrorMessage errMsg = new ClientUIErrorMessage("Invalid Login", err); session.write(errMsg.serialize()); Disconnect disconnect = new Disconnect((Integer)session.getAttribute("connectionId"), 6); @@ -167,7 +181,7 @@ public class LoginService implements INetworkDispatch{ PreparedStatement preparedStatement; - preparedStatement = databaseConnection.preparedStatement("DELETE FROM characters WHERE \"id\"=? AND \"galaxyId\"=? AND \"accountId\"=?"); + preparedStatement = databaseConnection1.preparedStatement("DELETE FROM characters WHERE \"id\"=? AND \"galaxyId\"=? AND \"accountId\"=?"); preparedStatement.setLong(1, packet.getcharId()); preparedStatement.setInt(2, packet.getgalaxyId()); preparedStatement.setInt(3, (int) client.getAccountId()); @@ -196,8 +210,7 @@ public class LoginService implements INetworkDispatch{ */ private void persistSession(Client client) throws SQLException { - String sessionValues = "?, " + client.getAccountId(); - PreparedStatement ps = databaseConnection.preparedStatement("INSERT INTO sessions (key, \"accountId\") VALUES (" + sessionValues + ")"); + PreparedStatement ps = databaseConnection1.preparedStatement("INSERT INTO sessions (\"key\", \"accountId\") VALUES (?, ?)"); ps.setBytes(1, client.getSessionKey()); ps.executeUpdate(); ps.close(); @@ -226,7 +239,7 @@ public class LoginService implements INetworkDispatch{ PreparedStatement preparedStatement; try { - preparedStatement = databaseConnection.preparedStatement("SELECT * FROM characters WHERE \"accountId\"=" + id + ""); + preparedStatement = databaseConnection1.preparedStatement("SELECT * FROM characters WHERE \"accountId\"=" + id + ""); resultSet = preparedStatement.executeQuery(); while (resultSet.next() && !resultSet.isClosed()) { @@ -257,7 +270,7 @@ public class LoginService implements INetworkDispatch{ LoginEnumCluster servers = new LoginEnumCluster(9); PreparedStatement preparedStatement; try { - preparedStatement = databaseConnection.preparedStatement("SELECT * FROM galaxies"); + preparedStatement = databaseConnection1.preparedStatement("SELECT * FROM galaxies"); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next() && !resultSet.isClosed()) servers.addServer(resultSet.getInt("id"), resultSet.getString("name")); @@ -276,7 +289,7 @@ public class LoginService implements INetworkDispatch{ LoginClusterStatus clusterStatus = new LoginClusterStatus(); ResultSet resultSet; try { - PreparedStatement preparedStatement = databaseConnection.preparedStatement("SELECT * FROM \"connectionServers\""); + PreparedStatement preparedStatement = databaseConnection1.preparedStatement("SELECT * FROM \"connectionServers\""); resultSet = preparedStatement.executeQuery(); while (resultSet.next() && !resultSet.isClosed()) clusterStatus.addServer( diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 801fec4a..1ae1f816 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -21,6 +21,7 @@ ******************************************************************************/ package services.object; +import java.io.FileNotFoundException; import java.io.IOException; import java.nio.ByteOrder; import java.sql.PreparedStatement; @@ -225,8 +226,10 @@ public class ObjectService implements INetworkDispatch { } } + } catch (FileNotFoundException e) { + System.out.println("!File Not Found:" + template.toString()); } catch (IOException e) { - e.printStackTrace(); + System.out.println("!IO error " + template.toString()); } } From d3ff1188d83a4c57dde0f5fad36c566867c6a3b6 Mon Sep 17 00:00:00 2001 From: darkk1138 Date: Sun, 24 Nov 2013 10:59:14 +0100 Subject: [PATCH 2/6] temp commit including tempoary account reservation. db dump needs testing. --- nge.backup | Bin 19093 -> 36915 bytes src/services/CharacterService.java | 37 +++++++++++++++++++---------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/nge.backup b/nge.backup index 049637b43c5c3a7a1472ce0eb0b4685561cfd891..6dd9ec239a2a06c0de39150d31566eab48f5eca8 100644 GIT binary patch literal 36915 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 NJ@#xK5uk5Q_#sMNhU-xnV4jN zS#~|gR@<{hcdgsjW9u%b*zHl=MVVR{%l2$hsIm;81*Pk@6$a7%Sar9Dt^3DzyWjic zy_eh{Z+-;cIXp6X_j~X6`?=rm=X>w>-Sl*Jbob1eZ<~A7oH=uBa9xdWEAVXrzFleD z?!})-lezGrkj;2(SHOohr^o58`qYV=otcO4_`(7%cE1Wfhhy#Wj!3N2R`W*#ZhABP zON5gsmCt1gm4QqlHJr{BvS<}*>PxN-Hmz*Lt!zY1^G3cS;}2^2a)vzk6Z$3GeDm#U0$W?14W3AIP5p1a|X-tdO_x-bewqoS&7 zd*j`xr*BO((!R2B%7!|gD;qm|L$Rd1%VZo)x1ByPC@Dt%3@|xJI>0v^U9GM_8<}yp zJKzbBxhv+2+48-4+ehGW_^xC)mWae-)YWc>ub8VDPf%nnip7&Cd{-oqOduvr!%&~< z>_AGZX!+qR_~at!gG7tj1CtRW2AbNG{`hn0SQ<`c(jz4;kMdd}JECPXD({4Tt5ha2?+ykyzx*L-g>N-;fJv{F;I5^CUW;04 zi)6XWxcJguct!y|{e1PgqNztjR&b**H_YiDmKsHZP zFySuX>9bt}U+ZHH%)JETM0kB4?GQ9AGkrOE1-(kPOFggMU8D}HAz+yN$1hW5duP&66tMMeV-Vx$WgC^~a#uoz!d zcQZdu!A!+?g8u)w4S;Kf2B91XW8QPD^n&T^)*Rm(Rwakex$kjH^4 zrI8HwW_(=&3-*wX@J;a909ha#u_~~@LRcBquz=arAbytaMRq5&+-DkEie1Fcxh0B;pi8GQ&kc6MkmuVvAu;o*En zD-f!|TN;sSOnk&ZqSG(~vU!F|NG8tTYQr&Oj;5xYGPL9AMv%J zFb&X+C!g-lN`qAnl?Cavf$kjX2wI!8V?L^fcmi&Yc+Snh7CH3@;7xoERHByn3rTlk*XDqMNvc_Mf7cI#SHjjA2VF!i=dknMf9=M{BW-c zg0Y3>q%H#=D2pQ8&>}|Dh=0E{{@;;C0xpVhW0J+OfrVbfvX*0g{2X)0WU+;Z) z+E&Qp*SaX8t8B(=-9?cAZ@~*HpLKhEq(;3tm))ExS8{1m?W(GbwwkU=tBgiVGhn%r z2noZRKu%2KhOp>kRKpp>;h4%MSFqKFCj!d;gIXaYUC?|Mp4ZS&bz{>q`TlC^MGS)O zMeD1_xC8)v9|oZp&%wbq^3J<@JT)1OKp*^KMIw0_2x%FNEM1^Th8OX&B&F&NO^{2^ zzmkSCe%~P(*NT`{fe5z{k@R4aQ}x5T2#T-T{(43h$w_J@7^7ZfRI6?h)g@S1@TNQu zYS4>!>b4+xRbR7DQG4}P=!ExbndoJ3>sw)Hsawm&SNXMY+CZ9LeZ3(^lrANa<_h8vEUTnAt4=0f3ra8R1}z5uOi@}4MCfA%vLnl-HUOWs;1~B#fm96}=nbdhfGwF(v}v@G(fC&eQ@*u?_rP$NqLPCmV?`S(qHVd# zX7VTc^Wj1Ub%fW3`l3lx7~a-wzN)a;*y|dLkw6id0hf$35JfJ5qkMSJs*j~+5ZT6_ zle!GNVeqYy+u2bNZfFrBOSYhyx>dUHcwZVxGLS4dLUP)H)7WGN{Xt!P;N?~wA57Z{ zISb%7r|OlHuCf{X{-7^7omG>Bv}jEQ zm*FTq(;OX-Mf;5tC5S$Ov$cKQF?{w3pC2|NGqYWOm}A9?QYM>%gAHX|XT%4us|Vl? zCkaE4yvN3vji374^wT-q9DiR8Pn!~+5~n?ZM|^o>7tD|%B?>Z^us79$7UqU!po#M0 z!1dx6XjQ!adtQm3$ECy%zcQ_!eS)8=P(3{mRnmHN)gpNZrvO7z)rp`&-EjICoP4zY zKnGXMr;ATjCDW_RjU%JB4+`CN?fiAR!9L8<>at+aDy_~L~&u* zdcg~NsGkYDofp*Ld6nQv!%)xig6>kt^wx5q6k(_f2}9HkkC(y29~_v#@ZcIMxw+Va zLO4Z@4{g%*1O5>Y=?lxS%M1Uv$9t;Q70tP{1JNVX4usD`I}kbS+(K(IYGPB!4~5jCww;dKJW*jPJB2M zKEqCjp2Kt?^T?$G(PNf%*dCx&w1x+D+fT@CSDrnyhTv{}{$%S9f(1Kh26G9Az0^kA zjq_mj7)v+v4ZC$?Ps)v*>ST+x&7aY2R<0CyC#c6Hx;SWfT{r1fg-P5ib!!ur=q4E1 zo2ZP-f%WK0Gj)Tfi^bV#sjlMtL~CV{uB`E95Jy=ZdIsr9g@#SKp07#ul)fXhRuxz0 z2%XiW`%CE#jLPoURsX3}b&F!JwE_4wG%-MucrT$DEY~)C8RKlzcd@vDX+XhVKt&>oM$ zPjW*M_z5MJvEiRc3ELrEj1+`I9UaJ&GIrtvxJ%U28|e=9_M>&-ei9v!B3H|LWa}!u zV?>q*s$RuSHgpM>RqX+O`a)_DEa~FU^!kw!BcGR)&de-IOp>Cs9{LhcG6iKgnNO8S z@rzHoIUv8qb(-P=R^}tp^K8(9OhnLPY1%~VUzBLIx@-#p1@U05(zQ}D&?E_4hMw4r z*lL$K+y>b=%;Cg->;j%*8#>mkfMu(C;i&QO>c*Qx3`OR&^r-S=E*d zDMR`TvJn~5s?G$sRSn6gv%;Kh6#{%g<0UobUP6!hGDMBBlpb|48K(L(C5EdlFw}(w z%=8Dd$4Eay&sQ~$DKYXIHAtNPOs=MRqg`f(u~L#D1I1cNw!oQRU{>Z*Mt1@p_;-bL z17>c>pd+}fazv0-zSu&{WW6Iw5L$!eluh-zO6@G>>EEi#b+xDrmg?t9r@_lE6-w0| z2tZXooW1j~+$z+0URL7fb=htJoyFyx8a+*Bqu7BAL$Q?-$)s!)=5Jy*0-j=%S)&R^ zafbTJu%`ZFbNt1WQTg$1-RIOm8gcb@y|Yv(5?8*DrN=Bj1T3RjCr`Q>UNvXee+ zIAWu}BcEd<^$FJBq}S^?(`sAO9$Tx(B&9$VM#JUVgm zJTq?N&*puEwI_RC{E`!tIm;f;P1w$}$7HM72xYVFPb`0A-J>tLuIe~*T>GA5@gLv! zd}8w1$&OP0@6wN+x~6pe%kz?_u3yyk$UOJrC1XqW{+Ih}FCAZZ^M*aXmb~k*_T=x^ ztoX{%il<&G-uCpFMV`kSpS<%y_o9>UK0JTGvHvHVzWLxox8Ak;o-GsE*Zg;cclM2a z{9Avz<)I^QUK~I6+>z0xdy60Lx@O;@4GZ13yz=sb&pnW9v+ryF&tvw(|NV_$1q0uD z@8HcZE`PCY*}*lt-a5SM_buChwExBXzISoymf|b7eeJ@UU7r4(-akA#()G-lv9)h5 z&Zj@|-It$!c;SV4>4Q6e^ZNNew(MQ=#)O`d_g8N$ynXC{(Azg|-13==FZ(u* zE`?{nuY|&A)QjAO3Dr{JDEx9N6*L zH~D|F{h({lh4Pm^JiPy_i#MM8_Kur&|M Date: Sun, 24 Nov 2013 11:24:12 +0100 Subject: [PATCH 3/6] fix merge errors (i hope) --- src/main/NGECore.java | 3 +- src/services/LoginService.java | 166 +-------------------------------- 2 files changed, 4 insertions(+), 165 deletions(-) diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 22ff957b..9df9967b 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -59,8 +59,7 @@ import services.command.CombatCommand; import services.command.CommandService; import services.gcw.GCWService; import services.guild.GuildService; -import services.login.LoginService; -import services.login.LoginService; +import services.LoginService; import services.map.MapService; import services.object.ObjectService; import services.object.UpdateService; diff --git a/src/services/LoginService.java b/src/services/LoginService.java index ba568f1f..1c0a5b64 100644 --- a/src/services/LoginService.java +++ b/src/services/LoginService.java @@ -67,6 +67,7 @@ public class LoginService implements INetworkDispatch{ private DatabaseConnection databaseConnection1; private DatabaseConnection databaseConnection2; private Random random; + private ILoginProvider LoginProvider; public LoginService(NGECore core) { this.core = core; @@ -96,7 +97,6 @@ public class LoginService implements INetworkDispatch{ data.position(0); clientID.deserialize(data); - String err = ""; String user = clientID.getAccountName(); String pass = clientID.getPassword(); int id = LoginProvider.getAccountId(user, pass, session.getRemoteAddress().toString()); @@ -307,111 +307,6 @@ public class LoginService implements INetworkDispatch{ return clusterStatus; } - /** - * Checks if account ID exists in game DB. - * @param id Account ID. - */ - private boolean checkIfAccountExistInGameDB(int id) { - try { - PreparedStatement preparedStatement = databaseConnection.preparedStatement("SELECT * FROM accounts WHERE id=?"); - preparedStatement.setInt(1, id); - ResultSet resultSet = preparedStatement.executeQuery(); - if (resultSet.next()) { - return true; - } - } catch (SQLException e) { - e.printStackTrace(); - } - return false; - } - - /** - * Saves forum account to game DB if the account does not exist in the game DB already. - * @param id Account ID. - * @param user Username - * @param email User's email - * @param pass Hashed password - */ - private void createAccountForGameDB(int id, String user, String email, String pass) { - try { - PreparedStatement ps = databaseConnection.preparedStatement("INSERT INTO accounts (id, \"user\", \"pass\", \"email\") VALUES (?, ?, ?, ?)"); - ps.setInt(1, id); - ps.setString(2, user); - ps.setString(3, pass); - ps.setString(4, email); - ps.executeUpdate(); - ps.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - } - - /** - * Checks if user is allowed to login. - * @param id Account ID. - * @param user Username - * @param email User's email - * @param pass User password - * @param encryptPass encrypted password - * @param ip Users IP address - */ - private String canUserLogin(String user, String email, String pass, String encryptPass, int id, String ip) { - /*if ((new PHPBB3Auth()).phpbb_check_hash(pass, encryptPass)) { - if(checkBanlistforUserAndIP(id, ip)) { - return "You cannot login to the ProjectSWG server while being banned from ProjectSWG services"; - } - return ""; - } else { - return "Invalid Password"; - }*/ - - try { - PreparedStatement ps = databaseConnection.preparedStatement("SELECT * FROM accounts WHERE id=" + id + " AND \"pass\"='" + pass + "'"); - ResultSet resultSet = ps.executeQuery(); - - if (resultSet.next()) { - - return ""; - - } - } catch (SQLException e) { - e.printStackTrace(); - } - - return "Invalid Password"; - - - } - /** - * Checks if User has a forum account or IP ban. - * @param id Account ID. - * @param ip User's IP address. - */ - private boolean checkBanlistforUserAndIP(int id, String ip) { - if (!ip.contains("/")) - return false; - String IP = ((ip.split("/", 2)[1]).split(", ", 2)[0]).split(":", 2)[0]; - try { - PreparedStatement preparedStatement = databaseConnection2.preparedStatement("SELECT ban_id FROM phpbb_banlist WHERE ban_ip=?"); - preparedStatement.setString(1, IP); - ResultSet resultSet = preparedStatement.executeQuery(); - if (resultSet.next()) { - return true; - } else { - preparedStatement.close(); - preparedStatement = databaseConnection2.preparedStatement("SELECT ban_id FROM phpbb_banlist WHERE ban_userid=?"); - preparedStatement.setInt(1, id); - resultSet = preparedStatement.executeQuery(); - if (resultSet.next()) { - return true; - } - } - } catch (SQLException e) { - e.printStackTrace(); - } - return false; - } - /** * Checks if User has correct client version. * @param version Client Version String @@ -420,61 +315,6 @@ public class LoginService implements INetworkDispatch{ System.out.println("Version Received: " + version); return true; } - - /** - * Gets Account ID from forum DB by username. - * @param user Username. - */ - private int getAccountID(String user) { - try { - PreparedStatement pStatement = databaseConnection.preparedStatement("SELECT id FROM accounts WHERE \"user\"='" + user + "'"); - ResultSet resultSet = pStatement.executeQuery(); - if (resultSet.next()) { - return resultSet.getInt("id"); - } - } catch (SQLException e) { - e.printStackTrace(); - }; - return -1; - } - - /** - * Gets Account Email from forum DB by username. - * @param user Username. - */ - private String getAccountEmail(String user) { - try { - PreparedStatement pStatement = databaseConnection2.preparedStatement("SELECT user_email FROM phpbb_users WHERE username=?"); - pStatement.setString(1, user); - ResultSet resultSet = pStatement.executeQuery(); - - if (resultSet.next()) { - return resultSet.getString("user_email"); - } - } catch (SQLException e) { - e.printStackTrace(); - }; - return ""; - } - - /** - * Gets hashed Account Password from forum DB by username. - * @param user Username. - */ - private String getAccountPassword(String user) { - try { - PreparedStatement pStatement = databaseConnection2.preparedStatement("SELECT user_password FROM phpbb_users WHERE username=?"); - pStatement.setString(1, user); - ResultSet resultSet = pStatement.executeQuery(); - - if (resultSet.next()) { - return resultSet.getString("user_password"); - } - pStatement.close(); - } catch (SQLException e) { - e.printStackTrace(); - }; - return ""; - } - + } + From 7e5a216c31a1f17739a02f15344107a1576d7846 Mon Sep 17 00:00:00 2001 From: darkk1138 Date: Mon, 25 Nov 2013 22:12:34 +0100 Subject: [PATCH 4/6] fix session handling --- src/main/NGECore.java | 1 - src/protocol/Message.java | 9 ++- .../swg/ClientVerifyAndLockNameRequest.java | 4 +- src/services/CharacterService.java | 79 ++++++++++--------- src/services/ConnectionService.java | 13 ++- src/services/LoginService.java | 1 + 6 files changed, 59 insertions(+), 48 deletions(-) diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 9df9967b..4ff941df 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -186,7 +186,6 @@ public class NGECore { databaseConnection2.connect(config.getString("DB2.URL"), config.getString("DB2.NAME"), config.getString("DB2.USER"), config.getString("DB2.PASS"), "mysql"); } - databaseConnection2 = new DatabaseConnection(); setGalaxyStatus(1); creatureODB = new ObjectDatabase("creature", true, false, true); mailODB = new ObjectDatabase("mails", true, false, true); diff --git a/src/protocol/Message.java b/src/protocol/Message.java index 5085a975..9792eaec 100644 --- a/src/protocol/Message.java +++ b/src/protocol/Message.java @@ -103,6 +103,7 @@ public abstract class Message { } + //TODO: Verify if character position is set correctly after reading a UTF-16 string buffer.position(bufferPosition + length); return result; @@ -146,8 +147,8 @@ public abstract class Message { return result.array(); } - - + + //FIXME: this is redundant and was also bugged. At some point, get rid of the redundant functions. /** * Reads the next string in. It gets the length of the * string from the short/int at the beginning of it @@ -161,7 +162,7 @@ public abstract class Message { if (charset.equals("US-ASCII") || charset.equals("UTF-8")) { length = bb.getShort(); } else { - length = bb.getInt(); + length = bb.getInt() * 2; } if (length > bb.remaining()) return ""; @@ -201,4 +202,4 @@ public abstract class Message { return getNextString(buffer, "UTF-16LE"); } -} +} diff --git a/src/protocol/swg/ClientVerifyAndLockNameRequest.java b/src/protocol/swg/ClientVerifyAndLockNameRequest.java index 7d9c9722..ea0011f5 100644 --- a/src/protocol/swg/ClientVerifyAndLockNameRequest.java +++ b/src/protocol/swg/ClientVerifyAndLockNameRequest.java @@ -38,8 +38,8 @@ public class ClientVerifyAndLockNameRequest extends SWGMessage { public void deserialize(IoBuffer buffer) { buffer.position(6); // Skips SOE and SWG opcodes raceTemplate = getNextAsciiString(buffer); - name = getNextUnicodeString(buffer);; - + name = getNextUnicodeString(buffer); + System.out.println("msg: " + name); // Gets the first and last names String [] splitName = name.split(" "); firstName = splitName[0]; diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index 7b805c2f..7797d46d 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -87,7 +87,6 @@ public class CharacterService implements INetworkDispatch { public void handlePacket(IoSession session, IoBuffer data) throws Exception { - Client client = core.getClient((Integer) session.getAttribute("connectionId")); ClientRandomNameRequest randomNameRequest = new ClientRandomNameRequest(); ClientRandomNameResponse response; String name = null; @@ -96,16 +95,23 @@ public class CharacterService implements INetworkDispatch { data.position(0); randomNameRequest.deserialize(data); + while (name == null) { + + String firstName =""; + String lastName = ""; if (randomNameRequest.getSharedRaceTemplate().contains("wookie")) { - name = nameGenerator.compose(4); + firstName = nameGenerator.compose(4); + } else { - name = nameGenerator.compose(2) + " " + nameGenerator.compose(3); + firstName = nameGenerator.compose(2); + lastName = nameGenerator.compose(3); } try { - if (checkForDuplicateName(getfirstName(name, randomNameRequest.getSharedRaceTemplate()), client.getAccountId())) { - name = null; + //it's fine here to just use 0 as accountId because we don't want reserved names to be random generated for anyone. + if (!checkForDuplicateName(firstName, 0)) { + name = firstName + ((lastName.length() > 0 ) ? " " + lastName : ""); } } catch (SQLException e2) { e2.printStackTrace(); @@ -132,7 +138,7 @@ public class CharacterService implements INetworkDispatch { boolean isDeclined = false; String firstName = getfirstName(message.getName(), message.getRaceTemplate()); String lastName = getlastName(message.getName(), message.getRaceTemplate()); - if(message.getName() != null) System.out.println(message.getName()); + //if(message.getName() != null) System.out.println(message.getName()); int length = firstName.length(); try { @@ -317,67 +323,66 @@ public class CharacterService implements INetworkDispatch { firstName = firstName.toLowerCase(); PreparedStatement ps = databaseConnection.preparedStatement("SELECT id FROM characters WHERE LOWER(\"firstName\")=?"); ps.setString(1, firstName); + //System.out.println(ps.toString()); ResultSet resultSet = ps.executeQuery(); boolean isDuplicate = resultSet.next(); resultSet.getStatement().close(); + if (isDuplicate) { return true; } //FIXME: this is a bit lazy... but it's only temporary :p - PreparedStatement ps2 = databaseConnection.preparedStatement("SELECT id FROM temp_reserved_char_names WHERE \"accountId\"!=? AND LOWER(\"firstName\")=?"); + PreparedStatement psc = databaseConnection.preparedStatement("SELECT * FROM pg_tables WHERE \"tablename\"=?"); + psc.setString(1, "temp_reserved_char_names"); + ResultSet resultSetC = psc.executeQuery(); + boolean tableExists = resultSetC.next(); + resultSetC.getStatement().close(); + if (!tableExists) { return false; } + + PreparedStatement ps2 = databaseConnection.preparedStatement("SELECT \"accountId\" FROM temp_reserved_char_names WHERE \"accountId\"!=? AND LOWER(\"firstName\")=?"); ps2.setLong(1, accountId); ps2.setString(2, firstName); ResultSet resultSet2 = ps2.executeQuery(); - boolean isReserved = resultSet.next(); + boolean isReserved = resultSet2.next(); resultSet2.getStatement().close(); - return isDuplicate && isReserved; + return isReserved; } private String getfirstName(String Name, String RaceTemplate) { - String[] splitName; - if (RaceTemplate != "object/creature/player/wookiee_male.iff" | RaceTemplate != "object/creature/player/wookiee_female.iff") + if (RaceTemplate.contains("/wookiee_") || + !Name.contains(" ")) { // wookies don't have lastNames - if (Name.contains(" ")) - { - splitName = Name.split(" ", 2); - return splitName[0]; - } - else - { return Name; - } - } - else - { - return Name; } + + return Name.split(" ", 2)[0]; + } private String getlastName(String Name, String RaceTemplate) { - String[] splitName; - if (RaceTemplate != "object/creature/player/wookiee_male.iff" && RaceTemplate != "object/creature/player/wookiee_female.iff") + if (RaceTemplate.contains("/wookiee_") || + !Name.contains(" ")) { // wookies don't have lastNames - if (Name.contains(" ")) - { - splitName = Name.split(" ", 2); - return splitName[1]; - } - else - { - return ""; - } - } - else - { return ""; } + + return Name.split(" ", 2)[1]; + } private String checkForReservedName(String firstName, String lastName) throws SQLException { + + PreparedStatement psc = databaseConnection.preparedStatement("SELECT * FROM pg_tables WHERE \"tablename\"=?"); + psc.setString(1, "reservednames"); + ResultSet rsc = psc.executeQuery(); + if (!rsc.next()) { + return null; + } + firstName = firstName.toLowerCase(); lastName = lastName.toLowerCase(); diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index b094b647..a2f291ed 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -69,6 +69,8 @@ public class ConnectionService implements INetworkDispatch { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + System.out.println("xx"); data = data.order(ByteOrder.LITTLE_ENDIAN); ClientIdMsg clientIdMsg = new ClientIdMsg(); data.position(0); @@ -84,19 +86,22 @@ public class ConnectionService implements INetworkDispatch { PreparedStatement preparedStatement; try { - + preparedStatement = databaseConnection.preparedStatement("SELECT * FROM sessions WHERE key=?"); preparedStatement.setBytes(1, clientIdMsg.getSessionKey()); resultSet = preparedStatement.executeQuery(); if (resultSet.next()) { - client.setAccountId(resultSet.getInt("accountId")); + client.setAccountId(resultSet.getLong("accountId")); + client.setSessionKey(clientIdMsg.getSessionKey()); AccountFeatureBits accountFeatureBits = new AccountFeatureBits(); ClientPermissionsMessage clientPermissionsMessage = new ClientPermissionsMessage(); session.write(new HeartBeatMessage().serialize()); session.write(accountFeatureBits.serialize()); session.write(clientPermissionsMessage.serialize()); preparedStatement.close(); + + System.out.println("zyx"); } else { System.out.println("Cant get login session"); } @@ -105,8 +110,8 @@ public class ConnectionService implements INetworkDispatch { e.printStackTrace(); - } - + } + } diff --git a/src/services/LoginService.java b/src/services/LoginService.java index 1c0a5b64..a4904be8 100644 --- a/src/services/LoginService.java +++ b/src/services/LoginService.java @@ -212,6 +212,7 @@ public class LoginService implements INetworkDispatch{ PreparedStatement ps = databaseConnection1.preparedStatement("INSERT INTO sessions (\"key\", \"accountId\") VALUES (?, ?)"); ps.setBytes(1, client.getSessionKey()); + ps.setLong(2, client.getAccountId()); ps.executeUpdate(); ps.close(); From 75601031a7ea149c62b87456bcc08309c133693a Mon Sep 17 00:00:00 2001 From: darkk1138 Date: Wed, 27 Nov 2013 00:20:02 +0100 Subject: [PATCH 5/6] add preliminary interactive jython server --- src/main/NGECore.java | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 4ff941df..c88d4814 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -29,6 +29,8 @@ import java.util.Map; import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; +import org.apache.mina.core.service.IoHandler; + @@ -85,7 +87,9 @@ import engine.resources.database.ObjectDatabase; import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; +import engine.resources.service.InteractiveJythonAcceptor; import engine.resources.service.NetworkDispatch; +import engine.servers.InteractiveJythonServer; import engine.servers.MINAServer; import engine.servers.PingServer; @@ -143,6 +147,10 @@ public class NGECore { // Zone Server public NetworkDispatch zoneDispatch; private MINAServer zoneServer; + + // Interactive Jython Console + public InteractiveJythonAcceptor jythonAcceptor; + private InteractiveJythonServer jythonServer; private ObjectDatabase creatureODB; private ObjectDatabase mailODB; @@ -213,6 +221,17 @@ public class NGECore { equipmentService = new EquipmentService(this); entertainmentService = new EntertainmentService(this); + if (config.keyExists("JYTHONCONSOLE.PORT")) { + int jythonPort = config.getInt("JYTHONCONSOLE.PORT"); + if (jythonPort > 0) { + + System.out.println("Starting InteractiveJythonServer on Port " + jythonPort); + jythonAcceptor = new InteractiveJythonAcceptor(); + jythonServer = new InteractiveJythonServer((IoHandler) jythonAcceptor, jythonPort); + jythonAcceptor.setServer(jythonServer); + jythonServer.start(); + } + } // Ping Server try { @@ -290,13 +309,12 @@ public class NGECore { weatherService = new WeatherService(this); weatherService.loadPlanetSettings(); + didServerCrash = false; System.out.println("Started Server."); setGalaxyStatus(2); } - - public void stop() { System.out.println("Stopping Servers and Connections."); From b76a0562ddafab77d0d8c092889933451b967624 Mon Sep 17 00:00:00 2001 From: darkk1138 Date: Wed, 27 Nov 2013 21:28:01 +0100 Subject: [PATCH 6/6] make core visible for interactive jython server --- src/main/NGECore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/NGECore.java b/src/main/NGECore.java index c88d4814..266f4cb9 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -227,7 +227,7 @@ public class NGECore { System.out.println("Starting InteractiveJythonServer on Port " + jythonPort); jythonAcceptor = new InteractiveJythonAcceptor(); - jythonServer = new InteractiveJythonServer((IoHandler) jythonAcceptor, jythonPort); + jythonServer = new InteractiveJythonServer((IoHandler) jythonAcceptor, jythonPort, this); jythonAcceptor.setServer(jythonServer); jythonServer.start(); }