diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbRequestHandler.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbRequestHandler.java index 1f6cae42..893f6dd7 100644 --- a/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbRequestHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbRequestHandler.java @@ -31,9 +31,11 @@ public class AimeDbRequestHandler extends ChannelInboundHandlerAdapter { private final LookupHandler lookupHandler; private final Lookup2Handler lookup2Handler; private final RegisterHandler registerHandler; + private final Unknown19Handler unknown19Handler; + private final Unknown13Handler unknown13Handler; @Autowired - public AimeDbRequestHandler(CampaignHandler campaignHandler, FeliCaLookupHandler feliCaLookupHandler, FeliCaLookup2Handler feliCaLookup2Handler, GoodbyeHandler goodbyeHandler, HelloHandler helloHandler, LogHandler logHandler, LookupHandler lookupHandler, Lookup2Handler lookup2Handler, RegisterHandler registerHandler) { + public AimeDbRequestHandler(CampaignHandler campaignHandler, FeliCaLookupHandler feliCaLookupHandler, FeliCaLookup2Handler feliCaLookup2Handler, GoodbyeHandler goodbyeHandler, HelloHandler helloHandler, LogHandler logHandler, LookupHandler lookupHandler, Lookup2Handler lookup2Handler, RegisterHandler registerHandler, Unknown19Handler unknown19Handler, Unknown13Handler unknown13Handler) { this.campaignHandler = campaignHandler; this.feliCaLookupHandler = feliCaLookupHandler; this.feliCaLookup2Handler = feliCaLookup2Handler; @@ -43,6 +45,8 @@ public class AimeDbRequestHandler extends ChannelInboundHandlerAdapter { this.lookupHandler = lookupHandler; this.lookup2Handler = lookup2Handler; this.registerHandler = registerHandler; + this.unknown19Handler = unknown19Handler; + this.unknown13Handler = unknown13Handler; } @@ -68,7 +72,7 @@ public class AimeDbRequestHandler extends ChannelInboundHandlerAdapter { campaignHandler.handle(ctx, data); break; case 0x000d: - registerHandler.handle(ctx, data); + unknown13Handler.handle(ctx, data); break; case 0x000f: lookup2Handler.handle(ctx, data); @@ -76,6 +80,9 @@ public class AimeDbRequestHandler extends ChannelInboundHandlerAdapter { case 0x0011: feliCaLookup2Handler.handle(ctx, data); break; + case 0x0013: + unknown19Handler.handle(ctx, data); + break; case 0x0064: helloHandler.handle(ctx, data); break; diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbServerInitializer.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbServerInitializer.java index 15d83401..c43bc17a 100644 --- a/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbServerInitializer.java +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/AimeDbServerInitializer.java @@ -25,9 +25,11 @@ public class AimeDbServerInitializer extends ChannelInitializer { private final LookupHandler lookupHandler; private final Lookup2Handler lookup2Handler; private final RegisterHandler registerHandler; + private final Unknown19Handler unknown19Handler; + private final Unknown13Handler unknown13Handler; @Autowired - public AimeDbServerInitializer(CampaignHandler campaignHandler, FeliCaLookupHandler feliCaLookupHandler, FeliCaLookup2Handler feliCaLookup2Handler, GoodbyeHandler goodbyeHandler, HelloHandler helloHandler, LogHandler logHandler, LookupHandler lookupHandler, Lookup2Handler lookup2Handler, RegisterHandler registerHandler) { + public AimeDbServerInitializer(CampaignHandler campaignHandler, FeliCaLookupHandler feliCaLookupHandler, FeliCaLookup2Handler feliCaLookup2Handler, GoodbyeHandler goodbyeHandler, HelloHandler helloHandler, LogHandler logHandler, LookupHandler lookupHandler, Lookup2Handler lookup2Handler, RegisterHandler registerHandler, Unknown19Handler unknown19Handler, Unknown13Handler unknown13Handler) { this.campaignHandler = campaignHandler; this.feliCaLookup2Handler = feliCaLookup2Handler; this.feliCaLookupHandler = feliCaLookupHandler; @@ -37,6 +39,8 @@ public class AimeDbServerInitializer extends ChannelInitializer { this.lookupHandler = lookupHandler; this.lookup2Handler = lookup2Handler; this.registerHandler = registerHandler; + this.unknown19Handler = unknown19Handler; + this.unknown13Handler = unknown13Handler; } @@ -45,7 +49,7 @@ public class AimeDbServerInitializer extends ChannelInitializer { ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast("encoder", new AimeDbEncoder()); pipeline.addLast("decoder", new AimeDbDecoder()); - pipeline.addLast("handler", new AimeDbRequestHandler(campaignHandler, feliCaLookupHandler, feliCaLookup2Handler, goodbyeHandler, helloHandler, logHandler, lookupHandler, lookup2Handler, registerHandler)); + pipeline.addLast("handler", new AimeDbRequestHandler(campaignHandler, feliCaLookupHandler, feliCaLookup2Handler, goodbyeHandler, helloHandler, logHandler, lookupHandler, lookup2Handler, registerHandler, unknown19Handler, unknown13Handler)); } } diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/impl/Unknown13Handler.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/impl/Unknown13Handler.java new file mode 100644 index 00000000..78216fd5 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/impl/Unknown13Handler.java @@ -0,0 +1,55 @@ +package icu.samnyan.aqua.sega.aimedb.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.aimedb.handler.BaseHandler; +import icu.samnyan.aqua.sega.aimedb.util.AimeDbUtil; +import icu.samnyan.aqua.sega.aimedb.util.LogMapper; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class Unknown13Handler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(Unknown13Handler.class); + + private final LogMapper logMapper; + + @Autowired + public Unknown13Handler(LogMapper logMapper) { + this.logMapper = logMapper; + } + + @Override + public void handle(ChannelHandlerContext ctx, ByteBuf msg) throws JsonProcessingException { + Map requestMap = AimeDbUtil.getBaseInfo(msg); + requestMap.put("type", "unknown13"); + + logger.info("Request: " + logMapper.write(requestMap)); + + Map resultMap = new HashMap<>(); + resultMap.put("type", "unknown13"); + resultMap.put("status", 1); + + logger.info("Response: " + logMapper.write(resultMap)); + + ByteBuf respSrc = Unpooled.copiedBuffer(new byte[0x0050]); + respSrc.setShortLE(0x0004, 0x000e); + respSrc.setShortLE(0x0008, (int) resultMap.get("status")); + respSrc.setShortLE(0x0020, 0x006f); + respSrc.setShortLE(0x0024, 0x0001); + + ctx.writeAndFlush(respSrc); + + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/impl/Unknown19Handler.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/impl/Unknown19Handler.java new file mode 100644 index 00000000..58396d00 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/impl/Unknown19Handler.java @@ -0,0 +1,52 @@ +package icu.samnyan.aqua.sega.aimedb.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.aimedb.handler.BaseHandler; +import icu.samnyan.aqua.sega.aimedb.util.AimeDbUtil; +import icu.samnyan.aqua.sega.aimedb.util.LogMapper; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Component +public class Unknown19Handler implements BaseHandler { + + private static final Logger logger = LoggerFactory.getLogger(Unknown19Handler.class); + + private final LogMapper logMapper; + + @Autowired + public Unknown19Handler(LogMapper logMapper) { + this.logMapper = logMapper; + } + + @Override + public void handle(ChannelHandlerContext ctx, ByteBuf msg) throws JsonProcessingException { + Map requestMap = AimeDbUtil.getBaseInfo(msg); + requestMap.put("type", "unknown19"); + + logger.info("Request: " + logMapper.write(requestMap)); + + Map resultMap = new HashMap<>(); + resultMap.put("type", "unknown19"); + resultMap.put("status", 1); + + logger.info("Response: " + logMapper.write(resultMap)); + + ByteBuf respSrc = Unpooled.copiedBuffer(new byte[0x0040]); + respSrc.setShortLE(0x0004, 0x0014); + respSrc.setShortLE(0x0008, (int) resultMap.get("status")); + + ctx.writeAndFlush(respSrc); + } +}