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