1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.openr66.protocol.localhandler.packet;
21
22 import io.netty.buffer.ByteBuf;
23 import io.netty.buffer.ByteBufAllocator;
24 import io.netty.buffer.Unpooled;
25 import org.waarp.common.utility.WaarpNettyUtil;
26 import org.waarp.openr66.protocol.exception.OpenR66ProtocolPacketException;
27 import org.waarp.openr66.protocol.localhandler.LocalChannelReference;
28
29
30
31
32
33
34 public class BlockRequestPacket extends AbstractLocalPacket {
35 private final boolean block;
36 private final byte[] key;
37
38
39
40
41
42
43
44
45
46
47
48 public static BlockRequestPacket createFromBuffer(final int headerLength,
49 final int middleLength,
50 final int endLength,
51 final ByteBuf buf)
52 throws OpenR66ProtocolPacketException {
53 if (headerLength - 2 <= 0) {
54 throw new OpenR66ProtocolPacketException("Not enough data");
55 }
56 final byte isblock = buf.readByte();
57 final byte[] bpassword = new byte[headerLength - 2];
58 buf.readBytes(bpassword);
59 final boolean block = isblock == 1;
60 return new BlockRequestPacket(block, bpassword);
61 }
62
63
64
65
66
67 public BlockRequestPacket(final boolean block, final byte[] spassword) {
68 this.block = block;
69 key = spassword;
70 }
71
72 @Override
73 public final boolean hasGlobalBuffer() {
74 return true;
75 }
76
77 @Override
78 public final synchronized void createAllBuffers(
79 final LocalChannelReference lcr, final int networkHeader) {
80 end = Unpooled.EMPTY_BUFFER;
81 middle = Unpooled.EMPTY_BUFFER;
82 final int globalSize = networkHeader + LOCAL_HEADER_SIZE + 1 + key.length;
83 final int offset = networkHeader + LOCAL_HEADER_SIZE;
84 global = ByteBufAllocator.DEFAULT.ioBuffer(globalSize, globalSize);
85 header = WaarpNettyUtil.slice(global, offset, 1 + key.length);
86 header.writeByte(block? 1 : 0);
87 header.writeBytes(key);
88 }
89
90 @Override
91 public final String toString() {
92 return "BlockRequestPacket: " + block;
93 }
94
95 @Override
96 public final byte getType() {
97 return LocalPacketFactory.BLOCKREQUESTPACKET;
98 }
99
100
101
102
103 public final boolean getBlock() {
104 return block;
105 }
106
107
108
109
110 public final byte[] getKey() {
111 return key;
112 }
113 }