Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static void decodePLP(PLPDContext ctx, ChannelBuffer message) {
- ctx.getIncomingVector().setBufferData(message);
- final Channel channel = ctx.getChannel();
- if (ctx.getIncomingVector().readable()) {
- switch (ctx.getProtocolStage()) {
- case -1:
- if (ctx.getIncomingVector().readableBytes() >= 8) {
- ctx.getIncomingVector().skip(8);
- for (int key : Constants.UPDATE_KEYS)
- ctx.getOutgoingVector().writeByte(key);
- ctx.getOutgoingVector().write(ctx.getChannel()).addListener(new ChannelFutureListener() {
- @Override
- public void operationComplete(ChannelFuture arg0)
- throws Exception {
- logger.info("[-1][15] Update keys written");
- ConnectionHandler.close(channel);
- }
- });
- break;
- } else {
- break;
- }
- case 0:
- int opcode = ctx.getIncomingVector().readByte() & 0xff;
- switch (opcode) {
- case 14:
- long l = ((long) (java.lang.Math.random() * 99999999D) << 32) + (long) (java.lang.Math.random() * 99999999D);
- ctx.getOutgoingVector().writeByte(0).writeLong(l).write(channel);
- break;
- case 15:
- if (ctx.getIncomingVector().readableBytes() >= 4) {
- if (ctx.getIncomingVector().readInt() == Constants.REVISION) {
- ctx.getOutgoingVector().writeByte(0).write(ctx.getChannel());
- logger.info("[0][15] Status code 0 written");
- ctx.setProtocolStage(-1);
- break;
- } else {
- ctx.getOutgoingVector().writeByte(1).write(ctx.getChannel()).addListener(new ChannelFutureListener() {
- @Override
- public void operationComplete(ChannelFuture arg0)
- throws Exception {
- ConnectionHandler.close(channel);
- }
- });
- break;
- }
- } else
- break;
- case 16:
- case 18:
- int loginsize = ctx.getIncomingVector().readShort();
- if (ctx.getIncomingVector().readableBytes() == loginsize) {
- if (ctx.getIncomingVector().readInt() == Constants.REVISION) {
- ctx.getIncomingVector().skip(33);
- ctx.getIncomingVector().readString();
- ctx.getIncomingVector().skip(139);
- final String username = Misc.longToPlayerName(ctx.getIncomingVector().readLong());
- final String password = ctx.getIncomingVector().readString();
- PlayerLoadResult result = PlayerFileHandler.loadPlayer(new PlayerDetails(username, password));
- ctx.setResult(result);
- ctx.getOutgoingVector().writeByte(result.getReturnCode());
- if (result.getReturnCode() == Constants.LoginReturnCodes.LOGIN_OK) {
- ctx.getOutgoingVector()
- .writeByte(result.getPlayer().getDetails().getRights())
- .writeByte(0)
- .writeByte(0)
- .writeByte(0)
- .writeByte(0)
- .writeByte(0)
- .writeLEShort(1) // TODO PLAYER ID
- .writeByte(0)
- .writeByte(0);
- }
- }
- }
- break;
- case 20:
- ctx.getIncomingVector().skip(6);
- ctx.getOutgoingVector().writeByte(2).write(channel).addListener(new ChannelFutureListener() {
- @Override
- public void operationComplete(ChannelFuture future)
- throws Exception {
- ConnectionHandler.close(channel);
- }
- });
- break;
- case 21:
- int firstResponse = ACDecoder.checkUsername(Misc.longToPlayerName(ctx.getIncomingVector().readLong()));
- ctx.getOutgoingVector().writeByte(firstResponse).write(channel).addListener(new ChannelFutureListener() {
- @Override
- public void operationComplete(ChannelFuture future)
- throws Exception {
- ConnectionHandler.close(channel);
- }
- });
- break;
- case 22:
- int acsize = ctx.getIncomingVector().readByte();
- if (ctx.getIncomingVector().readableBytes() == acsize) {
- if (ctx.getIncomingVector().readShort() == Constants.REVISION) {
- ctx.getIncomingVector().skip(3);
- final String acUsername = Misc.longToPlayerName(ctx.getIncomingVector().readLong());
- ctx.getIncomingVector().skip(4);
- final String acPassword = ctx.getIncomingVector().readString();
- final int finalResponse = ACDecoder.checkUsername(acUsername);
- ctx.getOutgoingVector().writeByte(finalResponse).write(channel).addListener(new ChannelFutureListener() {
- @Override
- public void operationComplete(ChannelFuture future)
- throws Exception {
- ConnectionHandler.close(channel);
- if (finalResponse == Constants.ACReturnCodes.USERNAME_AVAILABLE) {
- PlayerFileHandler.save(new Player(new PlayerDetails(acUsername, acPassword)));
- }
- }
- });
- } else {
- logger.info("[0][23] Wrong revision");
- ctx.getOutgoingVector().writeByte(9).write(channel).addListener(new ChannelFutureListener() {
- @Override
- public void operationComplete(ChannelFuture future)
- throws Exception {
- ConnectionHandler.close(channel);
- }
- });
- }
- }
- break;
- case 23:
- @SuppressWarnings("unused")
- int requestCode = ctx.getIncomingVector().readInt();
- ctx.getOutgoingVector().setNewBuffer(7191);
- for (int data : Constants.WORLD_LIST_DATA) {
- ctx.getOutgoingVector().writeByte(data);
- }
- ctx.getOutgoingVector().write(channel).addListener(new ChannelFutureListener() {
- @Override
- public void operationComplete(ChannelFuture future)
- throws Exception {
- logger.info("[0][23] World list data written");
- ConnectionHandler.close(channel);
- }
- });
- ctx.getOutgoingVector().setNewBuffer(1024);
- break;
- default:
- logger.info("Unhandled plp opcode " + opcode);
- }
- }
- }
- if (ctx.getIncomingVector().readable()) {
- logger.info(ctx.getIncomingVector().readableBytes() + " bytes left in the buffered vector");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement