/*
* Conditions Of Use
*
* This software was developed by employees of the National Institute of
* Standards and Technology (NIST), an agency of the Federal Government.
* Pursuant to title 15 Untied States Code Section 105, works of NIST
* employees are not subject to copyright protection in the United States
* and are considered to be in the public domain. As a result, a formal
* license is not needed to use the software.
*
* This software is provided by NIST as a service and is expressly
* provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
* AND DATA ACCURACY. NIST does not warrant or make any representations
* regarding the use of the software or the results thereof, including but
* not limited to the correctness, accuracy, reliability or usefulness of
* the software.
*
* Permission to use this software is contingent upon your acceptance
* of the terms of this agreement
*
* .
*
*/
/*******************************************************************************
* Product of NIST/ITL Advanced Networking Technologies Division (ANTD). *
*******************************************************************************/
package gov.nist.javax.sip.header;
/**
* Root class from which all SIPHeader objects are subclassed.
*
* @author M. Ranganathan <br/>
* @version 1.2 $Revision: 1.7 $ $Date: 2009/07/17 18:57:37 $
*
*
*/
public abstract class SIPHeader
extends SIPObject
implements SIPHeaderNames, javax.sip.header.Header, HeaderExt {
/** name of this header
*/
protected String headerName;
/** Value of the header.
*/
/** Constructor
* @param hname String to set
*/
protected SIPHeader(String hname) {
headerName = hname;
}
/** Default constructor
*/
public SIPHeader() {
}
/**
* Name of the SIPHeader
* @return String
*/
public String getHeaderName() {
return headerName;
}
/** Alias for getHaderName above.
*
*@return String headerName
*
*/
public String getName() {
return this.headerName;
}
/**
* Set the name of the header .
* @param hdrname String to set
*/
public void setHeaderName(String hdrname) {
headerName = hdrname;
}
/** Get the header value (i.e. what follows the name:).
* This merely goes through and lops off the portion that follows
* the headerName:
*/
public String getHeaderValue() {
String encodedHdr = null;
try {
encodedHdr = this.encode();
} catch (Exception ex) {
return null;
}
StringBuffer buffer = new StringBuffer(encodedHdr);
while (buffer.length() > 0 && buffer.charAt(0) != ':') {
buffer.deleteCharAt(0);
}
if (buffer.length() > 0)
buffer.deleteCharAt(0);
return buffer.toString().trim();
}
/** Return false if this is not a header list
* (SIPHeaderList overrrides this method).
*@return false
*/
public boolean isHeaderList() {
return false;
}
/** Encode this header into canonical form.
*/
public String encode() {
return encode(new StringBuffer()).toString();
}
public StringBuffer encode(StringBuffer buffer) {
buffer.append(this.headerName).append(COLON).append(SP);
this.encodeBody(buffer);
buffer.append(NEWLINE);
return buffer;
}
/** Encode the body of this header (the stuff that follows headerName).
* A.K.A headerValue.
*/
protected abstract String encodeBody();
/** Encode the body of this header in the given buffer.
* Default implementation calls encodeBody();
*/
protected StringBuffer encodeBody(StringBuffer buffer) {
return buffer.append(encodeBody());
}
/** Alias for getHeaderValue.
*/
public String getValue() {
return this.getHeaderValue();
}
/**
* This is a pretty simple hashCode but satisfies requirements.
*
*/
public int hashCode() {
return this.headerName.hashCode();
}
public final String toString() {
return this.encode();
}
}