• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/conn/scheme/PlainSocketFactory.java $
3  * $Revision: 659194 $
4  * $Date: 2008-05-22 11:33:47 -0700 (Thu, 22 May 2008) $
5  *
6  * ====================================================================
7  * Licensed to the Apache Software Foundation (ASF) under one
8  * or more contributor license agreements.  See the NOTICE file
9  * distributed with this work for additional information
10  * regarding copyright ownership.  The ASF licenses this file
11  * to you under the Apache License, Version 2.0 (the
12  * "License"); you may not use this file except in compliance
13  * with the License.  You may obtain a copy of the License at
14  *
15  *   http://www.apache.org/licenses/LICENSE-2.0
16  *
17  * Unless required by applicable law or agreed to in writing,
18  * software distributed under the License is distributed on an
19  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
20  * KIND, either express or implied.  See the License for the
21  * specific language governing permissions and limitations
22  * under the License.
23  * ====================================================================
24  *
25  * This software consists of voluntary contributions made by many
26  * individuals on behalf of the Apache Software Foundation.  For more
27  * information on the Apache Software Foundation, please see
28  * <http://www.apache.org/>.
29  *
30  */
31 
32 package org.apache.http.conn.scheme;
33 
34 import java.io.IOException;
35 import java.net.InetAddress;
36 import java.net.InetSocketAddress;
37 import java.net.Socket;
38 import java.net.SocketTimeoutException;
39 
40 import org.apache.http.conn.ConnectTimeoutException;
41 import org.apache.http.params.HttpConnectionParams;
42 import org.apache.http.params.HttpParams;
43 
44 /**
45  * The default class for creating sockets.
46  *
47  * @author <a href="mailto:rolandw at apache.org">Roland Weber</a>
48  * @author Michael Becke
49  *
50  * @deprecated Please use {@link java.net.URL#openConnection} instead.
51  *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
52  *     for further details.
53  */
54 @Deprecated
55 public final class PlainSocketFactory implements SocketFactory {
56 
57     /**
58      * The factory singleton.
59      */
60     private static final
61         PlainSocketFactory DEFAULT_FACTORY = new PlainSocketFactory();
62 
63     private final HostNameResolver nameResolver;
64 
65     /**
66      * Gets the singleton instance of this class.
67      * @return the one and only plain socket factory
68      */
getSocketFactory()69     public static PlainSocketFactory getSocketFactory() {
70         return DEFAULT_FACTORY;
71     }
72 
PlainSocketFactory(final HostNameResolver nameResolver)73     public PlainSocketFactory(final HostNameResolver nameResolver) {
74         super();
75         this.nameResolver = nameResolver;
76     }
77 
78 
PlainSocketFactory()79     public PlainSocketFactory() {
80         this(null);
81     }
82 
83     // non-javadoc, see interface org.apache.http.conn.SocketFactory
createSocket()84     public Socket createSocket() {
85         return new Socket();
86     }
87 
88     // non-javadoc, see interface org.apache.http.conn.SocketFactory
connectSocket(Socket sock, String host, int port, InetAddress localAddress, int localPort, HttpParams params)89     public Socket connectSocket(Socket sock, String host, int port,
90                                 InetAddress localAddress, int localPort,
91                                 HttpParams params)
92         throws IOException {
93 
94         if (host == null) {
95             throw new IllegalArgumentException("Target host may not be null.");
96         }
97         if (params == null) {
98             throw new IllegalArgumentException("Parameters may not be null.");
99         }
100 
101         if (sock == null)
102             sock = createSocket();
103 
104         if ((localAddress != null) || (localPort > 0)) {
105 
106             // we need to bind explicitly
107             if (localPort < 0)
108                 localPort = 0; // indicates "any"
109 
110             InetSocketAddress isa =
111                 new InetSocketAddress(localAddress, localPort);
112             sock.bind(isa);
113         }
114 
115         int timeout = HttpConnectionParams.getConnectionTimeout(params);
116 
117         InetSocketAddress remoteAddress;
118         if (this.nameResolver != null) {
119             remoteAddress = new InetSocketAddress(this.nameResolver.resolve(host), port);
120         } else {
121             remoteAddress = new InetSocketAddress(host, port);
122         }
123         try {
124             sock.connect(remoteAddress, timeout);
125         } catch (SocketTimeoutException ex) {
126             throw new ConnectTimeoutException("Connect to " + remoteAddress + " timed out");
127         }
128         return sock;
129 
130     } // connectSocket
131 
132 
133     /**
134      * Checks whether a socket connection is secure.
135      * This factory creates plain socket connections
136      * which are not considered secure.
137      *
138      * @param sock      the connected socket
139      *
140      * @return  <code>false</code>
141      *
142      * @throws IllegalArgumentException if the argument is invalid
143      */
isSecure(Socket sock)144     public final boolean isSecure(Socket sock)
145         throws IllegalArgumentException {
146 
147         if (sock == null) {
148             throw new IllegalArgumentException("Socket may not be null.");
149         }
150         // This class check assumes that createSocket() calls the constructor
151         // directly. If it was using javax.net.SocketFactory, we couldn't make
152         // an assumption about the socket class here.
153         if (sock.getClass() != Socket.class) {
154             throw new IllegalArgumentException
155                 ("Socket not created by this factory.");
156         }
157         // This check is performed last since it calls a method implemented
158         // by the argument object. getClass() is final in java.lang.Object.
159         if (sock.isClosed()) {
160             throw new IllegalArgumentException("Socket is closed.");
161         }
162 
163         return false;
164 
165     } // isSecure
166 
167 
168     /**
169      * Compares this factory with an object.
170      * There is only one instance of this class.
171      *
172      * @param obj       the object to compare with
173      *
174      * @return  iff the argument is this object
175      */
176     @Override
equals(Object obj)177     public boolean equals(Object obj) {
178         return (obj == this);
179     }
180 
181     /**
182      * Obtains a hash code for this object.
183      * All instances of this class have the same hash code.
184      * There is only one instance of this class.
185      */
186     @Override
hashCode()187     public int hashCode() {
188         return PlainSocketFactory.class.hashCode();
189     }
190 
191 }
192