Advertisement
Guest User

Untitled

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