1 /*******************************************************************************
2 * Copyright (c) 2011 Michael Mimo Moratti.
3 *
4 * Michael Mimo Moratti licenses this file to you under the Apache License, version 2.0
5 * (the "License"); you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at:
7 * http://www.apache.org/licenses/LICENSE-2.0
8 * Unless required by applicable law or agreed to in writing, software
9 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
10 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
11 * License for the specific language governing permissions and limitations
12 * under the License.
13 *******************************************************************************/
14 package ch.mimo.netty.handler.codec.icap;
15
16 import org.jboss.netty.handler.codec.frame.TooLongFrameException;
17
18 /**
19 * This class is used to track the size in bytes of headers.
20 *
21 * @author Michael Mimo Moratti (mimo@mimo.ch)
22 *
23 * @see IcapDecoderUtil
24 * @see ReadTrailingHeadersState
25 */
26 public class SizeDelimiter {
27
28 private int counter = 0;
29 private int limit;
30 private String errorMessage;
31
32 public SizeDelimiter(int limit) {
33 this.limit = limit;
34 this.errorMessage = "limit exeeded by: ";
35 }
36
37 public synchronized void increment(int count) throws DecodingException {
38 counter += count;
39 checkLimit();
40 }
41
42 public void increment() throws DecodingException {
43 this.increment(1);
44 }
45
46 public int getSize() {
47 return counter;
48 }
49
50 private void checkLimit() throws DecodingException {
51 if(counter >= limit) {
52 throw new DecodingException(new TooLongFrameException(errorMessage + "[" + (counter - limit) + "] counts"));
53 }
54 }
55 }