+4
-4
@@ -20,7 +20,7 @@ import org.dromara.neutrinoproxy.core.ProxyMessage;
|
||||
@Slf4j
|
||||
public class CmdChannelHandler extends SimpleChannelInboundHandler<ProxyMessage>{
|
||||
private static volatile Boolean transferLogEnable = Boolean.FALSE;
|
||||
private IBeanHandler beanHandler;
|
||||
private final IBeanHandler beanHandler;
|
||||
|
||||
public CmdChannelHandler(IBeanHandler beanHandler) {
|
||||
this.beanHandler = beanHandler;
|
||||
@@ -31,7 +31,7 @@ public class CmdChannelHandler extends SimpleChannelInboundHandler<ProxyMessage>
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void channelRead0(ChannelHandlerContext ctx, ProxyMessage proxyMessage) throws Exception {
|
||||
protected void channelRead0(ChannelHandlerContext ctx, ProxyMessage proxyMessage){
|
||||
if (ProxyMessage.TYPE_HEARTBEAT != proxyMessage.getType() || transferLogEnable) {
|
||||
log.debug("[CMD Channel]Client CmdChannel recieved proxy message, type is {}", proxyMessage.getType());
|
||||
}
|
||||
@@ -58,13 +58,13 @@ public class CmdChannelHandler extends SimpleChannelInboundHandler<ProxyMessage>
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
|
||||
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause){
|
||||
log.error("[CMD Channel]Client CmdChannel Error channelId:{}", ctx.channel().id().asLongText(), cause);
|
||||
ctx.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
|
||||
public void userEventTriggered(ChannelHandlerContext ctx, Object evt){
|
||||
if(evt instanceof IdleStateEvent) {
|
||||
IdleStateEvent event = (IdleStateEvent)evt;
|
||||
switch (event.state()) {
|
||||
|
||||
+2
-3
@@ -19,9 +19,8 @@ import org.dromara.neutrinoproxy.core.dispatcher.Match;
|
||||
@Slf4j
|
||||
@Match(type = Constants.ProxyDataTypeName.AUTH)
|
||||
public class ProxyMessageAuthHandler implements ProxyMessageHandler {
|
||||
private ProxyConfig proxyConfig;
|
||||
|
||||
private Runnable stop;
|
||||
private final ProxyConfig proxyConfig;
|
||||
private final Runnable stop;
|
||||
|
||||
public ProxyMessageAuthHandler(ProxyConfig proxyConfig,Runnable stop){
|
||||
this.proxyConfig=proxyConfig;
|
||||
|
||||
+33
-38
@@ -21,9 +21,9 @@ import org.dromara.neutrinoproxy.core.dispatcher.Match;
|
||||
@Match(type = Constants.ProxyDataTypeName.CONNECT)
|
||||
public class ProxyMessageConnectHandler implements ProxyMessageHandler {
|
||||
|
||||
private Bootstrap tcpProxyTunnelBootstrap;
|
||||
private Bootstrap realServerBootstrap;
|
||||
private ProxyConfig proxyConfig;
|
||||
private final Bootstrap tcpProxyTunnelBootstrap;
|
||||
private final Bootstrap realServerBootstrap;
|
||||
private final ProxyConfig proxyConfig;
|
||||
|
||||
public ProxyMessageConnectHandler(Bootstrap tcpProxyTunnelBootstrap,Bootstrap realServerBootstrap,ProxyConfig proxyConfig){
|
||||
this.proxyConfig=proxyConfig;
|
||||
@@ -39,48 +39,43 @@ public class ProxyMessageConnectHandler implements ProxyMessageHandler {
|
||||
String ip = serverInfo[0];
|
||||
int port = Integer.parseInt(serverInfo[1]);
|
||||
// 连接真实的、被代理的服务
|
||||
realServerBootstrap.connect(ip, port).addListener(new ChannelFutureListener() {
|
||||
realServerBootstrap.connect(ip, port).addListener((ChannelFutureListener) future -> {
|
||||
// 连接后端服务器成功
|
||||
if (future.isSuccess()) {
|
||||
final Channel realServerChannel = future.channel();
|
||||
|
||||
@Override
|
||||
public void operationComplete(ChannelFuture future) throws Exception {
|
||||
realServerChannel.config().setOption(ChannelOption.AUTO_READ, false);
|
||||
|
||||
// 连接后端服务器成功
|
||||
if (future.isSuccess()) {
|
||||
final Channel realServerChannel = future.channel();
|
||||
// 获取连接
|
||||
ProxyUtil.borrowTcpProxyChanel(tcpProxyTunnelBootstrap, new ProxyChannelBorrowListener() {
|
||||
|
||||
realServerChannel.config().setOption(ChannelOption.AUTO_READ, false);
|
||||
@Override
|
||||
public void success(Channel channel) {
|
||||
// 连接绑定
|
||||
channel.attr(Constants.NEXT_CHANNEL).set(realServerChannel);
|
||||
realServerChannel.attr(Constants.NEXT_CHANNEL).set(channel);
|
||||
|
||||
// 获取连接
|
||||
ProxyUtil.borrowTcpProxyChanel(tcpProxyTunnelBootstrap, new ProxyChannelBorrowListener() {
|
||||
// 远程绑定
|
||||
channel.writeAndFlush(ProxyMessage.buildConnectMessage(visitorId + "@" + proxyConfig.getTunnel().getLicenseKey()));
|
||||
|
||||
@Override
|
||||
public void success(Channel channel) {
|
||||
// 连接绑定
|
||||
channel.attr(Constants.NEXT_CHANNEL).set(realServerChannel);
|
||||
realServerChannel.attr(Constants.NEXT_CHANNEL).set(channel);
|
||||
realServerChannel.config().setOption(ChannelOption.AUTO_READ, true);
|
||||
ProxyUtil.addRealServerChannel(visitorId, realServerChannel);
|
||||
ProxyUtil.setRealServerChannelVisitorId(realServerChannel, visitorId);
|
||||
}
|
||||
|
||||
// 远程绑定
|
||||
channel.writeAndFlush(ProxyMessage.buildConnectMessage(visitorId + "@" + proxyConfig.getTunnel().getLicenseKey()));
|
||||
@Override
|
||||
public void error(Throwable cause) {
|
||||
ProxyMessage proxyMessage1 = new ProxyMessage();
|
||||
proxyMessage1.setType(ProxyMessage.TYPE_DISCONNECT);
|
||||
proxyMessage1.setInfo(visitorId);
|
||||
cmdChannel.writeAndFlush(proxyMessage1);
|
||||
}
|
||||
});
|
||||
|
||||
realServerChannel.config().setOption(ChannelOption.AUTO_READ, true);
|
||||
ProxyUtil.addRealServerChannel(visitorId, realServerChannel);
|
||||
ProxyUtil.setRealServerChannelVisitorId(realServerChannel, visitorId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(Throwable cause) {
|
||||
ProxyMessage proxyMessage = new ProxyMessage();
|
||||
proxyMessage.setType(ProxyMessage.TYPE_DISCONNECT);
|
||||
proxyMessage.setInfo(visitorId);
|
||||
cmdChannel.writeAndFlush(proxyMessage);
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
cmdChannel.writeAndFlush(ProxyMessage.buildDisconnectMessage(visitorId));
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
cmdChannel.writeAndFlush(ProxyMessage.buildDisconnectMessage(visitorId));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-6
@@ -10,7 +10,6 @@ import org.dromara.neutrinoproxy.client.sdk.core.IAbProxyClientService;
|
||||
import org.dromara.neutrinoproxy.core.ProxyDataTypeEnum;
|
||||
import org.dromara.neutrinoproxy.core.ProxyMessage;
|
||||
import org.dromara.neutrinoproxy.core.ProxyMessageHandler;
|
||||
import org.dromara.neutrinoproxy.core.aot.NeutrinoCoreRuntimeNativeRegistrar;
|
||||
import org.dromara.neutrinoproxy.core.dispatcher.DefaultDispatcher;
|
||||
import org.dromara.neutrinoproxy.core.dispatcher.Dispatcher;
|
||||
|
||||
@@ -24,7 +23,7 @@ import java.util.List;
|
||||
public abstract class ProxyMessageFactory extends IProxyConfiguration {
|
||||
|
||||
public abstract void beanInject(String beanName, Object t);
|
||||
public abstract Object getBean(String beanName,Class c);
|
||||
public abstract Object getBean(String beanName,Class<?> c);
|
||||
|
||||
public abstract void stop();
|
||||
public abstract boolean isAotRuntime();
|
||||
@@ -42,7 +41,6 @@ public abstract class ProxyMessageFactory extends IProxyConfiguration {
|
||||
public void init(ProxyConfig proxyConfig){
|
||||
NioEventLoopGroup tunnelWorkGroup = super.tunnelWorkGroup(proxyConfig);
|
||||
beanInject("tunnelWorkGroup",tunnelWorkGroup);
|
||||
Object tunnelWorkGroup1 = getBean("tunnelWorkGroup",NioEventLoopGroup.class);
|
||||
NioEventLoopGroup tcpRealServerWorkGroup = super.tcpRealServerWorkGroup(proxyConfig);
|
||||
beanInject("tcpRealServerWorkGroup",tcpRealServerWorkGroup);
|
||||
NioEventLoopGroup udpServerGroup = super.udpServerGroup(proxyConfig);
|
||||
@@ -59,13 +57,11 @@ public abstract class ProxyMessageFactory extends IProxyConfiguration {
|
||||
beanInject("realServerBootstrap",realServerBootstrap);
|
||||
Bootstrap udpServerBootstrap = super.udpServerBootstrap(proxyConfig, udpServerGroup, udpWorkGroup);
|
||||
beanInject("udpServerBootstrap",udpServerBootstrap);
|
||||
// NeutrinoCoreRuntimeNativeRegistrar neutrinoCoreRuntimeNativeRegistrar = super.neutrinoCoreRuntimeNativeRegistrar();
|
||||
// beanInject("neutrinoCoreRuntimeNativeRegistrar",neutrinoCoreRuntimeNativeRegistrar);
|
||||
dispatcher(proxyConfig, tcpProxyTunnelBootstrap, realServerBootstrap);
|
||||
}
|
||||
public void dispatcher(ProxyConfig proxyConfig, Bootstrap tcpProxyTunnelBootstrap, Bootstrap realServerBootstrap) {
|
||||
List<ProxyMessageHandler> list = Lists.newArrayList(
|
||||
new ProxyMessageAuthHandler(proxyConfig,()->stop()),
|
||||
new ProxyMessageAuthHandler(proxyConfig, this::stop),
|
||||
new ProxyMessageConnectHandler(tcpProxyTunnelBootstrap,realServerBootstrap,proxyConfig),
|
||||
new ProxyMessageDisconnectHandler(),
|
||||
new ProxyMessageErrorHandler(),
|
||||
|
||||
+2
-2
@@ -22,8 +22,8 @@ import org.dromara.neutrinoproxy.core.dispatcher.Match;
|
||||
@Match(type = Constants.ProxyDataTypeName.UDP_CONNECT)
|
||||
public class UdpProxyMessageConnectHandler implements ProxyMessageHandler {
|
||||
|
||||
private ProxyConfig proxyConfig;
|
||||
private Bootstrap udpProxyTunnelBootstrap;
|
||||
private final ProxyConfig proxyConfig;
|
||||
private final Bootstrap udpProxyTunnelBootstrap;
|
||||
|
||||
public UdpProxyMessageConnectHandler(ProxyConfig proxyConfig,Bootstrap udpProxyTunnelBootstrap){
|
||||
this.proxyConfig=proxyConfig;
|
||||
|
||||
+1
@@ -13,6 +13,7 @@ import org.springframework.stereotype.Component;
|
||||
@ConfigurationProperties(prefix = "neutrino.proxy")
|
||||
@Component
|
||||
public class SpringProxyConfig {
|
||||
private Boolean enable=false;
|
||||
private Protocol protocol;
|
||||
private Tunnel tunnel;
|
||||
private Client client;
|
||||
|
||||
+6
-4
@@ -25,9 +25,11 @@ public class ProxyClientService implements ApplicationRunner {
|
||||
private SpringProxyConfig springProxyConfig;
|
||||
@Override
|
||||
public void run(ApplicationArguments args) {
|
||||
log.info("启动中....");
|
||||
ProxyConfig proxyConfig = BeanUtil.toBean(springProxyConfig, ProxyConfig.class);
|
||||
proxyConfiguration.start(proxyConfig);
|
||||
log.info("启动成功....");
|
||||
if(springProxyConfig.getEnable()){
|
||||
log.info("启动中....");
|
||||
ProxyConfig proxyConfig = BeanUtil.toBean(springProxyConfig, ProxyConfig.class);
|
||||
proxyConfiguration.start(proxyConfig);
|
||||
log.info("启动成功....");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,3 +50,4 @@ neutrino:
|
||||
puppet-port-range: 10000-10500
|
||||
# 是否开启隧道传输报文日志(日志级别为debug时开启才有效)
|
||||
transfer-log-enable: ${CLIENT_LOG:false}
|
||||
enable: true
|
||||
|
||||
Reference in New Issue
Block a user