
com.alibaba.arthas.nat.agent.server.forward.RelayHandler Maven / Gradle / Ivy
The newest version!
package com.alibaba.arthas.nat.agent.server.forward;
import com.alibaba.arthas.tunnel.client.ChannelUtils;
import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.ReferenceCountUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @description: RelayHandler
* @author:flzjkl
* @date: 2024-08-25 22:12
*/
public final class RelayHandler extends ChannelInboundHandlerAdapter {
private final static Logger logger = LoggerFactory.getLogger(RelayHandler.class);
private final Channel relayChannel;
public RelayHandler(Channel relayChannel) {
this.relayChannel = relayChannel;
}
@Override
public void channelActive(ChannelHandlerContext ctx) {
ctx.writeAndFlush(Unpooled.EMPTY_BUFFER);
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
if (relayChannel.isActive()) {
relayChannel.writeAndFlush(msg);
} else {
ReferenceCountUtil.release(msg);
}
}
@Override
public void channelInactive(ChannelHandlerContext ctx) {
if (relayChannel.isActive()) {
ChannelUtils.closeOnFlush(relayChannel);
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
logger.error("RelayHandler error", cause);
try {
if (relayChannel.isActive()) {
relayChannel.close();
}
} finally {
ctx.close();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy