1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.channel.uring;
17
18 import io.netty.buffer.ByteBuf;
19 import io.netty.buffer.ByteBufAllocator;
20 import io.netty.channel.ChannelConfig;
21 import io.netty.channel.RecvByteBufAllocator;
22 import io.netty.channel.unix.PreferredDirectByteBufAllocator;
23 import io.netty.util.UncheckedBooleanSupplier;
24
25 final class IoUringRecvByteAllocatorHandle extends RecvByteBufAllocator.DelegatingHandle
26 implements RecvByteBufAllocator.ExtendedHandle {
27 private final PreferredDirectByteBufAllocator preferredDirectByteBufAllocator =
28 new PreferredDirectByteBufAllocator();
29
30
31
32 private final UncheckedBooleanSupplier defaultSupplier = () -> lastBytesRead() > 0;
33
34 IoUringRecvByteAllocatorHandle(RecvByteBufAllocator.ExtendedHandle handle) {
35 super(handle);
36 }
37
38 private boolean rdHupReceived;
39 private boolean readComplete;
40
41 @Override
42 public void reset(ChannelConfig config) {
43 super.reset(config);
44 readComplete = false;
45 }
46
47 void rdHupReceived() {
48 this.rdHupReceived = true;
49 }
50
51 @Override
52 public ByteBuf allocate(ByteBufAllocator alloc) {
53
54 preferredDirectByteBufAllocator.updateAllocator(alloc);
55 return delegate().allocate(preferredDirectByteBufAllocator);
56 }
57
58 @Override
59 public boolean continueReading() {
60
61 return continueReading(defaultSupplier);
62 }
63
64 @Override
65 public boolean continueReading(UncheckedBooleanSupplier maybeMoreDataSupplier) {
66
67 return ((RecvByteBufAllocator.ExtendedHandle) delegate()).continueReading(maybeMoreDataSupplier)
68 || rdHupReceived;
69 }
70
71 @Override
72 public void readComplete() {
73 super.readComplete();
74 readComplete = true;
75 }
76
77 boolean isReadComplete() {
78 return readComplete;
79 }
80 }