Authority.java revision 600c7a4bbc7348167293eac928192e695b4ad5ba
142a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek/*
242a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek* Conditions Of Use
342a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek*
442a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek* This software was developed by employees of the National Institute of
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner* Standards and Technology (NIST), an agency of the Federal Government.
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner* Pursuant to title 15 Untied States Code Section 105, works of NIST
742a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek* employees are not subject to copyright protection in the United States
842a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek* and are considered to be in the public domain.  As a result, a formal
942a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek* license is not needed to use the software.
1042a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek*
1142a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek* This software is provided by NIST as a service and is expressly
1242a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek* provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
1342a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
1442a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
1542a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek* AND DATA ACCURACY.  NIST does not warrant or make any representations
1642a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek* regarding the use of the software or the results thereof, including but
179313aac61d425f14fa0b82c3dfe1eb2c3626d38cArgyrios Kyrtzidis* not limited to the correctness, accuracy, reliability or usefulness of
18d47d3b0cfeb7e8564ff77f48130fe63282b6d127Chris Lattner* the software.
197107d360db751aa974285ae2136aed76b6691b86Chandler Carruth*
2042a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek* Permission to use this software is contingent upon your acceptance
2142a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek* of the terms of this agreement
2242a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek*
23d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor* .
24e4f2142d00fa5fdb580c4e2413da91882d955381Chris Lattner*
25d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor*/
2642a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek/*******************************************************************************
2742a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek* Product of NIST/ITL Advanced Networking Technologies Division (ANTD).        *
2842a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek*******************************************************************************/
29d47d3b0cfeb7e8564ff77f48130fe63282b6d127Chris Lattnerpackage gov.nist.javax.sip.address;
3042a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenekimport gov.nist.core.*;
3142a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek
32d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor/**
33d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor * Authority part of a URI structure. Section 3.2.2 RFC2396
34d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor *
35d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor * @version 1.2 $Revision: 1.10 $ $Date: 2009/12/16 14:48:33 $
361eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump *
37e4f2142d00fa5fdb580c4e2413da91882d955381Chris Lattner * @author M. Ranganathan   <br/>
380daaf32723ac78549c507c2a68a5300502703673Abramo Bagnara *
39ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith *
4084139d6ef8967cfdb70d37378a7a65cc4827d44dDouglas Gregor *
4130c42404202d2e2512e51efc6066bd614cfdb5a4Douglas Gregor */
4230c42404202d2e2512e51efc6066bd614cfdb5a4Douglas Gregorpublic class Authority extends NetObject {
43d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor
44d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor    private static final long serialVersionUID = -3570349777347017894L;
45d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor
46d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor    /** hostport field
47e4f2142d00fa5fdb580c4e2413da91882d955381Chris Lattner     */
489313aac61d425f14fa0b82c3dfe1eb2c3626d38cArgyrios Kyrtzidis    protected HostPort hostPort;
49d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor
5042f42c0dd5cf71fbfc6fa282d03079a902f6e342Eli Friedman    /** userInfo field
5142f42c0dd5cf71fbfc6fa282d03079a902f6e342Eli Friedman     */
52d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor    protected UserInfo userInfo;
53d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor
54d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor    /**
55d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor     * Return the host name in encoded form.
56d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor     * @return encoded string (does the same thing as toString)
57d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor     */
58d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor    public String encode() {
59d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor        return encode(new StringBuffer()).toString();
6042f42c0dd5cf71fbfc6fa282d03079a902f6e342Eli Friedman    }
61d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor
62d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor    public StringBuffer encode(StringBuffer buffer) {
63d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor        if (userInfo != null) {
6442f42c0dd5cf71fbfc6fa282d03079a902f6e342Eli Friedman            userInfo.encode(buffer);
6542f42c0dd5cf71fbfc6fa282d03079a902f6e342Eli Friedman            buffer.append(AT);
660daaf32723ac78549c507c2a68a5300502703673Abramo Bagnara            hostPort.encode(buffer);
670daaf32723ac78549c507c2a68a5300502703673Abramo Bagnara        } else {
680daaf32723ac78549c507c2a68a5300502703673Abramo Bagnara            hostPort.encode(buffer);
690daaf32723ac78549c507c2a68a5300502703673Abramo Bagnara        }
700daaf32723ac78549c507c2a68a5300502703673Abramo Bagnara        return buffer;
710daaf32723ac78549c507c2a68a5300502703673Abramo Bagnara    }
720daaf32723ac78549c507c2a68a5300502703673Abramo Bagnara
730daaf32723ac78549c507c2a68a5300502703673Abramo Bagnara    /** retruns true if the two Objects are equals , false otherwise.
740daaf32723ac78549c507c2a68a5300502703673Abramo Bagnara     * @param other Object to test.
750daaf32723ac78549c507c2a68a5300502703673Abramo Bagnara     * @return boolean
7642f42c0dd5cf71fbfc6fa282d03079a902f6e342Eli Friedman     */
7742f42c0dd5cf71fbfc6fa282d03079a902f6e342Eli Friedman    @Override
7842f42c0dd5cf71fbfc6fa282d03079a902f6e342Eli Friedman    public boolean equals(Object other) {
7942f42c0dd5cf71fbfc6fa282d03079a902f6e342Eli Friedman        if (other == null) return false;
8042f42c0dd5cf71fbfc6fa282d03079a902f6e342Eli Friedman        if (other.getClass() != getClass()) {
8142f42c0dd5cf71fbfc6fa282d03079a902f6e342Eli Friedman            return false;
8242f42c0dd5cf71fbfc6fa282d03079a902f6e342Eli Friedman        }
8342f42c0dd5cf71fbfc6fa282d03079a902f6e342Eli Friedman        Authority otherAuth = (Authority) other;
8442f42c0dd5cf71fbfc6fa282d03079a902f6e342Eli Friedman        if (!this.hostPort.equals(otherAuth.hostPort)) {
85d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor            return false;
862191b20bfb31fc0e22a158f6b4204cd0b7dbd0fdJohn McCall        }
872191b20bfb31fc0e22a158f6b4204cd0b7dbd0fdJohn McCall        if (this.userInfo != null && otherAuth.userInfo != null) {
882191b20bfb31fc0e22a158f6b4204cd0b7dbd0fdJohn McCall            if (!this.userInfo.equals(otherAuth.userInfo)) {
89ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith                return false;
90ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith            }
91ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith        }
92ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith        return true;
93ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith    }
94ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith
95ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith    /**
96ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith     * get the hostPort member.
97ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith     * @return HostPort
98ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith     */
99ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith    public HostPort getHostPort() {
100ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith        return hostPort;
101ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith    }
1024fe0c8e9c76b96e7aff21696a40dacc09d0237bcDouglas Gregor
1034fe0c8e9c76b96e7aff21696a40dacc09d0237bcDouglas Gregor    /**
1044fe0c8e9c76b96e7aff21696a40dacc09d0237bcDouglas Gregor     * get the userInfo memnber.
1054fe0c8e9c76b96e7aff21696a40dacc09d0237bcDouglas Gregor     * @return UserInfo
1064fe0c8e9c76b96e7aff21696a40dacc09d0237bcDouglas Gregor     */
1077e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor    public UserInfo getUserInfo() {
1087e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor        return userInfo;
1097e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor    }
1107e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor
1117e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor    /**
1127e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor         * Get password from the user info.
1137e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor         * @return String
1147e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor         */
1157e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor    public String getPassword() {
1167e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor        if (userInfo == null)
1177e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor            return null;
1187e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor        else
1197e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor            return userInfo.password;
1207e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor    }
1217e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor
1227e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor    /**
1237e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor     * Get the user name if it exists.
1247e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor     * @return String user or null if not set.
12584139d6ef8967cfdb70d37378a7a65cc4827d44dDouglas Gregor     */
12684139d6ef8967cfdb70d37378a7a65cc4827d44dDouglas Gregor    public String getUser() {
12784139d6ef8967cfdb70d37378a7a65cc4827d44dDouglas Gregor        return userInfo != null ? userInfo.user : null;
12884139d6ef8967cfdb70d37378a7a65cc4827d44dDouglas Gregor    }
12984139d6ef8967cfdb70d37378a7a65cc4827d44dDouglas Gregor
130f85e193739c953358c865005855253af4f68a497John McCall    /**
131f85e193739c953358c865005855253af4f68a497John McCall     * Get the host name.
132f85e193739c953358c865005855253af4f68a497John McCall     * @return Host (null if not set)
133f85e193739c953358c865005855253af4f68a497John McCall     */
13430c42404202d2e2512e51efc6066bd614cfdb5a4Douglas Gregor    public Host getHost() {
13530c42404202d2e2512e51efc6066bd614cfdb5a4Douglas Gregor        if (hostPort == null)
13630c42404202d2e2512e51efc6066bd614cfdb5a4Douglas Gregor            return null;
13730c42404202d2e2512e51efc6066bd614cfdb5a4Douglas Gregor        else
138d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor            return hostPort.getHost();
139d249e1d1f1498b81314459ceda19d6ff25c278adDouglas Gregor    }
14042a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek
14142a509f6a4f71bb805cc4abbb26722a34dffdddeTed Kremenek    /**
1428467583c2704e7a9691ea56939a029015f0ade0aGabor Greif     * Get the port.
143     * @return int port (-1) if port is not set.
144     */
145    public int getPort() {
146        if (hostPort == null)
147            return -1;
148        else
149            return hostPort.getPort();
150    }
151
152    /** remove the port.
153     */
154    public void removePort() {
155        if (hostPort != null)
156            hostPort.removePort();
157    }
158
159    /**
160     * set the password.
161     * @param passwd String to set
162     */
163    public void setPassword(String passwd) {
164        if (userInfo == null)
165            userInfo = new UserInfo();
166        userInfo.setPassword(passwd);
167    }
168
169    /**
170     * Set the user name of the userInfo member.
171     * @param user String to set
172     */
173    public void setUser(String user) {
174        if (userInfo == null)
175            userInfo = new UserInfo();
176        this.userInfo.setUser(user);
177    }
178
179    /**
180     * set the host.
181     * @param host Host to set
182     */
183    public void setHost(Host host) {
184        if (hostPort == null)
185            hostPort = new HostPort();
186        hostPort.setHost(host);
187    }
188
189    /**
190     * Set the port.
191     * @param port int to set
192     */
193    public void setPort(int port) {
194        if (hostPort == null)
195            hostPort = new HostPort();
196        hostPort.setPort(port);
197    }
198
199    /**
200         * Set the hostPort member
201         * @param h HostPort to set
202         */
203    public void setHostPort(HostPort h) {
204        hostPort = h;
205    }
206
207    /**
208         * Set the userInfo member
209         * @param u UserInfo to set
210         */
211    public void setUserInfo(UserInfo u) {
212        userInfo = u;
213    }
214
215    /** Remove the user Infor.
216    *
217    */
218    public void removeUserInfo() {
219        this.userInfo = null;
220    }
221
222    public Object clone() {
223        Authority retval = (Authority) super.clone();
224        if (this.hostPort != null)
225            retval.hostPort = (HostPort) this.hostPort.clone();
226        if (this.userInfo != null)
227            retval.userInfo = (UserInfo) this.userInfo.clone();
228        return retval;
229    }
230
231    @Override
232    public int hashCode() {
233        if ( this.hostPort == null ) throw new UnsupportedOperationException("Null hostPort cannot compute hashcode");
234        return this.hostPort.encode().hashCode();
235    }
236}
237