Advertisement
Guest User

Untitled

a guest
Jun 17th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. /*
  2. * To change this template, choose Tools | Templates
  3. * and open the template in the editor.
  4. */
  5. package org.stewie.server.net.codec;
  6.  
  7. import org.jboss.netty.buffer.ChannelBuffer;
  8. import org.jboss.netty.channel.Channel;
  9. import org.jboss.netty.channel.ChannelHandlerContext;
  10. import org.jboss.netty.handler.codec.frame.FrameDecoder;
  11. import org.stewie.server.model.Player;
  12. import org.stewie.server.model.PlayerInformation;
  13. import org.stewie.server.packet.ISAACCipher;
  14. import org.stewie.server.packet.Packet;
  15. import org.stewie.server.model.World;
  16. import org.stewie.server.net.Session;
  17.  
  18. /**
  19. *
  20. * @author Stewart Eunice
  21. */
  22. public class LoginProtocolDecoder extends FrameDecoder {
  23.  
  24. @Override
  25. protected Object decode(ChannelHandlerContext chc, Channel channel, ChannelBuffer buffer) throws Exception {
  26. Session session = new Session(chc.getChannel());
  27. Player player = new Player(session);
  28. chc.setAttachment(player);
  29. int loginType = -1, loginPacketSize = -1;
  30. if (buffer.readableBytes() >= 2) {
  31. loginType = buffer.readUnsignedByte();
  32. loginPacketSize = buffer.readUnsignedByte();
  33. }
  34. if (buffer.readableBytes() >= loginPacketSize) {
  35. byte[] payload = new byte[loginPacketSize];
  36. buffer.readBytes(payload);
  37. Packet loginPacket = new Packet(-1, payload);
  38. int expectedClientVersion = 317, expectedMagicNumber = 255;
  39. int recievedMagicNumber = loginPacket.readByte();
  40. int recievedClientVersion = loginPacket.readByte();
  41. if ((recievedClientVersion != expectedClientVersion) || (recievedMagicNumber != expectedMagicNumber)) {
  42. //Not sure the use of this except to check if client is up to date
  43. }
  44. boolean lowMemory = (loginPacket.readByte() != -1);
  45. for (int index = 0; index < 9; index++) {
  46. int data = loginPacket.readInt();//read the data indexes
  47. }
  48. loginPacket.readByte();//Useless
  49. int loginSessionMagicNumber = loginPacket.readByte() & 0xff;
  50. long clientSessionKey = loginPacket.readLong();
  51. long serverSessionKey = loginPacket.readLong();
  52. int uid = loginPacket.readInt(); // UID. User Session ID. SHOULD be 10.
  53.  
  54. String Username = loginPacket.readRS2String();
  55.  
  56. String Password = loginPacket.readRS2String();
  57.  
  58. int sessionKey[] = new int[4];
  59. sessionKey[0] = (int) (clientSessionKey >> 32);
  60. sessionKey[1] = (int) clientSessionKey;
  61. sessionKey[2] = (int) (serverSessionKey >> 32);
  62. sessionKey[3] = (int) serverSessionKey;
  63.  
  64. player.getSession().putAttribute("CYPTION_IN", new ISAACCipher(sessionKey));
  65.  
  66. for (int index = 0; index < 4; index++) {
  67. sessionKey[index] += 50;
  68. }
  69. player.getSession().putAttribute("CRYPTION_OUT", new ISAACCipher(sessionKey));
  70.  
  71. PlayerInformation information = new PlayerInformation(Username, Password);
  72. player.setPlayerInformation(information);
  73.  
  74. World.getWorld().loadPlayer(player);
  75.  
  76. }
  77. return null;
  78. }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement