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.ChannelHandlerContext;
20 import io.netty.channel.ChannelInboundHandlerAdapter;
21
22 public class HexDumpProxyBackendHandler extends ChannelInboundHandlerAdapter {
23
24 private final Channel inboundChannel;
25
26 public HexDumpProxyBackendHandler(Channel inboundChannel) {
27 this.inboundChannel = inboundChannel;
28 }
29
30 @Override
31 public void channelActive(ChannelHandlerContext ctx) {
32 if (!inboundChannel.isActive()) {
33 HexDumpProxyFrontendHandler.closeOnFlush(ctx.channel());
34 } else {
35 ctx.read();
36 }
37 }
38
39 @Override
40 public void channelRead(final ChannelHandlerContext ctx, Object msg) {
41 inboundChannel.writeAndFlush(msg).addListener(future -> {
42 if (future.isSuccess()) {
43 ctx.read();
44 } else {
45 ctx.close();
46 }
47 });
48 }
49
50 @Override
51 public void channelInactive(ChannelHandlerContext ctx) {
52 HexDumpProxyFrontendHandler.closeOnFlush(inboundChannel);
53 }
54
55 @Override
56 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
57 cause.printStackTrace();
58 HexDumpProxyFrontendHandler.closeOnFlush(ctx.channel());
59 }
60 }