• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Conditions Of Use
3 *
4 * This software was developed by employees of the National Institute of
5 * Standards and Technology (NIST), an agency of the Federal Government.
6 * Pursuant to title 15 Untied States Code Section 105, works of NIST
7 * employees are not subject to copyright protection in the United States
8 * and are considered to be in the public domain.  As a result, a formal
9 * license is not needed to use the software.
10 *
11 * This software is provided by NIST as a service and is expressly
12 * provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
13 * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
14 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
15 * AND DATA ACCURACY.  NIST does not warrant or make any representations
16 * regarding the use of the software or the results thereof, including but
17 * not limited to the correctness, accuracy, reliability or usefulness of
18 * the software.
19 *
20 * Permission to use this software is contingent upon your acceptance
21 * of the terms of this agreement
22 *
23 * .
24 *
25 */
26 /*******************************************************************************
27 * Product of NIST/ITL Advanced Networking Technologies Division (ANTD).        *
28 *******************************************************************************/
29 package gov.nist.javax.sip.header;
30 
31 import javax.sip.*;
32 import javax.sip.header.ContentLengthHeader;
33 
34 /**
35 * ContentLength SIPHeader (of which there can be only one in a SIPMessage).
36 *<pre>
37 *Fielding, et al.            Standards Track                   [Page 119]
38 *RFC 2616                        HTTP/1.1                       June 1999
39 *
40 *
41 *      14.13 Content-Length
42 *
43 *   The Content-Length entity-header field indicates the size of the
44 *   entity-body, in decimal number of OCTETs, sent to the recipient or,
45 *   in the case of the HEAD method, the size of the entity-body that
46 *   would have been sent had the request been a GET.
47 *
48 *       Content-Length    = "Content-Length" ":" 1*DIGIT
49 *
50 *   An example is
51 *
52 *       Content-Length: 3495
53 *
54 *   Applications SHOULD use this field to indicate the transfer-length of
55 *   the message-body, unless this is prohibited by the rules in section
56 *   4.4.
57 *
58 *   Any Content-Length greater than or equal to zero is a valid value.
59 *   Section 4.4 describes how to determine the length of a message-body
60 *   if a Content-Length is not given.
61 *
62 *   Note that the meaning of this field is significantly different from
63 *   the corresponding definition in MIME, where it is an optional field
64 *   used within the "message/external-body" content-type. In HTTP, it
65 *   SHOULD be sent whenever the message's length can be determined prior
66 *   to being transferred, unless this is prohibited by the rules in
67 *   section 4.4.
68 * </pre>
69 *
70 *@author M. Ranganathan   <br/>
71 *@author Olivier Deruelle <br/>
72 *@version 1.2 $Revision: 1.7 $ $Date: 2009/10/18 13:46:34 $
73 *@since 1.1
74 */
75 public class ContentLength
76     extends SIPHeader
77     implements javax.sip.header.ContentLengthHeader {
78 
79     /**
80      * Comment for <code>serialVersionUID</code>
81      */
82     private static final long serialVersionUID = 1187190542411037027L;
83     /**
84      * contentLength field.
85      */
86     protected Integer contentLength;
87 
88     /**
89      * Default constructor.
90      */
ContentLength()91     public ContentLength() {
92         super(NAME);
93     }
94 
95     /**
96      * Constructor given a length.
97      */
ContentLength(int length)98     public ContentLength(int length) {
99         super(NAME);
100         this.contentLength = Integer.valueOf(length);
101     }
102 
103     /**
104      * get the ContentLength field.
105      * @return int
106      */
getContentLength()107     public int getContentLength() {
108         return contentLength.intValue();
109     }
110 
111     /**
112      * Set the contentLength member
113      * @param contentLength int to set
114      */
setContentLength(int contentLength)115     public void setContentLength(int contentLength)
116         throws InvalidArgumentException {
117         if (contentLength < 0)
118             throw new InvalidArgumentException(
119                 "JAIN-SIP Exception"
120                     + ", ContentLength, setContentLength(), the contentLength parameter is <0");
121         this.contentLength = Integer.valueOf(contentLength);
122     }
123 
124     /**
125      * Encode into a canonical string.
126      * @return String
127      */
encodeBody()128     public String encodeBody() {
129         return encodeBody(new StringBuffer()).toString();
130     }
131 
encodeBody(StringBuffer buffer)132     protected StringBuffer encodeBody(StringBuffer buffer) {
133         if (contentLength == null)
134             buffer.append("0");
135         else
136             buffer.append(contentLength.toString());
137         return buffer;
138     }
139 
140     /**
141      * Pattern matcher ignores content length.
142      */
match(Object other)143     public boolean match(Object other) {
144         if (other instanceof ContentLength)
145             return true;
146         else
147             return false;
148     }
149 
equals(Object other)150     public boolean equals(Object other) {
151         if (other instanceof ContentLengthHeader) {
152             final ContentLengthHeader o = (ContentLengthHeader) other;
153             return this.getContentLength() == o.getContentLength();
154         }
155         return false;
156     }
157 }
158