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 /** 32 * Root class from which all SIPHeader objects are subclassed. 33 * 34 * @author M. Ranganathan <br/> 35 * @version 1.2 $Revision: 1.7 $ $Date: 2009/07/17 18:57:37 $ 36 * 37 * 38 */ 39 public abstract class SIPHeader 40 extends SIPObject 41 implements SIPHeaderNames, javax.sip.header.Header, HeaderExt { 42 43 /** name of this header 44 */ 45 protected String headerName; 46 47 /** Value of the header. 48 */ 49 50 /** Constructor 51 * @param hname String to set 52 */ 53 protected SIPHeader(String hname) { 54 headerName = hname; 55 } 56 57 /** Default constructor 58 */ 59 public SIPHeader() { 60 } 61 62 /** 63 * Name of the SIPHeader 64 * @return String 65 */ 66 public String getHeaderName() { 67 return headerName; 68 } 69 70 /** Alias for getHaderName above. 71 * 72 *@return String headerName 73 * 74 */ 75 public String getName() { 76 return this.headerName; 77 } 78 79 /** 80 * Set the name of the header . 81 * @param hdrname String to set 82 */ 83 public void setHeaderName(String hdrname) { 84 headerName = hdrname; 85 } 86 87 /** Get the header value (i.e. what follows the name:). 88 * This merely goes through and lops off the portion that follows 89 * the headerName: 90 */ 91 public String getHeaderValue() { 92 String encodedHdr = null; 93 try { 94 encodedHdr = this.encode(); 95 } catch (Exception ex) { 96 return null; 97 } 98 StringBuffer buffer = new StringBuffer(encodedHdr); 99 while (buffer.length() > 0 && buffer.charAt(0) != ':') { 100 buffer.deleteCharAt(0); 101 } 102 if (buffer.length() > 0) 103 buffer.deleteCharAt(0); 104 return buffer.toString().trim(); 105 } 106 107 /** Return false if this is not a header list 108 * (SIPHeaderList overrrides this method). 109 *@return false 110 */ 111 public boolean isHeaderList() { 112 return false; 113 } 114 115 /** Encode this header into canonical form. 116 */ 117 public String encode() { 118 return encode(new StringBuffer()).toString(); 119 } 120 121 public StringBuffer encode(StringBuffer buffer) { 122 buffer.append(this.headerName).append(COLON).append(SP); 123 this.encodeBody(buffer); 124 buffer.append(NEWLINE); 125 return buffer; 126 } 127 128 /** Encode the body of this header (the stuff that follows headerName). 129 * A.K.A headerValue. 130 */ 131 protected abstract String encodeBody(); 132 133 /** Encode the body of this header in the given buffer. 134 * Default implementation calls encodeBody(); 135 */ 136 protected StringBuffer encodeBody(StringBuffer buffer) { 137 return buffer.append(encodeBody()); 138 } 139 140 /** Alias for getHeaderValue. 141 */ 142 public String getValue() { 143 return this.getHeaderValue(); 144 } 145 146 /** 147 * This is a pretty simple hashCode but satisfies requirements. 148 * 149 */ 150 public int hashCode() { 151 return this.headerName.hashCode(); 152 } 153 154 public final String toString() { 155 return this.encode(); 156 } 157 } 158