1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.client5.http.socket;
29
30 import java.io.IOException;
31 import java.net.InetSocketAddress;
32 import java.net.Proxy;
33 import java.net.Socket;
34 import java.security.AccessController;
35 import java.security.PrivilegedActionException;
36 import java.security.PrivilegedExceptionAction;
37
38 import org.apache.hc.core5.annotation.Contract;
39 import org.apache.hc.core5.annotation.ThreadingBehavior;
40 import org.apache.hc.core5.http.HttpHost;
41 import org.apache.hc.core5.http.protocol.HttpContext;
42 import org.apache.hc.core5.io.Closer;
43 import org.apache.hc.core5.util.Asserts;
44 import org.apache.hc.core5.util.TimeValue;
45
46
47
48
49
50
51
52
53
54
55 @Deprecated
56 @Contract(threading = ThreadingBehavior.STATELESS)
57 public class PlainConnectionSocketFactory implements ConnectionSocketFactory {
58
59
60
61
62 public static final PlainConnectionSocketFactory INSTANCE = new PlainConnectionSocketFactory();
63
64 public static PlainConnectionSocketFactory getSocketFactory() {
65 return INSTANCE;
66 }
67
68 public PlainConnectionSocketFactory() {
69 super();
70 }
71
72 @Override
73 public Socket createSocket(final Proxy proxy, final HttpContext context) throws IOException {
74 return proxy != null ? new Socket(proxy) : createSocket(context);
75 }
76
77 @Override
78 public Socket createSocket(final HttpContext context) throws IOException {
79 return new Socket();
80 }
81
82 @Override
83 public Socket connectSocket(
84 final TimeValue connectTimeout,
85 final Socket socket,
86 final HttpHost host,
87 final InetSocketAddress remoteAddress,
88 final InetSocketAddress localAddress,
89 final HttpContext context) throws IOException {
90 final Socket sock = socket != null ? socket : createSocket(context);
91 if (localAddress != null) {
92 sock.bind(localAddress);
93 }
94 try {
95
96
97 try {
98 AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> {
99 sock.connect(remoteAddress, TimeValue.isPositive(connectTimeout) ? connectTimeout.toMillisecondsIntBound() : 0);
100 return null;
101 });
102 } catch (final PrivilegedActionException e) {
103 Asserts.check(e.getCause() instanceof IOException,
104 "method contract violation only checked exceptions are wrapped: " + e.getCause());
105
106 throw (IOException) e.getCause();
107 }
108 } catch (final IOException ex) {
109 Closer.closeQuietly(sock);
110 throw ex;
111 }
112 return sock;
113 }
114
115 }