1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package openr66.protocol.localhandler.packet;
22
23 import openr66.protocol.exception.OpenR66ProtocolPacketException;
24
25 import org.jboss.netty.buffer.ChannelBuffer;
26 import org.jboss.netty.buffer.ChannelBuffers;
27
28
29
30
31
32
33
34
35 public class ErrorPacket extends AbstractLocalPacket {
36 public static final int IGNORECODE = 0;
37
38 public static final int CLOSECODE = 1;
39
40 public static final int FORWARDCODE = 2;
41
42 public static final int FORWARDCLOSECODE = 3;
43
44 private final String sheader;
45
46 private final String smiddle;
47
48 private final int code;
49
50
51
52
53
54
55
56
57
58 public static ErrorPacket createFromBuffer(int headerLength,
59 int middleLength, int endLength, ChannelBuffer buf)
60 throws OpenR66ProtocolPacketException {
61 final byte[] bheader = new byte[headerLength - 1];
62 final byte[] bmiddle = new byte[middleLength];
63 if (headerLength - 1 > 0) {
64 buf.readBytes(bheader);
65 }
66 if (middleLength > 0) {
67 buf.readBytes(bmiddle);
68 }
69 if (endLength != 4) {
70 throw new OpenR66ProtocolPacketException("Packet not correct");
71 }
72 return new ErrorPacket(new String(bheader), new String(bmiddle), buf
73 .readInt());
74 }
75
76
77
78
79
80
81 public ErrorPacket(String header, String middle, int code) {
82 sheader = header;
83 smiddle = middle;
84 this.code = code;
85 }
86
87
88
89
90
91
92 @Override
93 public void createEnd() throws OpenR66ProtocolPacketException {
94 end = ChannelBuffers.buffer(4);
95 end.writeInt(code);
96 }
97
98
99
100
101
102
103
104 @Override
105 public void createHeader() throws OpenR66ProtocolPacketException {
106 if (sheader != null) {
107 header = ChannelBuffers.wrappedBuffer(sheader.getBytes());
108 }
109 }
110
111
112
113
114
115
116
117 @Override
118 public void createMiddle() throws OpenR66ProtocolPacketException {
119 if (smiddle != null) {
120 middle = ChannelBuffers.wrappedBuffer(smiddle.getBytes());
121 }
122 }
123
124
125
126
127
128
129 @Override
130 public String toString() {
131 return "ErrorPacket:("+code+":"+smiddle+") " + sheader;
132 }
133
134 @Override
135 public byte getType() {
136 return LocalPacketFactory.ERRORPACKET;
137 }
138
139
140
141
142 public String getSheader() {
143 return sheader;
144 }
145
146
147
148
149 public String getSmiddle() {
150 return smiddle;
151 }
152
153
154
155
156 public int getCode() {
157 return code;
158 }
159
160 }