Skip to content

Commit fe54290

Browse files
bdcgoogleAndroid (Google) Code Review
authored andcommitted
Merge "Add a static generator that takes a Socket Write Timeout Argumanet" into jb-mr1-dev
2 parents 0c62257 + fd901f7 commit fe54290

File tree

3 files changed

+53
-17
lines changed

3 files changed

+53
-17
lines changed

api/current.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12744,6 +12744,7 @@ package android.net {
1274412744
method public static javax.net.ssl.SSLSocketFactory getDefault(int, android.net.SSLSessionCache);
1274512745
method public java.lang.String[] getDefaultCipherSuites();
1274612746
method public static org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(int, android.net.SSLSessionCache);
12747+
method public static org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(int, int, android.net.SSLSessionCache);
1274712748
method public static javax.net.ssl.SSLSocketFactory getInsecure(int, android.net.SSLSessionCache);
1274812749
method public byte[] getNpnSelectedProtocol(java.net.Socket);
1274912750
method public java.lang.String[] getSupportedCipherSuites();

core/java/android/net/SSLCertificateSocketFactory.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ public void checkServerTrusted(X509Certificate[] certs, String authType) { }
9090
private byte[] mNpnProtocols = null;
9191

9292
private final int mHandshakeTimeoutMillis;
93+
private final int mWriteTimeoutMillis;
9394
private final SSLClientSessionCache mSessionCache;
9495
private final boolean mSecure;
9596

@@ -100,12 +101,21 @@ public SSLCertificateSocketFactory(int handshakeTimeoutMillis) {
100101
}
101102

102103
private SSLCertificateSocketFactory(
103-
int handshakeTimeoutMillis, SSLSessionCache cache, boolean secure) {
104+
int handshakeTimeoutMillis,
105+
int writeTimeoutMillis,
106+
SSLSessionCache cache,
107+
boolean secure) {
104108
mHandshakeTimeoutMillis = handshakeTimeoutMillis;
109+
mWriteTimeoutMillis = writeTimeoutMillis;
105110
mSessionCache = cache == null ? null : cache.mSessionCache;
106111
mSecure = secure;
107112
}
108113

114+
private SSLCertificateSocketFactory(
115+
int handshakeTimeoutMillis, SSLSessionCache cache, boolean secure) {
116+
this(handshakeTimeoutMillis, 0, cache, secure);
117+
}
118+
109119
/**
110120
* Returns a new socket factory instance with an optional handshake timeout.
111121
*
@@ -161,6 +171,24 @@ public static org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(
161171
new SSLCertificateSocketFactory(handshakeTimeoutMillis, cache, true));
162172
}
163173

174+
/**
175+
* Returns a socket factory (also named SSLSocketFactory, but in a different
176+
* namespace) for use with the Apache HTTP stack.
177+
*
178+
* @param handshakeTimeoutMillis to use for SSL connection handshake, or 0
179+
* for none. The socket timeout is reset to 0 after the handshake.
180+
* @param writeTimeoutMillis the desired write timeout in milliseconds or 0 for none.
181+
* @param cache The {@link SSLSessionCache} to use, or null for no cache.
182+
* @return a new SocketFactory with the specified parameters
183+
*/
184+
public static org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(
185+
int handshakeTimeoutMillis,
186+
int writeTimeoutMillis,
187+
SSLSessionCache cache) {
188+
return new org.apache.http.conn.ssl.SSLSocketFactory(new SSLCertificateSocketFactory(
189+
handshakeTimeoutMillis, writeTimeoutMillis, cache, true));
190+
}
191+
164192
/**
165193
* Verify the hostname of the certificate used by the other end of a
166194
* connected socket. You MUST call this if you did not supply a hostname
@@ -376,6 +404,7 @@ public Socket createSocket(Socket k, String host, int port, boolean close) throw
376404
OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket(k, host, port, close);
377405
s.setNpnProtocols(mNpnProtocols);
378406
s.setHandshakeTimeout(mHandshakeTimeoutMillis);
407+
s.setSoWriteTimeout(mWriteTimeoutMillis);
379408
if (mSecure) {
380409
verifyHostname(s, host);
381410
}
@@ -395,6 +424,7 @@ public Socket createSocket() throws IOException {
395424
OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket();
396425
s.setNpnProtocols(mNpnProtocols);
397426
s.setHandshakeTimeout(mHandshakeTimeoutMillis);
427+
s.setSoWriteTimeout(mWriteTimeoutMillis);
398428
return s;
399429
}
400430

@@ -412,6 +442,7 @@ public Socket createSocket(InetAddress addr, int port, InetAddress localAddr, in
412442
addr, port, localAddr, localPort);
413443
s.setNpnProtocols(mNpnProtocols);
414444
s.setHandshakeTimeout(mHandshakeTimeoutMillis);
445+
s.setSoWriteTimeout(mWriteTimeoutMillis);
415446
return s;
416447
}
417448

@@ -427,6 +458,7 @@ public Socket createSocket(InetAddress addr, int port) throws IOException {
427458
OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket(addr, port);
428459
s.setNpnProtocols(mNpnProtocols);
429460
s.setHandshakeTimeout(mHandshakeTimeoutMillis);
461+
s.setSoWriteTimeout(mWriteTimeoutMillis);
430462
return s;
431463
}
432464

@@ -443,6 +475,7 @@ public Socket createSocket(String host, int port, InetAddress localAddr, int loc
443475
host, port, localAddr, localPort);
444476
s.setNpnProtocols(mNpnProtocols);
445477
s.setHandshakeTimeout(mHandshakeTimeoutMillis);
478+
s.setSoWriteTimeout(mWriteTimeoutMillis);
446479
if (mSecure) {
447480
verifyHostname(s, host);
448481
}
@@ -460,6 +493,7 @@ public Socket createSocket(String host, int port) throws IOException {
460493
OpenSSLSocketImpl s = (OpenSSLSocketImpl) getDelegate().createSocket(host, port);
461494
s.setNpnProtocols(mNpnProtocols);
462495
s.setHandshakeTimeout(mHandshakeTimeoutMillis);
496+
s.setSoWriteTimeout(mWriteTimeoutMillis);
463497
if (mSecure) {
464498
verifyHostname(s, host);
465499
}

core/java/android/net/http/AndroidHttpClient.java

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,16 @@
1616

1717
package android.net.http;
1818

19+
import android.content.ContentResolver;
20+
import android.content.Context;
21+
import android.net.SSLCertificateSocketFactory;
22+
import android.net.SSLSessionCache;
23+
import android.os.Looper;
24+
import android.util.Base64;
25+
import android.util.Log;
26+
1927
import com.android.internal.http.HttpDateTime;
28+
2029
import org.apache.http.Header;
2130
import org.apache.http.HttpEntity;
2231
import org.apache.http.HttpEntityEnclosingRequest;
@@ -25,44 +34,36 @@
2534
import org.apache.http.HttpRequest;
2635
import org.apache.http.HttpRequestInterceptor;
2736
import org.apache.http.HttpResponse;
28-
import org.apache.http.entity.AbstractHttpEntity;
29-
import org.apache.http.entity.ByteArrayEntity;
37+
import org.apache.http.client.ClientProtocolException;
3038
import org.apache.http.client.HttpClient;
3139
import org.apache.http.client.ResponseHandler;
32-
import org.apache.http.client.ClientProtocolException;
33-
import org.apache.http.client.protocol.ClientContext;
3440
import org.apache.http.client.methods.HttpUriRequest;
3541
import org.apache.http.client.params.HttpClientParams;
42+
import org.apache.http.client.protocol.ClientContext;
3643
import org.apache.http.conn.ClientConnectionManager;
3744
import org.apache.http.conn.scheme.PlainSocketFactory;
3845
import org.apache.http.conn.scheme.Scheme;
3946
import org.apache.http.conn.scheme.SchemeRegistry;
47+
import org.apache.http.entity.AbstractHttpEntity;
48+
import org.apache.http.entity.ByteArrayEntity;
4049
import org.apache.http.impl.client.DefaultHttpClient;
4150
import org.apache.http.impl.client.RequestWrapper;
4251
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
4352
import org.apache.http.params.BasicHttpParams;
4453
import org.apache.http.params.HttpConnectionParams;
4554
import org.apache.http.params.HttpParams;
4655
import org.apache.http.params.HttpProtocolParams;
56+
import org.apache.http.protocol.BasicHttpContext;
4757
import org.apache.http.protocol.BasicHttpProcessor;
4858
import org.apache.http.protocol.HttpContext;
49-
import org.apache.http.protocol.BasicHttpContext;
5059

60+
import java.io.ByteArrayOutputStream;
5161
import java.io.IOException;
5262
import java.io.InputStream;
53-
import java.io.ByteArrayOutputStream;
5463
import java.io.OutputStream;
64+
import java.net.URI;
5565
import java.util.zip.GZIPInputStream;
5666
import java.util.zip.GZIPOutputStream;
57-
import java.net.URI;
58-
59-
import android.content.Context;
60-
import android.content.ContentResolver;
61-
import android.net.SSLCertificateSocketFactory;
62-
import android.net.SSLSessionCache;
63-
import android.os.Looper;
64-
import android.util.Base64;
65-
import android.util.Log;
6667

6768
/**
6869
* Implementation of the Apache {@link DefaultHttpClient} that is configured with
@@ -134,7 +135,7 @@ public static AndroidHttpClient newInstance(String userAgent, Context context) {
134135
PlainSocketFactory.getSocketFactory(), 80));
135136
schemeRegistry.register(new Scheme("https",
136137
SSLCertificateSocketFactory.getHttpSocketFactory(
137-
SOCKET_OPERATION_TIMEOUT, sessionCache), 443));
138+
SOCKET_OPERATION_TIMEOUT, SOCKET_OPERATION_TIMEOUT, sessionCache), 443));
138139

139140
ClientConnectionManager manager =
140141
new ThreadSafeClientConnManager(params, schemeRegistry);

0 commit comments

Comments
 (0)