|
@@ -1,108 +0,0 @@
|
|
|
-package com.its.vms.xnettcp.vms.codec;
|
|
|
-
|
|
|
-import com.its.app.utils.NettyUtils;
|
|
|
-import com.its.app.utils.SysUtils;
|
|
|
-import com.its.vms.config.CommunicationConfig;
|
|
|
-import com.its.vms.dto.TbVmsCtlrDto;
|
|
|
-import com.its.vms.service.AppRepositoryService;
|
|
|
-import com.its.vms.xnettcp.vms.handler.VmsServerIdleStateHandler;
|
|
|
-import io.netty.buffer.ByteBuf;
|
|
|
-import io.netty.channel.Channel;
|
|
|
-import io.netty.channel.ChannelHandlerContext;
|
|
|
-import io.netty.handler.codec.ByteToMessageDecoder;
|
|
|
-import lombok.RequiredArgsConstructor;
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.slf4j.MDC;
|
|
|
-
|
|
|
-import java.util.List;
|
|
|
-
|
|
|
-@Slf4j
|
|
|
-@RequiredArgsConstructor
|
|
|
-public class VmsTcpServerDecoder extends ByteToMessageDecoder {
|
|
|
-
|
|
|
- private final CommunicationConfig communicationConfig;
|
|
|
- private final AppRepositoryService repoService;
|
|
|
-
|
|
|
- @Override
|
|
|
- protected void decode(ChannelHandlerContext ctx, ByteBuf byteBuf, List<Object> list) {
|
|
|
-
|
|
|
- String ipAddress = NettyUtils.getRemoteIpAddress(ctx.channel());
|
|
|
- Channel channel = ctx.channel();
|
|
|
- TbVmsCtlrDto obj = this.repoService.getIpAddrMap(ipAddress);
|
|
|
- if (obj == null) {
|
|
|
- log.error("TcpServerDecoder.decode: Unknown Controller IP: {}. will be close.", ipAddress);
|
|
|
- VmsServerIdleStateHandler.disconnectChannel(null, channel);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- MDC.put("id", obj.getLogKey());
|
|
|
-
|
|
|
- if (!channel.isOpen() || !channel.isActive()) {
|
|
|
- log.error("TcpServerDecoder.decode: {}, isOpen: {}, isActive: {}. [{}]", ipAddress, channel.isOpen(), channel.isActive(), obj.getLogKey());
|
|
|
- VmsServerIdleStateHandler.disconnectChannel(obj, channel);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- int readableBytes = byteBuf.readableBytes();
|
|
|
- log.debug("RECV_0: [{}]. ReadableBytes: {} Bytes, ReaderIndex: {}", ipAddress, readableBytes, byteBuf.readerIndex());
|
|
|
- if (readableBytes == 0) {
|
|
|
- log.error("RECV: {}. byteBuf.readableBytes() == 0. [{]{}]", ipAddress, obj.getLogKey());
|
|
|
- return;
|
|
|
- }
|
|
|
- log.debug("RECV: Decoder: {}. [Readable:{}, RIDX:{}-WIDX:{}]", ipAddress, readableBytes, byteBuf.readerIndex(), byteBuf.writerIndex());
|
|
|
-
|
|
|
- if (this.communicationConfig.isDumpRecv()) {
|
|
|
- byte[] debugBytes = new byte[byteBuf.readableBytes()];
|
|
|
- byteBuf.getBytes(byteBuf.readerIndex(), debugBytes);
|
|
|
- log.debug("RECV: [{}], {} Bytes. {}", ipAddress, debugBytes.length, SysUtils.byteArrayToHex(debugBytes));
|
|
|
- }
|
|
|
-
|
|
|
-// int pktLength = 0;
|
|
|
-// int authLength= 0;
|
|
|
-// //int readerIndex = byteBuf.readerIndex();
|
|
|
-// while (readableBytes > VmsTcpServerDecoder.DSRC_ASN1_PACKET_MIN_SIZE) {
|
|
|
-//
|
|
|
-// byteBuf.markReaderIndex();
|
|
|
-// byte[] inBytes = new byte[byteBuf.readableBytes()];
|
|
|
-// byteBuf.readBytes(inBytes);
|
|
|
-// DatexDataPacket datexDataPacket = new DatexDataPacket();
|
|
|
-// try {
|
|
|
-// try {
|
|
|
-// pktLength = datexDataPacket.decode(new ByteArrayInputStream(inBytes, 0, inBytes.length));
|
|
|
-// }
|
|
|
-// catch(IOException e) {
|
|
|
-// //log.warn("DsrcTcpServerDecoder.decode: RECV: decode error. {}, {}, inBytes: {}, pktLength: {}", ipAddress, e.getMessage(), inBytes, inBytes.length);
|
|
|
-// break;
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (pktLength > readableBytes) {
|
|
|
-// //log.warn("RECV: Decoder: {}. [pktLength > readableBytes]", ipAddress);
|
|
|
-// //log.warn("RECV: Decoder: {}. [Readable:{}, RIDX:{}-WIDX:{}]. Packet Remain.", ipAddress, readableBytes, byteBuf.readerIndex(), byteBuf.writerIndex());
|
|
|
-// break;
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 패킷 읽은 만큼 이동
|
|
|
-// byteBuf.readerIndex(pktLength);
|
|
|
-// byteBuf.markReaderIndex();
|
|
|
-// byteBuf.discardReadBytes();
|
|
|
-//
|
|
|
-// BerOctetString berOctetString = datexDataPacket.getDatexData();
|
|
|
-// C2CAuthenticatedMessage c2c = new C2CAuthenticatedMessage();
|
|
|
-// authLength = c2c.decode(new ByteArrayInputStream(berOctetString.value, 0, berOctetString.value.length));
|
|
|
-// //log.info("RECV: Decoder: {}. ASN1 PACKET: {} Bytes, decodeLength: {} Bytes", ipAddress, pktLength, authLength);
|
|
|
-// //log.info("RECV: Decoder: {}, C2CAuth: {}", ipAddress, c2c);
|
|
|
-// obj.setLastRecvTime();
|
|
|
-// list.add(c2c);
|
|
|
-//
|
|
|
-// readableBytes = byteBuf.readableBytes();
|
|
|
-// }
|
|
|
-// catch(Exception e) {
|
|
|
-// //log.error("TcpServerDecoder.decode: RECV: {}. Exception Error1: will be closed: {}. [{}]", ipAddress, e.toString(), obj.getLogKey());
|
|
|
-// VmsServerIdleStateHandler.disconnectChannel(obj, channel);
|
|
|
-// }
|
|
|
-// }
|
|
|
-// byteBuf.resetReaderIndex();
|
|
|
- MDC.remove(obj.getLogKey());
|
|
|
- MDC.clear();
|
|
|
- }
|
|
|
-}
|