001: /*
002: * Portions Copyright 2000-2007 Sun Microsystems, Inc. All Rights
003: * Reserved. Use is subject to license terms.
004: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
005: *
006: * This program is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU General Public License version
008: * 2 only, as published by the Free Software Foundation.
009: *
010: * This program is distributed in the hope that it will be useful, but
011: * WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * General Public License version 2 for more details (a copy is
014: * included at /legal/license.txt).
015: *
016: * You should have received a copy of the GNU General Public License
017: * version 2 along with this work; if not, write to the Free Software
018: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
019: * 02110-1301 USA
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
022: * Clara, CA 95054 or visit www.sun.com if you need additional
023: * information or have any questions.
024: */
025: /*
026: */
027: package gov.nist.siplite.header;
028:
029: import gov.nist.core.*;
030:
031: /**
032: * ContentLengthHeader Header (of which there can be only one in a SIPMessage).
033: * <pre>
034: * Format:
035: * Content-Length = "Content-Length" ":" 1*DIGIT
036: * For details please see RFC 2616, section 14.13
037: * </pre>
038: *
039: *
040: * IMPL_NOTE: think about removing the specific parser for ContentLengthHeader.
041: */
042: public class ContentLengthHeader extends ParameterLessHeader {
043:
044: /**
045: * Content length field.
046: */
047: protected Integer contentLength;
048:
049: /** Conten length header field label. */
050: public static final String NAME = Header.CONTENT_LENGTH;
051:
052: /** Handle for class. */
053: protected static Class clazz;
054:
055: static {
056: clazz = new ContentLengthHeader().getClass();
057: }
058:
059: /**
060: * Default constructor.
061: */
062: public ContentLengthHeader() {
063: super (CONTENT_LENGTH);
064: }
065:
066: /**
067: * Constructor given a length.
068: * @param length the initial content length
069: */
070: public ContentLengthHeader(int length) {
071: super (CONTENT_LENGTH);
072: this .contentLength = new Integer(length);
073: this .headerValue = String.valueOf(contentLength.intValue());
074: }
075:
076: /**
077: * Gets the content length header field.
078: * @return the content length
079: */
080: public int getContentLength() {
081: return contentLength.intValue();
082: }
083:
084: /**
085: * Sets the content length member.
086: * @param contentLength int to set
087: */
088: public void setContentLength(int contentLength)
089: throws IllegalArgumentException {
090: if (contentLength < 0)
091: throw new IllegalArgumentException("parameter is <0");
092:
093: this .contentLength = new Integer(contentLength);
094: this .headerValue = String.valueOf(contentLength);
095: }
096:
097: /**
098: * Encodes into a canonical string.
099: * @return String
100: */
101: public String encodeBody() {
102: if (contentLength == null)
103: return "0";
104: else
105: return contentLength.toString();
106: }
107:
108: /**
109: * Copies the cirrent instance.
110: * @return copy of the current object
111: */
112: public Object clone() {
113: ContentLengthHeader retval = new ContentLengthHeader();
114:
115: if (contentLength != null) {
116: retval.contentLength = new Integer(contentLength.intValue());
117: }
118:
119: return retval;
120: }
121:
122: /**
123: * Gets the content length header value.
124: * @return the content length
125: */
126: public Object getValue() {
127: return this .contentLength;
128: }
129:
130: /**
131: * Sets the header value field.
132: * @param value is the value field to set.
133: * @throws IllegalArgumentException if the value is invalid.
134: */
135: public void setHeaderValue(String value)
136: throws IllegalArgumentException {
137: int val;
138:
139: try {
140: val = Integer.parseInt(value);
141: setContentLength(val);
142: } catch (IllegalArgumentException iae) {
143: throw iae;
144: }
145: }
146: }
|