View Javadoc
1   /*
2    * ====================================================================
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing,
14   * software distributed under the License is distributed on an
15   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16   * KIND, either express or implied.  See the License for the
17   * specific language governing permissions and limitations
18   * under the License.
19   * ====================================================================
20   *
21   * This software consists of voluntary contributions made by many
22   * individuals on behalf of the Apache Software Foundation.  For more
23   * information on the Apache Software Foundation, please see
24   * <http://www.apache.org/>.
25   *
26   */
27  
28  package org.apache.http.conn.scheme;
29  
30  import java.io.IOException;
31  import java.net.InetAddress;
32  import java.net.Socket;
33  import java.net.UnknownHostException;
34  
35  import org.apache.http.conn.ConnectTimeoutException;
36  import org.apache.http.params.HttpParams;
37  
38  /**
39   * A factory for creating, initializing and connecting sockets.
40   * The factory encapsulates the logic for establishing a socket connection.
41   *
42   * @since 4.0
43   *
44   * @deprecated (4.1)  use {@link SchemeSocketFactory}
45   */
46  @Deprecated
47  public interface SocketFactory {
48  
49      /**
50       * Creates a new, unconnected socket.
51       * The socket should subsequently be passed to
52       * {@link #connectSocket connectSocket}.
53       *
54       * @return  a new socket
55       *
56       * @throws IOException if an I/O error occurs while creating the socket
57       */
58      Socket createSocket()
59          throws IOException;
60  
61      /**
62       * Connects a socket to the given host.
63       *
64       * @param sock      the socket to connect, as obtained from
65       *                  {@link #createSocket createSocket}.
66       *                  {@code null} indicates that a new socket
67       *                  should be created and connected.
68       * @param host      the host to connect to
69       * @param port      the port to connect to on the host
70       * @param localAddress the local address to bind the socket to, or
71       *                  {@code null} for any
72       * @param localPort the port on the local machine,
73       *                  0 or a negative number for any
74       * @param params    additional {@link HttpParams parameters} for connecting
75       *
76       * @return  the connected socket. The returned object may be different
77       *          from the {@code sock} argument if this factory supports
78       *          a layered protocol.
79       *
80       * @throws IOException if an I/O error occurs
81       * @throws UnknownHostException if the IP address of the target host
82       *          can not be determined
83       * @throws ConnectTimeoutException if the socket cannot be connected
84       *          within the time limit defined in the {@code params}
85       */
86      Socket connectSocket(
87          Socket sock,
88          String host,
89          int port,
90          InetAddress localAddress,
91          int localPort,
92          HttpParams params
93      ) throws IOException, UnknownHostException, ConnectTimeoutException;
94  
95      /**
96       * Checks whether a socket provides a secure connection.
97       * The socket must be {@link #connectSocket connected}
98       * by this factory.
99       * The factory will <i>not</i> perform I/O operations
100      * in this method.
101      * <p>
102      * As a rule of thumb, plain sockets are not secure and
103      * TLS/SSL sockets are secure. However, there may be
104      * application specific deviations. For example, a plain
105      * socket to a host in the same intranet ("trusted zone")
106      * could be considered secure. On the other hand, a
107      * TLS/SSL socket could be considered insecure based on
108      * the cipher suite chosen for the connection.
109      * </p>
110      *
111      * @param sock      the connected socket to check
112      *
113      * @return  {@code true} if the connection of the socket
114      *          should be considered secure, or
115      *          {@code false} if it should not
116      *
117      * @throws IllegalArgumentException
118      *  if the argument is invalid, for example because it is
119      *  not a connected socket or was created by a different
120      *  socket factory.
121      *  Note that socket factories are <i>not</i> required to
122      *  check these conditions, they may simply return a default
123      *  value when called with an invalid socket argument.
124      */
125     boolean isSecure(Socket sock)
126         throws IllegalArgumentException;
127 
128 }