Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
- package org.stewie.server.net.codec;
- import org.jboss.netty.buffer.ChannelBuffer;
- import org.jboss.netty.channel.Channel;
- import org.jboss.netty.channel.ChannelHandlerContext;
- import org.jboss.netty.handler.codec.frame.FrameDecoder;
- import org.stewie.server.model.Player;
- import org.stewie.server.model.PlayerInformation;
- import org.stewie.server.packet.ISAACCipher;
- import org.stewie.server.packet.Packet;
- import org.stewie.server.model.World;
- import org.stewie.server.net.Session;
- /**
- *
- * @author Stewart Eunice
- */
- public class LoginProtocolDecoder extends FrameDecoder {
- @Override
- protected Object decode(ChannelHandlerContext chc, Channel channel, ChannelBuffer buffer) throws Exception {
- Session session = new Session(chc.getChannel());
- Player player = new Player(session);
- chc.setAttachment(player);
- int loginType = -1, loginPacketSize = -1;
- if (buffer.readableBytes() >= 2) {
- loginType = buffer.readUnsignedByte();
- loginPacketSize = buffer.readUnsignedByte();
- }
- if (buffer.readableBytes() >= loginPacketSize) {
- byte[] payload = new byte[loginPacketSize];
- buffer.readBytes(payload);
- Packet loginPacket = new Packet(-1, payload);
- int expectedClientVersion = 317, expectedMagicNumber = 255;
- int recievedMagicNumber = loginPacket.readByte();
- int recievedClientVersion = loginPacket.readByte();
- if ((recievedClientVersion != expectedClientVersion) || (recievedMagicNumber != expectedMagicNumber)) {
- //Not sure the use of this except to check if client is up to date
- }
- boolean lowMemory = (loginPacket.readByte() != -1);
- for (int index = 0; index < 9; index++) {
- int data = loginPacket.readInt();//read the data indexes
- }
- loginPacket.readByte();//Useless
- int loginSessionMagicNumber = loginPacket.readByte() & 0xff;
- long clientSessionKey = loginPacket.readLong();
- long serverSessionKey = loginPacket.readLong();
- int uid = loginPacket.readInt(); // UID. User Session ID. SHOULD be 10.
- String Username = loginPacket.readRS2String();
- String Password = loginPacket.readRS2String();
- int sessionKey[] = new int[4];
- sessionKey[0] = (int) (clientSessionKey >> 32);
- sessionKey[1] = (int) clientSessionKey;
- sessionKey[2] = (int) (serverSessionKey >> 32);
- sessionKey[3] = (int) serverSessionKey;
- player.getSession().putAttribute("CYPTION_IN", new ISAACCipher(sessionKey));
- for (int index = 0; index < 4; index++) {
- sessionKey[index] += 50;
- }
- player.getSession().putAttribute("CRYPTION_OUT", new ISAACCipher(sessionKey));
- PlayerInformation information = new PlayerInformation(Username, Password);
- player.setPlayerInformation(information);
- World.getWorld().loadPlayer(player);
- }
- return null;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement