1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.handler.codec.http3;
17
18 import io.netty.channel.ChannelHandlerContext;
19 import io.netty.channel.ChannelOutboundHandler;
20 import io.netty.channel.ChannelPromise;
21
22 import java.net.SocketAddress;
23
24 import static io.netty.handler.codec.http3.Http3FrameValidationUtils.frameTypeUnexpected;
25 import static io.netty.handler.codec.http3.Http3FrameValidationUtils.validateFrameWritten;
26
27 class Http3FrameTypeDuplexValidationHandler<T extends Http3Frame> extends Http3FrameTypeInboundValidationHandler<T>
28 implements ChannelOutboundHandler {
29
30 Http3FrameTypeDuplexValidationHandler(Class<T> frameType) {
31 super(frameType);
32 }
33
34 @Override
35 public final void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) {
36 T frame = validateFrameWritten(frameType, msg);
37 if (frame != null) {
38 write(ctx, frame, promise);
39 } else {
40 writeFrameDiscarded(msg, promise);
41 }
42 }
43
44 void write(ChannelHandlerContext ctx, T msg, ChannelPromise promise) {
45 ctx.write(msg, promise);
46 }
47
48 void writeFrameDiscarded(Object discardedFrame, ChannelPromise promise) {
49 frameTypeUnexpected(promise, discardedFrame);
50 }
51
52 @Override
53 public void flush(ChannelHandlerContext ctx) {
54 ctx.flush();
55 }
56
57 @Override
58 public void bind(ChannelHandlerContext ctx, SocketAddress localAddress, ChannelPromise promise) {
59 ctx.bind(localAddress, promise);
60 }
61
62 @Override
63 public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress,
64 ChannelPromise promise) throws Exception {
65 ctx.connect(remoteAddress, localAddress, promise);
66 }
67
68 @Override
69 public void disconnect(ChannelHandlerContext ctx, ChannelPromise promise) {
70 ctx.disconnect(promise);
71 }
72
73 @Override
74 public void close(ChannelHandlerContext ctx, ChannelPromise promise) throws Exception {
75 ctx.close(promise);
76 }
77
78 @Override
79 public void deregister(ChannelHandlerContext ctx, ChannelPromise promise) throws Exception {
80 ctx.deregister(promise);
81 }
82
83 @Override
84 public void read(ChannelHandlerContext ctx) throws Exception {
85 ctx.read();
86 }
87 }