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.address; 30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.*; 31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/** 33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Authority part of a URI structure. Section 3.2.2 RFC2396 34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @version 1.2 $Revision: 1.10 $ $Date: 2009/12/16 14:48:33 $ 36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author M. Ranganathan <br/> 38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class Authority extends NetObject { 43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private static final long serialVersionUID = -3570349777347017894L; 45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** hostport field 47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected HostPort hostPort; 49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** userInfo field 51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected UserInfo userInfo; 53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Return the host name in encoded form. 56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return encoded string (does the same thing as toString) 57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String encode() { 59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return encode(new StringBuffer()).toString(); 60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public StringBuffer encode(StringBuffer buffer) { 63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (userInfo != null) { 64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang userInfo.encode(buffer); 65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang buffer.append(AT); 66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang hostPort.encode(buffer); 67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else { 68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang hostPort.encode(buffer); 69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return buffer; 71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** retruns true if the two Objects are equals , false otherwise. 74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param other Object to test. 75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return boolean 76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang @Override 78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public boolean equals(Object other) { 79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (other == null) return false; 80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (other.getClass() != getClass()) { 81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return false; 82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Authority otherAuth = (Authority) other; 84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (!this.hostPort.equals(otherAuth.hostPort)) { 85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return false; 86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (this.userInfo != null && otherAuth.userInfo != null) { 88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (!this.userInfo.equals(otherAuth.userInfo)) { 89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return false; 90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return true; 93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * get the hostPort member. 97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return HostPort 98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public HostPort getHostPort() { 100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return hostPort; 101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * get the userInfo memnber. 105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return UserInfo 106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public UserInfo getUserInfo() { 108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return userInfo; 109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Get password from the user info. 113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return String 114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getPassword() { 116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (userInfo == null) 117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return null; 118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang else 119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return userInfo.password; 120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Get the user name if it exists. 124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return String user or null if not set. 125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getUser() { 127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return userInfo != null ? userInfo.user : null; 128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Get the host name. 132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return Host (null if not set) 133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Host getHost() { 135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (hostPort == null) 136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return null; 137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang else 138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return hostPort.getHost(); 139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Get the port. 143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return int port (-1) if port is not set. 144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public int getPort() { 146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (hostPort == null) 147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return -1; 148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang else 149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return hostPort.getPort(); 150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** remove the port. 153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 154600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void removePort() { 155600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (hostPort != null) 156600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang hostPort.removePort(); 157600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 158600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 159600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 160600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * set the password. 161600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param passwd String to set 162600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 163600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setPassword(String passwd) { 164600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (userInfo == null) 165600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang userInfo = new UserInfo(); 166600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang userInfo.setPassword(passwd); 167600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 168600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 169600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 170600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the user name of the userInfo member. 171600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param user String to set 172600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 173600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setUser(String user) { 174600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (userInfo == null) 175600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang userInfo = new UserInfo(); 176600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.userInfo.setUser(user); 177600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 178600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 179600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 180600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * set the host. 181600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param host Host to set 182600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 183600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setHost(Host host) { 184600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (hostPort == null) 185600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang hostPort = new HostPort(); 186600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang hostPort.setHost(host); 187600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 188600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 189600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 190600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the port. 191600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param port int to set 192600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 193600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setPort(int port) { 194600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (hostPort == null) 195600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang hostPort = new HostPort(); 196600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang hostPort.setPort(port); 197600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 198600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 199600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 200600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the hostPort member 201600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param h HostPort to set 202600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 203600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setHostPort(HostPort h) { 204600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang hostPort = h; 205600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 206600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 207600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 208600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the userInfo member 209600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param u UserInfo to set 210600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 211600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setUserInfo(UserInfo u) { 212600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang userInfo = u; 213600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 214600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 215600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Remove the user Infor. 216600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 217600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 218600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void removeUserInfo() { 219600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.userInfo = null; 220600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 221600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 222600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Object clone() { 223600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Authority retval = (Authority) super.clone(); 224600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (this.hostPort != null) 225600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang retval.hostPort = (HostPort) this.hostPort.clone(); 226600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (this.userInfo != null) 227600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang retval.userInfo = (UserInfo) this.userInfo.clone(); 228600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return retval; 229600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 230600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 231600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang @Override 232600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public int hashCode() { 233600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if ( this.hostPort == null ) throw new UnsupportedOperationException("Null hostPort cannot compute hashcode"); 234600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return this.hostPort.encode().hashCode(); 235600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 236600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang} 237