diff --git a/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/Constants.java b/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/Constants.java index dc2774b7..5df48a6c 100644 --- a/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/Constants.java +++ b/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/Constants.java @@ -4,6 +4,7 @@ import io.netty.channel.Channel; import io.netty.util.AttributeKey; import java.net.InetSocketAddress; +import java.util.function.BiConsumer; /** * @@ -33,6 +34,8 @@ public interface Constants { AttributeKey FLOW_LIMITER_FLAG = AttributeKey.newInstance("flowLimiterFlag"); + AttributeKey PROXY_CONNECT_ATTACHMENT = AttributeKey.newInstance("proxyConnectAttachment");; + int HEADER_SIZE = 4; int TYPE_SIZE = 1; @@ -51,4 +54,20 @@ public interface Constants { String ERROR = "ERROR"; String PORT_MAPPING_SYNC = "PORT_MAPPING_SYNC"; } + + class ProxyAttachment { + private byte[] bytes; + private BiConsumer executor; + + public ProxyAttachment(byte[] bytes, BiConsumer executor) { + this.bytes = bytes; + this.executor = executor; + } + + public void execute(Channel channel) { + if (null != executor && null != channel && channel.isActive()) { + this.executor.accept(channel, bytes); + } + } + } } diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/core/UdpVisitorChannelHandler.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/core/UdpVisitorChannelHandler.java index 4432742e..d8e9a65a 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/core/UdpVisitorChannelHandler.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/core/UdpVisitorChannelHandler.java @@ -6,20 +6,16 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOption; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.socket.DatagramPacket; -import io.netty.handler.codec.DecoderException; import lombok.extern.slf4j.Slf4j; import org.dromara.neutrinoproxy.core.Constants; import org.dromara.neutrinoproxy.core.ProxyMessage; import org.dromara.neutrinoproxy.server.constant.NetworkProtocolEnum; -import org.dromara.neutrinoproxy.server.proxy.domain.ProxyAttachment; import org.dromara.neutrinoproxy.server.proxy.domain.VisitorChannelAttachInfo; import org.dromara.neutrinoproxy.server.service.FlowReportService; import org.dromara.neutrinoproxy.server.util.ProxyUtil; import org.noear.solon.Solon; -import java.io.IOException; import java.net.InetSocketAddress; -import java.net.SocketException; /** * @author: aoshiguchen @@ -36,7 +32,7 @@ public class UdpVisitorChannelHandler extends SimpleChannelInboundHandler { + Constants.ProxyAttachment proxyAttachment = new Constants.ProxyAttachment(bytes, (channel, buf) -> { String visitorId = ProxyUtil.getVisitorIdBySocketAddress(datagramPacket.sender()); if (StrUtil.isBlank(visitorId)) { return; @@ -76,7 +72,7 @@ public class UdpVisitorChannelHandler extends SimpleChannelInboundHandler executor; - - public ProxyAttachment(Channel channel, byte[] bytes, BiConsumer executor) { - this.channel = channel; - this.bytes = bytes; - this.executor = executor; - } - - public void execute() { - if (null != executor) { - this.executor.accept(channel, bytes); - } - } -} +//package org.dromara.neutrinoproxy.server.proxy.domain; +// +//import io.netty.channel.Channel; +// +//import java.util.function.BiConsumer; +// +///** +// * 代理连接附件 +// * @author: aoshiguchen +// * @date: 2023/4/2 +// */ +//public class ProxyAttachment { +// private Channel channel; +// private byte[] bytes; +// private BiConsumer executor; +// +// public ProxyAttachment(Channel channel, byte[] bytes, BiConsumer executor) { +// this.channel = channel; +// this.bytes = bytes; +// this.executor = executor; +// } +// +// public void execute() { +// if (null != executor) { +// this.executor.accept(channel, bytes); +// } +// } +//} diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/enhance/HttpVisitorChannelHandler.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/enhance/HttpVisitorChannelHandler.java index 2abbfc65..9ac776f3 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/enhance/HttpVisitorChannelHandler.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/enhance/HttpVisitorChannelHandler.java @@ -9,7 +9,6 @@ import org.apache.commons.lang3.StringUtils; import org.dromara.neutrinoproxy.core.Constants; import org.dromara.neutrinoproxy.core.ProxyMessage; import org.dromara.neutrinoproxy.server.constant.NetworkProtocolEnum; -import org.dromara.neutrinoproxy.server.proxy.domain.ProxyAttachment; import org.dromara.neutrinoproxy.server.proxy.domain.VisitorChannelAttachInfo; import org.dromara.neutrinoproxy.server.service.FlowReportService; import org.dromara.neutrinoproxy.server.util.ProxyUtil; @@ -31,7 +30,7 @@ public class HttpVisitorChannelHandler extends SimpleChannelInboundHandler { + Constants.ProxyAttachment proxyAttachment = new Constants.ProxyAttachment(bytes, (channel, buf) -> { Channel proxyChannel = channel.attr(Constants.NEXT_CHANNEL).get(); if (null == proxyChannel) { // 该端口还没有代理客户端 @@ -48,7 +47,7 @@ public class HttpVisitorChannelHandler extends SimpleChannelInboundHandler proxyConnectAttachmentMap = new HashMap<>(); + private static Map proxyConnectAttachmentMap = new HashMap<>(); /** * 完整域名 - 服务端端口映射 */ @@ -334,7 +336,7 @@ public class ProxyUtil { * @param visitorId * @param proxyAttachment */ - public static void addProxyConnectAttachment(String visitorId, ProxyAttachment proxyAttachment) { + public static void addProxyConnectAttachment(String visitorId, Constants.ProxyAttachment proxyAttachment) { proxyConnectAttachmentMap.put(visitorId, proxyAttachment); } @@ -343,7 +345,7 @@ public class ProxyUtil { * @param visitorId * @return */ - public static ProxyAttachment getProxyConnectAttachment(String visitorId) { + public static Constants.ProxyAttachment getProxyConnectAttachment(String visitorId) { return proxyConnectAttachmentMap.get(visitorId); } @@ -449,7 +451,7 @@ public class ProxyUtil { if (StringUtils.isBlank(visitorId)) { return; } - ProxyAttachment proxyAttachment = ProxyUtil.getProxyConnectAttachment(visitorId); + Constants.ProxyAttachment proxyAttachment = ProxyUtil.getProxyConnectAttachment(visitorId); if (null != proxyAttachment) { tryClose(channel); }