L2JGameServerPacketHandler.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /*
  2. * This program is free software: you can redistribute it and/or modify it under
  3. * the terms of the GNU General Public License as published by the Free Software
  4. * Foundation, either version 3 of the License, or (at your option) any later
  5. * version.
  6. *
  7. * This program is distributed in the hope that it will be useful, but WITHOUT
  8. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9. * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10. * details.
  11. *
  12. * You should have received a copy of the GNU General Public License along with
  13. * this program. If not, see <http://www.gnu.org/licenses/>.
  14. */
  15. package com.l2jserver.loginserver.network;
  16. import java.util.logging.Logger;
  17. import com.l2jserver.Config;
  18. import com.l2jserver.loginserver.GameServerThread;
  19. import com.l2jserver.loginserver.network.gameserverpackets.BlowFishKey;
  20. import com.l2jserver.loginserver.network.gameserverpackets.ChangeAccessLevel;
  21. import com.l2jserver.loginserver.network.gameserverpackets.ChangePassword;
  22. import com.l2jserver.loginserver.network.gameserverpackets.GameServerAuth;
  23. import com.l2jserver.loginserver.network.gameserverpackets.PlayerAuthRequest;
  24. import com.l2jserver.loginserver.network.gameserverpackets.PlayerInGame;
  25. import com.l2jserver.loginserver.network.gameserverpackets.PlayerLogout;
  26. import com.l2jserver.loginserver.network.gameserverpackets.PlayerTracert;
  27. import com.l2jserver.loginserver.network.gameserverpackets.ReplyCharacters;
  28. import com.l2jserver.loginserver.network.gameserverpackets.RequestSendMail;
  29. import com.l2jserver.loginserver.network.gameserverpackets.RequestTempBan;
  30. import com.l2jserver.loginserver.network.gameserverpackets.ServerStatus;
  31. import com.l2jserver.loginserver.network.loginserverpackets.LoginServerFail;
  32. import com.l2jserver.util.network.BaseRecievePacket;
  33. /**
  34. *
  35. * @author mrTJO
  36. */
  37. public class L2JGameServerPacketHandler
  38. {
  39. protected static Logger _log = Logger.getLogger(L2JGameServerPacketHandler.class.getName());
  40. public static enum GameServerState { CONNECTED, BF_CONNECTED, AUTHED }
  41. public static BaseRecievePacket handlePacket(byte[] data, GameServerThread server)
  42. {
  43. BaseRecievePacket msg = null;
  44. int opcode = data[0] & 0xff;
  45. GameServerState state = server.getLoginConnectionState();
  46. switch (state)
  47. {
  48. case CONNECTED:
  49. switch (opcode)
  50. {
  51. case 0x00:
  52. msg = new BlowFishKey(data, server);
  53. break;
  54. default:
  55. _log.warning("Unknown Opcode ("+Integer.toHexString(opcode).toUpperCase()+") in state "+state.name()+" from GameServer, closing connection.");
  56. server.forceClose(LoginServerFail.NOT_AUTHED);
  57. break;
  58. }
  59. break;
  60. case BF_CONNECTED:
  61. switch (opcode)
  62. {
  63. case 0x01:
  64. msg = new GameServerAuth(data, server);
  65. break;
  66. default:
  67. _log.warning("Unknown Opcode ("+Integer.toHexString(opcode).toUpperCase()+") in state "+state.name()+" from GameServer, closing connection.");
  68. server.forceClose(LoginServerFail.NOT_AUTHED);
  69. break;
  70. }
  71. break;
  72. case AUTHED:
  73. switch (opcode)
  74. {
  75. case 0x02:
  76. msg = new PlayerInGame(data, server);
  77. break;
  78. case 0x03:
  79. msg = new PlayerLogout(data, server);
  80. break;
  81. case 0x04:
  82. msg = new ChangeAccessLevel(data, server);
  83. break;
  84. case 0x05:
  85. msg = new PlayerAuthRequest(data, server);
  86. break;
  87. case 0x06:
  88. msg = new ServerStatus(data, server);
  89. break;
  90. case 0x07:
  91. msg = new PlayerTracert(data);
  92. break;
  93. case 0x08:
  94. msg = new ReplyCharacters(data, server);
  95. break;
  96. case 0x09:
  97. if (Config.EMAIL_SYS_ENABLED)
  98. msg = new RequestSendMail(data);
  99. break;
  100. case 0x0A:
  101. msg = new RequestTempBan(data);
  102. break;
  103. case 0x0B:
  104. new ChangePassword(data);
  105. break;
  106. default:
  107. _log.warning("Unknown Opcode ("+Integer.toHexString(opcode).toUpperCase()+") in state "+state.name()+" from GameServer, closing connection.");
  108. server.forceClose(LoginServerFail.NOT_AUTHED);
  109. break;
  110. }
  111. break;
  112. }
  113. return msg;
  114. }
  115. }