View Javadoc

1   /***
2    * Redistribution and use of this software and associated documentation
3    * ("Software"), with or without modification, are permitted provided
4    * that the following conditions are met:
5    *
6    * 1. Redistributions of source code must retain copyright
7    *    statements and notices.  Redistributions must also contain a
8    *    copy of this document.
9    *
10   * 2. Redistributions in binary form must reproduce the
11   *    above copyright notice, this list of conditions and the
12   *    following disclaimer in the documentation and/or other
13   *    materials provided with the distribution.
14   *
15   * 3. The name "Exolab" must not be used to endorse or promote
16   *    products derived from this Software without prior written
17   *    permission of Exoffice Technologies.  For written permission,
18   *    please contact info@exolab.org.
19   *
20   * 4. Products derived from this Software may not be called "Exolab"
21   *    nor may "Exolab" appear in their names without prior written
22   *    permission of Exoffice Technologies. Exolab is a registered
23   *    trademark of Exoffice Technologies.
24   *
25   * 5. Due credit should be given to the Exolab Project
26   *    (http://www.exolab.org/).
27   *
28   * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS
29   * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
30   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
31   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
32   * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
33   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
35   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
37   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
39   * OF THE POSSIBILITY OF SUCH DAMAGE.
40   *
41   * Copyright 2004-2005 (C) Exoffice Technologies Inc. All Rights Reserved.
42   *
43   * $Id: HTTPRequestInfo.java,v 1.5 2005/05/03 13:45:58 tanderson Exp $
44   */
45  package org.exolab.jms.net.http;
46  
47  import org.exolab.jms.net.connector.ConnectionRequestInfo;
48  import org.exolab.jms.net.connector.URIRequestInfo;
49  import org.exolab.jms.net.connector.ResourceException;
50  import org.exolab.jms.net.uri.URI;
51  import org.exolab.jms.net.util.SSLProperties;
52  import org.exolab.jms.net.util.Properties;
53  
54  
55  /***
56   * Implementation of the {@link ConnectionRequestInfo} interface that enables
57   * the HTTP connector to pass data across the connection request flow.
58   *
59   * @author <a href="mailto:tma@netspace.net.au">Tim Anderson</a>
60   * @version $Revision: 1.5 $ $Date: 2005/05/03 13:45:58 $
61   */
62  public class HTTPRequestInfo extends URIRequestInfo {
63  
64      /***
65       * The proxy host, if the client needs to connect via a proxy.
66       */
67      private String _proxyHost;
68  
69      /***
70       * The proxy port, if the client needs to connect via a proxy.
71       */
72      private int _proxyPort;
73  
74      /***
75       * The proxy user, if the client needs to log in to the proxy.
76       */
77      private String _proxyUser;
78  
79      /***
80       * The proxy password, if the client needs to log in to the proxy.
81       */
82      private String _proxyPassword;
83  
84      /***
85       * Properties to configure the secure socket layer. May be
86       * <code>null</code>.
87       */
88      private SSLProperties _sslProperties;
89  
90      /***
91       * Connection property to indicate the proxy server to use.
92       */
93      private static final String PROXY_HOST = "proxyHost";
94  
95      /***
96       * Connection property to indicate the proxy port to use.
97       */
98      private static final String PROXY_PORT = "proxyPort";
99  
100     /***
101      * Connection property to indicate the proxy user to use.
102      */
103     private static final String PROXY_USER = "proxyUser";
104 
105     /***
106      * Connection property to indicate the proxy password to use.
107      */
108     private static final String PROXY_PASSWORD = "proxyPassword";
109 
110 
111     /***
112      * Construct a new <code>HTTPRequestInfo</code>.
113      *
114      * @param uri the URI
115      */
116     public HTTPRequestInfo(URI uri) {
117         super(uri);
118     }
119 
120     /***
121      * Construct a new <code>HTTPRequestInfo</code>.
122      *
123      * @param uri the URI
124      * @param properties the properties to populate this from
125      * @throws ResourceException if any of the properties are invalid
126      */
127     public HTTPRequestInfo(URI uri, Properties properties)
128             throws ResourceException {
129         super(uri);
130         setProxyHost(properties.get(PROXY_HOST));
131         setProxyPort(properties.getInt(PROXY_PORT, 0));
132         setProxyUser(properties.get(PROXY_USER));
133         setProxyPassword(properties.get(PROXY_PASSWORD));
134 
135         SSLProperties ssl = new SSLProperties(properties);
136         if (!ssl.isEmpty()) {
137             setSSLProperties(ssl);
138         }
139     }
140 
141     /***
142      * Sets the proxy host.
143      *
144      * @param host the proxy host
145      */
146     public void setProxyHost(String host) {
147         _proxyHost = host;
148     }
149 
150     /***
151      * Returns the proxy host.
152      *
153      * @return the proxy host, or <code>null</code> if none is set
154      */
155     public String getProxyHost() {
156         return _proxyHost;
157     }
158 
159     /***
160      * Sets the proxy port.
161      *
162      * @param port the proxy port
163      */
164     public void setProxyPort(int port) {
165         _proxyPort = port;
166     }
167 
168     /***
169      * Returns the proxy port.
170      *
171      * @return the proxy port, or <code>0</code> if none is set
172      */
173     public int getProxyPort() {
174         return _proxyPort;
175     }
176 
177     /***
178      * Sets the proxy user.
179      *
180      * @param user the proxy user
181      */
182     public void setProxyUser(String user) {
183         _proxyUser = user;
184     }
185 
186     /***
187      * Returns the proxy user.
188      *
189      * @return the proxy user, or <code>null</code> if none is set
190      */
191     public String getProxyUser() {
192         return _proxyUser;
193     }
194 
195     /***
196      * Sets the proxy password.
197      *
198      * @param pwd the proxy password
199      */
200     public void setProxyPassword(String pwd) {
201         _proxyPassword = pwd;
202     }
203 
204     /***
205      * Returns the proxy password.
206      *
207      * @return the proxy password, or <code>null</code> if none is set
208      */
209     public String getProxyPassword() {
210         return _proxyPassword;
211     }
212 
213     /***
214      * Returns the properties used to configure the secure socket layer (SSL).
215      *
216      * @return the SSL configuration properties, or <code>null</code> if unset
217      */
218     public SSLProperties getSSLProperties() {
219         return _sslProperties;
220     }
221 
222     /***
223      * Sets the properties used to configure the secure socket layer (SSL).
224      *
225      * @param properties the SSL configuration properties
226      */
227     public void setSSLProperties(SSLProperties properties) {
228         _sslProperties = properties;
229     }
230 
231     /***
232      * Helper to export this to a {@link Properties} instance.
233      *
234      * @param properties the properties to export to.
235      */
236     public void export(Properties properties) {
237         super.export(properties);
238         properties.setNonNull(PROXY_HOST, getProxyHost());
239         properties.set(PROXY_PORT, getProxyPort());
240         properties.setNonNull(PROXY_USER, getProxyUser());
241         properties.setNonNull(PROXY_PASSWORD, getProxyPassword());
242 
243         SSLProperties ssl = getSSLProperties();
244         if (ssl != null) {
245             ssl.export(properties);
246         }
247     }
248 
249     /***
250      * Checks whether this instance is equal to another.
251      *
252      * @param other the object to compare
253      * @return <code>true</code> if the two instances are equal; otherwise
254      *         <code>false</code>
255      */
256     public boolean equals(Object other) {
257         boolean equal = false;
258         if (other instanceof HTTPRequestInfo && super.equals(other)) {
259             HTTPRequestInfo info = (HTTPRequestInfo) other;
260             if (equals(_proxyHost, info._proxyHost)
261                     && (_proxyPort == info._proxyPort)
262                     && equals(_proxyUser, info._proxyUser)
263                     && equals(_proxyPassword, info._proxyPassword)
264                     && equals(_sslProperties, info._sslProperties)) {
265                 equal = true;
266             }
267         }
268         return equal;
269     }
270 
271     /***
272      * Helper to compare two objects for equality.
273      *
274      * @param o1 the first object to compare
275      * @param o2 the second object to compare
276      * @return <code>true</code> if the objects are equal, otherwise
277      *         <code>false</code>
278      */
279     private boolean equals(Object o1, Object o2) {
280         boolean equal = (o1 == null && o2 == null);
281         if (!equal) {
282             if (o1 != null && o1.equals(o2)) {
283                 equal = true;
284             }
285         }
286         return equal;
287     }
288 
289 }