Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.maximemeire.rs2pro.io.tcpip.codecs;
- import net.maximemeire.rs2pro.io.file.PlayerFileHandler;
- import net.maximemeire.rs2pro.io.file.PlayerLoadResult;
- import net.maximemeire.rs2pro.io.tcpip.ConnectionHandler;
- import net.maximemeire.rs2pro.util.Logger;
- import net.maximemeire.rs2pro.util.Misc;
- import net.maximemeire.rs2pro.utils.Constants;
- import net.maximemeire.rs2pro.world.entities.players.Player;
- import net.maximemeire.rs2pro.world.entities.players.PlayerDetails;
- import net.maximemeire.rs2pro.world.entities.players.PlayerManager;
- import org.jboss.netty.buffer.ChannelBuffer;
- import org.jboss.netty.channel.Channel;
- import org.jboss.netty.channel.ChannelFuture;
- import org.jboss.netty.channel.ChannelFutureListener;
- public class PLPDecoder {
- private static Logger logger = new Logger(PLPDecoder.class);
- 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) {
- PlayerManager.loadPlayer(ctx.getConnection(), result);
- break;
- }
- } else {
- ctx.getOutgoingVector().writeByte(Constants.LoginReturnCodes.OUT_OF_DATE).write(channel).addListener(new ChannelFutureListener() {
- @Override
- public void operationComplete(ChannelFuture future)
- throws Exception {
- ConnectionHandler.close(channel);
- }
- });
- }
- } else {
- ctx.getOutgoingVector().writeByte(Constants.LoginReturnCodes.MALFORMED_PACKET).write(channel).addListener(new ChannelFutureListener() {
- @Override
- public void operationComplete(ChannelFuture future)
- throws Exception {
- ConnectionHandler.close(channel);
- }
- });
- }
- 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