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 ctx.read();
35 }
36
37 @Override
38 public void channelRead(final ChannelHandlerContext ctx, Object msg) {
39 inboundChannel.writeAndFlush(msg).addListener(new ChannelFutureListener() {
40 @Override
41 public void operationComplete(ChannelFuture future) {
42 if (future.isSuccess()) {
43 ctx.channel().read();
44 } else {
45 future.channel().close();
46 }
47 }
48 });
49 }
50
51 @Override
52 public void channelInactive(ChannelHandlerContext ctx) {
53 HexDumpProxyFrontendHandler.closeOnFlush(inboundChannel);
54 }
55
56 @Override
57 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
58 cause.printStackTrace();
59 HexDumpProxyFrontendHandler.closeOnFlush(ctx.channel());
60 }
61 }