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.common.utility.WaarpStringUtils;
27 import org.waarp.openr66.protocol.localhandler.LocalChannelReference;
28
29
30
31
32
33
34 public class ConnectionErrorPacket extends AbstractLocalPacket {
35
36 private final String sheader;
37
38 private final String smiddle;
39
40
41
42
43
44
45
46
47
48 public static ConnectionErrorPacket createFromBuffer(final int headerLength,
49 final int middleLength,
50 final int endLength,
51 final ByteBuf buf) {
52 final byte[] bheader = new byte[headerLength - 1];
53 final byte[] bmiddle = new byte[middleLength];
54 if (headerLength - 1 > 0) {
55 buf.readBytes(bheader);
56 }
57 if (middleLength > 0) {
58 buf.readBytes(bmiddle);
59 }
60 return new ConnectionErrorPacket(new String(bheader, WaarpStringUtils.UTF8),
61 new String(bmiddle,
62 WaarpStringUtils.UTF8));
63 }
64
65
66
67
68
69 public ConnectionErrorPacket(final String header, final String middle) {
70 sheader = header;
71 smiddle = middle;
72 }
73
74 @Override
75 public final boolean hasGlobalBuffer() {
76 return true;
77 }
78
79 @Override
80 public final synchronized void createAllBuffers(
81 final LocalChannelReference lcr, final int networkHeader) {
82 end = Unpooled.EMPTY_BUFFER;
83 final byte[] sheaderByte =
84 sheader != null? sheader.getBytes(WaarpStringUtils.UTF8) : EMPTY_ARRAY;
85 final int headerSize = sheaderByte.length;
86 final byte[] smiddleByte =
87 smiddle != null? smiddle.getBytes(WaarpStringUtils.UTF8) : EMPTY_ARRAY;
88 final int middleSize = smiddleByte.length;
89 final int globalSize =
90 networkHeader + LOCAL_HEADER_SIZE + headerSize + middleSize;
91 int offset = networkHeader + LOCAL_HEADER_SIZE;
92 global = ByteBufAllocator.DEFAULT.ioBuffer(globalSize, globalSize);
93 header = WaarpNettyUtil.slice(global, offset, headerSize);
94 if (sheader != null) {
95 header.writeBytes(sheaderByte);
96 }
97 offset += headerSize;
98 middle = WaarpNettyUtil.slice(global, offset, middleSize);
99 if (smiddle != null) {
100 middle.writeBytes(smiddleByte);
101 }
102 }
103
104 @Override
105 public final String toString() {
106 return "ConnectionErrorPacket: " + sheader + ':' + smiddle;
107 }
108
109 @Override
110 public final byte getType() {
111 return LocalPacketFactory.CONNECTERRORPACKET;
112 }
113
114
115
116
117 public final String getSheader() {
118 return sheader;
119 }
120
121
122
123
124 public final String getSmiddle() {
125 return smiddle;
126 }
127 }