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.Socket;
33 import java.security.AccessController;
34 import java.security.PrivilegedActionException;
35 import java.security.PrivilegedExceptionAction;
36
37 import org.apache.hc.core5.annotation.Contract;
38 import org.apache.hc.core5.annotation.ThreadingBehavior;
39 import org.apache.hc.core5.http.HttpHost;
40 import org.apache.hc.core5.http.protocol.HttpContext;
41 import org.apache.hc.core5.io.Closer;
42 import org.apache.hc.core5.util.Asserts;
43 import org.apache.hc.core5.util.TimeValue;
44
45
46
47
48
49
50 @Contract(threading = ThreadingBehavior.STATELESS)
51 public class PlainConnectionSocketFactory implements ConnectionSocketFactory {
52
53 public static final PlainConnectionSocketFactoryionSocketFactory.html#PlainConnectionSocketFactory">PlainConnectionSocketFactory INSTANCE = new PlainConnectionSocketFactory();
54
55 public static PlainConnectionSocketFactory getSocketFactory() {
56 return INSTANCE;
57 }
58
59 public PlainConnectionSocketFactory() {
60 super();
61 }
62
63 @Override
64 public Socket createSocket(final HttpContext context) throws IOException {
65 return new Socket();
66 }
67
68 @Override
69 public Socket connectSocket(
70 final TimeValue connectTimeout,
71 final Socket socket,
72 final HttpHost host,
73 final InetSocketAddress remoteAddress,
74 final InetSocketAddress localAddress,
75 final HttpContext context) throws IOException {
76 final Socket sock = socket != null ? socket : createSocket(context);
77 if (localAddress != null) {
78 sock.bind(localAddress);
79 }
80 try {
81
82
83 try {
84 AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
85 @Override
86 public Object run() throws IOException {
87 sock.connect(remoteAddress, TimeValue.isPositive(connectTimeout) ? connectTimeout.toMillisecondsIntBound() : 0);
88 return null;
89 }
90 });
91 } catch (final PrivilegedActionException e) {
92 Asserts.check(e.getCause() instanceof IOException,
93 "method contract violation only checked exceptions are wrapped: " + e.getCause());
94
95 throw (IOException) e.getCause();
96 }
97 } catch (final IOException ex) {
98 Closer.closeQuietly(sock);
99 throw ex;
100 }
101 return sock;
102 }
103
104 }