62 final Channel channel = ctx.channel();
65 if (in.readableBytes() >= 2) {
66 final int handshake = in.readUnsignedByte();
73 @SuppressWarnings(
"unused")
final int nameHash = in.readUnsignedByte();
74 final long serverSeed =
RANDOM.get().nextLong();
76 ByteBuf buf = ctx.alloc().buffer(17);
79 buf.writeLong(serverSeed);
80 ctx.writeAndFlush(buf, ctx.voidPromise());
98 private void decodePayload(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) {
99 final String host = ((InetSocketAddress) ctx.channel().remoteAddress()).getAddress().getHostAddress();
101 final int loginBlockSize = in.readUnsignedByte();
102 if (in.isReadable(loginBlockSize)) {
103 final int magicId = in.readUnsignedByte();
106 logger.warn(String.format(
"[%s] wrong magic id: %d", host, magicId));
111 final int clientVersion = in.readUnsignedByte();
118 final int memoryVersion = in.readUnsignedByte();
119 if (memoryVersion != 0 && memoryVersion != 1) {
120 logger.warn(String.format(
"[%s] wrong memory version: %d", host, memoryVersion));
125 final int[] crcs =
new int[9];
127 for (
int index = 0; index < crcs.length; index++) {
128 crcs[index] = in.readInt();
131 final int expectedSize = in.readUnsignedByte();
140 in.readBytes(rsaBytes);
143 final int rsaBufferSize = rsaBufBytes.length;
144 final ByteBuf rsaBuffer = in.alloc().buffer(rsaBufferSize, rsaBufferSize);
146 rsaBuffer.writeBytes(rsaBufBytes);
148 final int rsa = rsaBuffer.readUnsignedByte();
151 logger.warn(String.format(
"[%s] failed decrypt rsa %d", host, rsa));
156 final long clientHalf = rsaBuffer.readLong();
157 final long serverHalf = rsaBuffer.readLong();
160 (int) (clientHalf >> 32),
162 (
int) (serverHalf >> 32),
168 for (
int index = 0; index < isaacSeed.length; index++) {
169 isaacSeed[index] += 50;
174 @SuppressWarnings(
"unused")
final int uid = rsaBuffer.readInt();
176 final String UUID =
ByteBufUtil.readString(rsaBuffer);
177 final String macAddress =
ByteBufUtil.readString(rsaBuffer);
178 final String username =
ByteBufUtil.readString(rsaBuffer);
179 final String password =
ByteBufUtil.readString(rsaBuffer);
181 out.add(
new LoginDetailsPacket(UUID, macAddress, username, password, encryptor, decryptor));
192 final String host = ((InetSocketAddress) ctx.channel().remoteAddress()).getHostString();
193 logger.warn(String.format(
"[%s] session was rejected", host));
195 ByteBuf buffer = ctx.alloc().buffer(Byte.BYTES);
197 ctx.writeAndFlush(buffer)
198 .addListener(ChannelFutureListener.CLOSE);