Advertisement
Guest User

Untitled

a guest
May 14th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 7.03 KB | None | 0 0
  1. package net.maximemeire.rs2pro.io.tcpip.codecs;
  2.  
  3. import net.maximemeire.rs2pro.io.file.PlayerFileHandler;
  4. import net.maximemeire.rs2pro.io.file.PlayerLoadResult;
  5. import net.maximemeire.rs2pro.io.tcpip.ConnectionHandler;
  6. import net.maximemeire.rs2pro.util.Logger;
  7. import net.maximemeire.rs2pro.util.Misc;
  8. import net.maximemeire.rs2pro.utils.Constants;
  9. import net.maximemeire.rs2pro.world.entities.players.Player;
  10. import net.maximemeire.rs2pro.world.entities.players.PlayerDetails;
  11. import net.maximemeire.rs2pro.world.entities.players.PlayerManager;
  12.  
  13. import org.jboss.netty.buffer.ChannelBuffer;
  14. import org.jboss.netty.channel.Channel;
  15. import org.jboss.netty.channel.ChannelFuture;
  16. import org.jboss.netty.channel.ChannelFutureListener;
  17.  
  18. public class PLPDecoder {
  19.    
  20.     private static Logger logger = new Logger(PLPDecoder.class);
  21.    
  22.     public static void decodePLP(PLPDContext ctx, ChannelBuffer message) {
  23.         ctx.getIncomingVector().setBufferData(message);
  24.         final Channel channel = ctx.getChannel();
  25.         if (ctx.getIncomingVector().readable()) {
  26.             switch (ctx.getProtocolStage()) {
  27.             case -1:
  28.                 if (ctx.getIncomingVector().readableBytes() >= 8) {
  29.                     ctx.getIncomingVector().skip(8);
  30.                     for (int key : Constants.UPDATE_KEYS)
  31.                         ctx.getOutgoingVector().writeByte(key);
  32.                     ctx.getOutgoingVector().write(ctx.getChannel()).addListener(new ChannelFutureListener() {
  33.                         @Override
  34.                         public void operationComplete(ChannelFuture arg0)
  35.                                 throws Exception {
  36.                             logger.info("[-1][15] Update keys written");
  37.                             ConnectionHandler.close(channel);
  38.                         }
  39.                     });
  40.                     break;
  41.                 } else {
  42.                     break;
  43.                 }
  44.             case 0:
  45.                 int opcode = ctx.getIncomingVector().readByte() & 0xff;
  46.                 switch (opcode) {
  47.                 case 14:
  48.                     long l = ((long) (java.lang.Math.random() * 99999999D) << 32) + (long) (java.lang.Math.random() * 99999999D);
  49.                     ctx.getOutgoingVector().writeByte(0).writeLong(l).write(channel);
  50.                     break;
  51.                 case 15:
  52.                     if (ctx.getIncomingVector().readableBytes() >= 4) {
  53.                         if (ctx.getIncomingVector().readInt() == Constants.REVISION) {
  54.                             ctx.getOutgoingVector().writeByte(0).write(ctx.getChannel());
  55.                             logger.info("[0][15] Status code 0 written");
  56.                             ctx.setProtocolStage(-1);
  57.                             break;
  58.                         } else {
  59.                             ctx.getOutgoingVector().writeByte(1).write(ctx.getChannel()).addListener(new ChannelFutureListener() {
  60.                                 @Override
  61.                                 public void operationComplete(ChannelFuture arg0)
  62.                                         throws Exception {
  63.                                     ConnectionHandler.close(channel);
  64.                                 }
  65.                             });
  66.                             break;
  67.                         }
  68.                     } else
  69.                         break;
  70.                 case 16:
  71.                 case 18:
  72.                     int loginsize = ctx.getIncomingVector().readShort();
  73.                     if (ctx.getIncomingVector().readableBytes() == loginsize) {
  74.                         if (ctx.getIncomingVector().readInt() == Constants.REVISION) {
  75.                             ctx.getIncomingVector().skip(33);
  76.                             ctx.getIncomingVector().readString();
  77.                             ctx.getIncomingVector().skip(139);
  78.                             final String username = Misc.longToPlayerName(ctx.getIncomingVector().readLong());
  79.                             final String password = ctx.getIncomingVector().readString();
  80.                             PlayerLoadResult result = PlayerFileHandler.loadPlayer(new PlayerDetails(username, password));
  81.                             ctx.setResult(result);
  82.                             ctx.getOutgoingVector().writeByte(result.getReturnCode());
  83.                             if (result.getReturnCode() == Constants.LoginReturnCodes.LOGIN_OK) {
  84.                                 PlayerManager.loadPlayer(ctx.getConnection(), result);
  85.                                 break;
  86.                             }
  87.                         } else {
  88.                             ctx.getOutgoingVector().writeByte(Constants.LoginReturnCodes.OUT_OF_DATE).write(channel).addListener(new ChannelFutureListener() {
  89.                                 @Override
  90.                                 public void operationComplete(ChannelFuture future)
  91.                                         throws Exception {
  92.                                     ConnectionHandler.close(channel);
  93.                                 }
  94.                             });
  95.                         }
  96.                     } else {
  97.                         ctx.getOutgoingVector().writeByte(Constants.LoginReturnCodes.MALFORMED_PACKET).write(channel).addListener(new ChannelFutureListener() {
  98.                             @Override
  99.                             public void operationComplete(ChannelFuture future)
  100.                                     throws Exception {
  101.                                 ConnectionHandler.close(channel);
  102.                             }
  103.                         });
  104.                     }
  105.                     break;
  106.                 case 20:
  107.                     ctx.getIncomingVector().skip(6);
  108.                     ctx.getOutgoingVector().writeByte(2).write(channel).addListener(new ChannelFutureListener() {
  109.                         @Override
  110.                         public void operationComplete(ChannelFuture future)
  111.                                 throws Exception {
  112.                             ConnectionHandler.close(channel);
  113.                         }
  114.                     });
  115.                     break;
  116.                 case 21:
  117.                     int firstResponse = ACDecoder.checkUsername(Misc.longToPlayerName(ctx.getIncomingVector().readLong()));
  118.                     ctx.getOutgoingVector().writeByte(firstResponse).write(channel).addListener(new ChannelFutureListener() {
  119.                         @Override
  120.                         public void operationComplete(ChannelFuture future)
  121.                                 throws Exception {
  122.                             ConnectionHandler.close(channel);
  123.                         }
  124.                     });
  125.                     break;
  126.                 case 22:
  127.                     int acsize = ctx.getIncomingVector().readByte();
  128.                     if (ctx.getIncomingVector().readableBytes() == acsize) {
  129.                         if (ctx.getIncomingVector().readShort() == Constants.REVISION) {
  130.                             ctx.getIncomingVector().skip(3);
  131.                             final String acUsername = Misc.longToPlayerName(ctx.getIncomingVector().readLong());
  132.                             ctx.getIncomingVector().skip(4);
  133.                             final String acPassword = ctx.getIncomingVector().readString();
  134.                             final int finalResponse = ACDecoder.checkUsername(acUsername);
  135.                             ctx.getOutgoingVector().writeByte(finalResponse).write(channel).addListener(new ChannelFutureListener() {
  136.                                 @Override
  137.                                 public void operationComplete(ChannelFuture future)
  138.                                         throws Exception {
  139.                                     ConnectionHandler.close(channel);
  140.                                     if (finalResponse == Constants.ACReturnCodes.USERNAME_AVAILABLE) {
  141.                                         PlayerFileHandler.save(new Player(new PlayerDetails(acUsername, acPassword)));
  142.                                     }
  143.                                 }
  144.                             });
  145.                         } else {
  146.                             logger.info("[0][23] Wrong revision");
  147.                             ctx.getOutgoingVector().writeByte(9).write(channel).addListener(new ChannelFutureListener() {
  148.                                 @Override
  149.                                 public void operationComplete(ChannelFuture future)
  150.                                         throws Exception {
  151.                                     ConnectionHandler.close(channel);
  152.                                 }
  153.                             });
  154.                         }
  155.                     }
  156.                     break;                 
  157.                 case 23:
  158.                     @SuppressWarnings("unused")
  159.                     int requestCode = ctx.getIncomingVector().readInt();
  160.                     ctx.getOutgoingVector().setNewBuffer(7191);
  161.                     for (int data : Constants.WORLD_LIST_DATA) {
  162.                         ctx.getOutgoingVector().writeByte(data);
  163.                     }
  164.                     ctx.getOutgoingVector().write(channel).addListener(new ChannelFutureListener() {
  165.                         @Override
  166.                         public void operationComplete(ChannelFuture future)
  167.                                 throws Exception {
  168.                             logger.info("[0][23] World list data written");
  169.                             ConnectionHandler.close(channel);
  170.                         }
  171.                     });
  172.                     ctx.getOutgoingVector().setNewBuffer(1024);
  173.                     break;
  174.                     default:
  175.                         logger.info("Unhandled plp opcode " + opcode);
  176.                 }
  177.             }
  178.         }
  179.         if (ctx.getIncomingVector().readable()) {
  180.             logger.info(ctx.getIncomingVector().readableBytes() + " bytes left in the buffered vector");
  181.         }
  182.     }
  183.  
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement