1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.example.proxy;
17
18 import io.netty.channel.Channel;
19 import io.netty.channel.ChannelFuture;
20 import io.netty.channel.ChannelFutureListener;
21 import io.netty.channel.ChannelHandlerContext;
22 import io.netty.channel.ChannelInboundHandlerAdapter;
23
24 public class HexDumpProxyBackendHandler extends ChannelInboundHandlerAdapter {
25
26 private final Channel inboundChannel;
27
28 public HexDumpProxyBackendHandler(Channel inboundChannel) {
29 this.inboundChannel = inboundChannel;
30 }
31
32 @Override
33 public void channelActive(ChannelHandlerContext ctx) {
34 if (!inboundChannel.isActive()) {
35 HexDumpProxyFrontendHandler.closeOnFlush(ctx.channel());
36 } else {
37 ctx.read();
38 }
39 }
40
41 @Override
42 public void channelRead(final ChannelHandlerContext ctx, Object msg) {
43 inboundChannel.writeAndFlush(msg).addListener(new ChannelFutureListener() {
44 @Override
45 public void operationComplete(ChannelFuture future) {
46 if (future.isSuccess()) {
47 ctx.channel().read();
48 } else {
49 future.channel().close();
50 }
51 }
52 });
53 }
54
55 @Override
56 public void channelInactive(ChannelHandlerContext ctx) {
57 HexDumpProxyFrontendHandler.closeOnFlush(inboundChannel);
58 }
59
60 @Override
61 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
62 cause.printStackTrace();
63 HexDumpProxyFrontendHandler.closeOnFlush(ctx.channel());
64 }
65 }