1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/* 2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Conditions Of Use 3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* This software was developed by employees of the National Institute of 5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Standards and Technology (NIST), an agency of the Federal Government. 6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Pursuant to title 15 Untied States Code Section 105, works of NIST 7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* employees are not subject to copyright protection in the United States 8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* and are considered to be in the public domain. As a result, a formal 9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* license is not needed to use the software. 10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* This software is provided by NIST as a service and is expressly 12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED 13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF 14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT 15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* AND DATA ACCURACY. NIST does not warrant or make any representations 16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* regarding the use of the software or the results thereof, including but 17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* not limited to the correctness, accuracy, reliability or usefulness of 18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* the software. 19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Permission to use this software is contingent upon your acceptance 21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* of the terms of this agreement 22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* . 24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* 25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*/ 26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/******************************************************************************* 27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Product of NIST/ITL Advanced Networking Technologies Division (ANTD). * 28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*******************************************************************************/ 29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.javax.sip.header; 30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.Host; 32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.HostPort; 33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.NameValue; 34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.NameValueList; 35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.stack.HopImpl; 36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.InvalidArgumentException; 38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.address.Hop; 39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.header.ViaHeader; 40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.text.ParseException; 41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/** 43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Via SIPHeader (these are strung together in a ViaList). 44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @see ViaList 46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @version 1.2 $Revision: 1.17 $ $Date: 2009/10/18 13:46:33 $ 48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author M. Ranganathan <br/> 50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class Via 55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang extends ParametersHeader 56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang implements javax.sip.header.ViaHeader, ViaHeaderExt { 57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Comment for <code>serialVersionUID</code> 60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private static final long serialVersionUID = 5281728373401351378L; 62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** The branch parameter is included by every forking proxy. 64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String BRANCH = ParameterNames.BRANCH; 66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** The "received" parameter is added only for receiver-added Via Fields. 68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String RECEIVED = ParameterNames.RECEIVED; 70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** The "maddr" paramter is designating the multicast address. 72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String MADDR = ParameterNames.MADDR; 74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** The "TTL" parameter is designating the time-to-live value. 76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String TTL = ParameterNames.TTL; 78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** The RPORT parameter. 80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final String RPORT = ParameterNames.RPORT; 82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** sentProtocol field. 84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected Protocol sentProtocol; 86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** sentBy field. 88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected HostPort sentBy; 90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * comment field 93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * JvB note: RFC3261 does not allow a comment to appear in Via headers, and this 95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * is not accessible through the API. Suggest removal 96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected String comment; 98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 99558dbba05016c7c51306ec93ba9c6a7f21818d71Chung-yih Wang private boolean rPortFlag = false; 100558dbba05016c7c51306ec93ba9c6a7f21818d71Chung-yih Wang 101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Default constructor 102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Via() { 104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang super(NAME); 105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentProtocol = new Protocol(); 106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public boolean equals(Object other) { 109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (other==this) return true; 111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (other instanceof ViaHeader) { 113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang final ViaHeader o = (ViaHeader) other; 114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return getProtocol().equalsIgnoreCase( o.getProtocol() ) 115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang && getTransport().equalsIgnoreCase( o.getTransport() ) 116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang && getHost().equalsIgnoreCase( o.getHost() ) 117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang && getPort() == o.getPort() 118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang && equalParameters( o ); 119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return false; 121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** get the Protocol Version 125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return String 126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getProtocolVersion() { 128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sentProtocol == null) 129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return null; 130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang else 131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sentProtocol.getProtocolVersion(); 132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Accessor for the sentProtocol field. 136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return Protocol field 137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Protocol getSentProtocol() { 139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sentProtocol; 141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Accessor for the sentBy field 145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *@return SentBy field 146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public HostPort getSentBy() { 148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sentBy; 149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Get the host, port and transport as a Hop. This is 153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * useful for the stack to avoid duplication of code. 154600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 155600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 156600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Hop getHop() { 157600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang HopImpl hop = new HopImpl(sentBy.getHost().getHostname(), 158600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentBy.getPort(),sentProtocol.getTransport()); 159600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return hop; 160600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 161600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 162600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 163600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Accessor for the parameters field 164600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return parameters field 165600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 166600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public NameValueList getViaParms() { 167600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return parameters; 168600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 169600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 170600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 171600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Accessor for the comment field. 172600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return comment field. 173600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @deprecated RFC 2543 support feature. 174600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 175600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getComment() { 176600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return comment; 177600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 178600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 179600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 180600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 181600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** port of the Via Header. 182600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return true if Port exists. 183600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 184600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public boolean hasPort() { 185600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return (getSentBy()).hasPort(); 186600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 187600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 188600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** comment of the Via Header. 189600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 190600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return false if comment does not exist and true otherwise. 191600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 192600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public boolean hasComment() { 193600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return comment != null; 194600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 195600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 196600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** remove the port. 197600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 198600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void removePort() { 199600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentBy.removePort(); 200600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 201600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 202600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** remove the comment field. 203600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 204600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void removeComment() { 205600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang comment = null; 206600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 207600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 208600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** set the Protocol Version 209600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param protocolVersion String to set 210600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 211600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setProtocolVersion(String protocolVersion) { 212600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sentProtocol == null) 213600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentProtocol = new Protocol(); 214600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentProtocol.setProtocolVersion(protocolVersion); 215600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 216600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 217600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** set the Host of the Via Header 218600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param host String to set 219600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 220600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setHost(Host host) { 221600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sentBy == null) { 222600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentBy = new HostPort(); 223600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 224600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentBy.setHost(host); 225600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 226600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 227600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 228600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the sentProtocol member 229600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param s Protocol to set. 230600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 231600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setSentProtocol(Protocol s) { 232600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentProtocol = s; 233600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 234600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 235600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 236600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the sentBy member 237600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param s HostPort to set. 238600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 239600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setSentBy(HostPort s) { 240600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentBy = s; 241600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 242600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 243600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 244600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the comment member 245600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param c String to set. 246600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @deprecated This is an RFC 2543 feature. 247600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 248600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setComment(String c) { 249600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang comment = c; 250600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 251600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 252600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Encode the body of this header (the stuff that follows headerName). 253600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * A.K.A headerValue. 254600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 255600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected String encodeBody() { 256600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return encodeBody(new StringBuffer()).toString(); 257600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 258600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 259600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected StringBuffer encodeBody(StringBuffer buffer) { 260600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentProtocol.encode(buffer); 261600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang buffer.append(SP); 262600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentBy.encode(buffer); 263600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (!parameters.isEmpty()) { 264600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang buffer.append(SEMICOLON); 265600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parameters.encode(buffer); 266600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 267600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (comment != null) { 268600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang buffer.append(SP).append(LPAREN).append(comment).append(RPAREN); 269600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 270558dbba05016c7c51306ec93ba9c6a7f21818d71Chung-yih Wang if (rPortFlag) buffer.append(";rport"); 271600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return buffer; 272600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 273600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 274600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 275600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the host part of this ViaHeader to the newly supplied <code>host</code> 276600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * parameter. 277600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 278600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException which signals that an error has been reached 279600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * unexpectedly while parsing the host value. 280600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 281600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setHost(String host) throws ParseException { 282600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sentBy == null) 283600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentBy = new HostPort(); 284600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang try { 285600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Host h = new Host(host); 286600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentBy.setHost(h); 287600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } catch (Exception e) { 288600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException(" host parameter is null"); 289600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 290600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 291600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 292600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 293600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Returns the host part of this ViaHeader. 294600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 295600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return the string value of the host 296600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 297600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getHost() { 298600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sentBy == null) 299600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return null; 300600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang else { 301600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Host host = sentBy.getHost(); 302600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (host == null) 303600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return null; 304600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang else 305600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return host.getHostname(); 306600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 307600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 308600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 309600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 310600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the port part of this ViaHeader to the newly supplied <code>port</code> 311600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * parameter. 312600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 313600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param port - the Integer.valueOf value of the port of this ViaHeader 314600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 315600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setPort(int port) throws InvalidArgumentException { 316600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 317600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if ( port!=-1 && (port<1 || port>65535)) { 318600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new InvalidArgumentException( "Port value out of range -1, [1..65535]" ); 319600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 320600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 321600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sentBy == null) 322600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentBy = new HostPort(); 323600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentBy.setPort(port); 324600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 325600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 326600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 327600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the RPort flag parameter 328600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 329600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setRPort(){ 330558dbba05016c7c51306ec93ba9c6a7f21818d71Chung-yih Wang rPortFlag = true; 331600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 332600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 333600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 334600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Returns the port part of this ViaHeader. 335600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 336600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return the integer value of the port 337600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 338600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public int getPort() { 339600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sentBy == null) 340600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return -1; 341600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sentBy.getPort(); 342600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 343600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 344600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 345600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 346600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Return the rport parameter. 347600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 348600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *@return the rport parameter or -1. 349600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 350600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public int getRPort() { 351600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String strRport = getParameter(ParameterNames.RPORT); 352600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (strRport != null && ! strRport.equals("")) 353600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return Integer.valueOf(strRport).intValue(); 354600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang else 355600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return -1; 356600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 357600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 358600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 359600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 360600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Returns the value of the transport parameter. 361600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 362600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return the string value of the transport paramter of the ViaHeader 363600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 364600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getTransport() { 365600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sentProtocol == null) 366600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return null; 367600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sentProtocol.getTransport(); 368600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 369600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 370600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 371600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Sets the value of the transport. This parameter specifies 372600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * which transport protocol to use for sending requests and responses to 373600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * this entity. The following values are defined: "udp", "tcp", "sctp", 374600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * "tls", but other values may be used also. 375600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 376600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param transport - new value for the transport parameter 377600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException which signals that an error has been reached 378600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * unexpectedly while parsing the transport value. 379600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 380600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setTransport(String transport) throws ParseException { 381600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (transport == null) 382600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException( 383600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "JAIN-SIP Exception, " 384600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + "Via, setTransport(), the transport parameter is null."); 385600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sentProtocol == null) 386600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentProtocol = new Protocol(); 387600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentProtocol.setTransport(transport); 388600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 389600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 390600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 391600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Returns the value of the protocol used. 392600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 393600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return the string value of the protocol paramter of the ViaHeader 394600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 395600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getProtocol() { 396600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sentProtocol == null) 397600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return null; 398600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sentProtocol.getProtocol();// JvB: Return name ~and~ version 399600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 400600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 401600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 402600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Sets the value of the protocol parameter. This parameter specifies 403600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * which protocol is used, for example "SIP/2.0". 404600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 405600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param protocol - new value for the protocol parameter 406600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException which signals that an error has been reached 407600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * unexpectedly while parsing the protocol value. 408600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 409600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setProtocol(String protocol) throws ParseException { 410600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (protocol == null) 411600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException( 412600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "JAIN-SIP Exception, " 413600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + "Via, setProtocol(), the protocol parameter is null."); 414600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 415600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (sentProtocol == null) 416600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentProtocol = new Protocol(); 417600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 418600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sentProtocol.setProtocol(protocol); 419600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 420600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 421600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 422600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Returns the value of the ttl parameter, or -1 if this is not set. 423600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 424600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return the integer value of the <code>ttl</code> parameter 425600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 426600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public int getTTL() { 427600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang int ttl = getParameterAsInt(ParameterNames.TTL); 428600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return ttl; 429600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 430600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 431600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 432600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Sets the value of the ttl parameter. The ttl parameter specifies the 433600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * time-to-live value when packets are sent using UDP multicast. 434600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 435600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param ttl - new value of the ttl parameter 436600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws InvalidArgumentException if supplied value is less than zero or 437600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * greater than 255, excluding -1 the default not set value. 438600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 439600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setTTL(int ttl) throws InvalidArgumentException { 440600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (ttl < 0 && ttl != -1) 441600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new InvalidArgumentException( 442600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "JAIN-SIP Exception" 443600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + ", Via, setTTL(), the ttl parameter is < 0"); 444600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang setParameter(new NameValue(ParameterNames.TTL, Integer.valueOf(ttl))); 445600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 446600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 447600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 448600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Returns the value of the <code>maddr</code> parameter, or null if this 449600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * is not set. 450600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 451600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return the string value of the maddr parameter 452600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 453600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getMAddr() { 454600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return getParameter(ParameterNames.MADDR); 455600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 456600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 457600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 458600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Sets the value of the <code>maddr</code> parameter of this ViaHeader. The 459600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * maddr parameter indicates the server address to be contacted for this 460600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * user, overriding any address derived from the host field. 461600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 462600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param mAddr new value of the <code>maddr</code> parameter 463600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException which signals that an error has been reached 464600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * unexpectedly while parsing the mAddr value. 465600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 466600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setMAddr(String mAddr) throws ParseException { 467600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (mAddr == null) 468600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException( 469600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "JAIN-SIP Exception, " 470600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + "Via, setMAddr(), the mAddr parameter is null."); 471600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 472600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Host host = new Host(); 473600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang host.setAddress(mAddr); 474600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang NameValue nameValue = new NameValue(ParameterNames.MADDR, host); 475600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang setParameter(nameValue); 476600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 477600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 478600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 479600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 480600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Gets the received paramater of the ViaHeader. Returns null if received 481600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * does not exist. 482600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 483600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return the string received value of ViaHeader 484600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 485600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getReceived() { 486600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return getParameter(ParameterNames.RECEIVED); 487600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 488600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 489600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 490600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Sets the received parameter of ViaHeader. 491600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 492600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param received - the newly supplied received parameter. 493600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException which signals that an error has been reached 494600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * unexpectedly while parsing the received value. 495600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 496600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setReceived(String received) throws ParseException { 497600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (received == null) 498600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException( 499600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "JAIN-SIP Exception, " 500600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + "Via, setReceived(), the received parameter is null."); 501600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 502600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang setParameter(ParameterNames.RECEIVED, received); 503600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 504600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 505600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 506600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 507600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Gets the branch paramater of the ViaHeader. Returns null if branch 508600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * does not exist. 509600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 510600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return the string branch value of ViaHeader 511600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 512600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getBranch() { 513600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return getParameter(ParameterNames.BRANCH); 514600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 515600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 516600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 517600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Sets the branch parameter of the ViaHeader to the newly supplied 518600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * branch value. 519600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 520600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param branch - the new string branch parmameter of the ViaHeader. 521600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException which signals that an error has been reached 522600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * unexpectedly while parsing the branch value. 523600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 524600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setBranch(String branch) throws ParseException { 525600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (branch == null || branch.length()==0) 526600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException( 527600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "JAIN-SIP Exception, " 528600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + "Via, setBranch(), the branch parameter is null or length 0."); 529600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 530600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang setParameter(ParameterNames.BRANCH, branch); 531600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 532600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 533600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Object clone() { 534600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Via retval = (Via) super.clone(); 535600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (this.sentProtocol != null) 536600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang retval.sentProtocol = (Protocol) this.sentProtocol.clone(); 537600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (this.sentBy != null) 538600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang retval.sentBy = (HostPort) this.sentBy.clone(); 539600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if ( this.getRPort() != -1) 540600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang retval.setParameter(RPORT,this.getRPort()); 541600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return retval; 542600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 543600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 544600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /* 545600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * (non-Javadoc) 546600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @see gov.nist.javax.sip.header.ViaHeaderExt#getSentByField() 547600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 548600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getSentByField() { 549600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if(sentBy != null) 550600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sentBy.encode(); 551600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return null; 552600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 553600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /* 554600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * (non-Javadoc) 555600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @see gov.nist.javax.sip.header.ViaHeaderExt#getSentProtocolField() 556600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 557600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getSentProtocolField() { 558600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if(sentProtocol != null) 559600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sentProtocol.encode(); 560600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return null; 561600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 562600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 563600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang} 564