1
2
3
4
5
6
7
8
9
10
11
12
13
14 package ch.mimo.netty.handler.codec.icap;
15
16 import org.jboss.netty.buffer.ChannelBuffer;
17
18
19
20
21
22
23
24
25
26 public class ReadChunkedContentAsChunksState extends State<Object> {
27
28 public ReadChunkedContentAsChunksState(String name) {
29 super(name);
30 }
31
32 @Override
33 public void onEntry(ChannelBuffer buffer, IcapMessageDecoder icapMessageDecoder) throws DecodingException {
34 }
35
36 @Override
37 public StateReturnValue execute(ChannelBuffer buffer, IcapMessageDecoder icapMessageDecoder) throws DecodingException {
38 IcapChunk chunk = null;
39 if(icapMessageDecoder.currentChunkSize > icapMessageDecoder.maxChunkSize) {
40 chunk = new DefaultIcapChunk(buffer.readBytes(icapMessageDecoder.maxChunkSize));
41 icapMessageDecoder.currentChunkSize -= icapMessageDecoder.maxChunkSize;
42 } else {
43 chunk = new DefaultIcapChunk(buffer.readBytes(icapMessageDecoder.currentChunkSize));
44 icapMessageDecoder.currentChunkSize = 0;
45 }
46 chunk.setPreviewChunk(icapMessageDecoder.message.isPreviewMessage());
47 if(chunk.isLast()) {
48 icapMessageDecoder.currentChunkSize = 0;
49 return StateReturnValue.createRelevantResult(new Object[]{chunk,new DefaultIcapChunkTrailer()});
50 }
51 return StateReturnValue.createRelevantResult(chunk);
52 }
53
54 @Override
55 public StateEnum onExit(ChannelBuffer buffer, IcapMessageDecoder icapMessageDecoder, Object decisionInformation) throws DecodingException {
56 if(icapMessageDecoder.currentChunkSize == 0) {
57 return StateEnum.READ_CHUNK_DELIMITER_STATE;
58 }
59 return StateEnum.READ_CHUNKED_CONTENT_AS_CHUNKS_STATE;
60 }
61
62 }