You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2014/12/30 22:36:55 UTC
svn commit: r1648606 - in
/httpcomponents/httpclient-android/branches/4.3.5-android: RELEASE_NOTES.txt
src/main/java/org/apache/http/conn/ssl/SSLConnectionSocketFactory.java
Author: olegk
Date: Tue Dec 30 21:36:55 2014
New Revision: 1648606
URL: http://svn.apache.org/r1648606
Log:
HTTPCLIENT-1591: invoke Android specific SNI method via reflection
Modified:
httpcomponents/httpclient-android/branches/4.3.5-android/RELEASE_NOTES.txt
httpcomponents/httpclient-android/branches/4.3.5-android/src/main/java/org/apache/http/conn/ssl/SSLConnectionSocketFactory.java
Modified: httpcomponents/httpclient-android/branches/4.3.5-android/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient-android/branches/4.3.5-android/RELEASE_NOTES.txt?rev=1648606&r1=1648605&r2=1648606&view=diff
==============================================================================
--- httpcomponents/httpclient-android/branches/4.3.5-android/RELEASE_NOTES.txt (original)
+++ httpcomponents/httpclient-android/branches/4.3.5-android/RELEASE_NOTES.txt Tue Dec 30 21:36:55 2014
@@ -1,6 +1,9 @@
Changes since 4.3.5
-------------------
+* [HTTPCLIENT-1591] Invoke Android specific SNI method via reflection
+ Contributed by Oleg Kalnichevski <olegk at apache.org>
+
* [HTTPCLIENT-1566] Fixed broken Base64 encoding in BasicScheme
Contributed by Oleg Kalnichevski <olegk at apache.org>
Modified: httpcomponents/httpclient-android/branches/4.3.5-android/src/main/java/org/apache/http/conn/ssl/SSLConnectionSocketFactory.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient-android/branches/4.3.5-android/src/main/java/org/apache/http/conn/ssl/SSLConnectionSocketFactory.java?rev=1648606&r1=1648605&r2=1648606&view=diff
==============================================================================
--- httpcomponents/httpclient-android/branches/4.3.5-android/src/main/java/org/apache/http/conn/ssl/SSLConnectionSocketFactory.java (original)
+++ httpcomponents/httpclient-android/branches/4.3.5-android/src/main/java/org/apache/http/conn/ssl/SSLConnectionSocketFactory.java Tue Dec 30 21:36:55 2014
@@ -28,7 +28,6 @@
package org.apache.http.conn.ssl;
import android.annotation.TargetApi;
-import android.net.SSLCertificateSocketFactory;
import android.os.Build;
import android.util.Log;
@@ -42,7 +41,10 @@ import org.apache.http.util.TextUtils;
import javax.net.SocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.net.InetSocketAddress;
import java.net.Socket;
@@ -146,7 +148,7 @@ public class SSLConnectionSocketFactory
*/
public static SSLConnectionSocketFactory getSocketFactory() throws SSLInitializationException {
return new SSLConnectionSocketFactory(
- (javax.net.ssl.SSLSocketFactory) SSLCertificateSocketFactory.getDefault(-1),
+ (javax.net.ssl.SSLSocketFactory) SSLSocketFactory.getDefault(),
BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
}
@@ -168,7 +170,7 @@ public class SSLConnectionSocketFactory
*/
public static SSLConnectionSocketFactory getSystemSocketFactory() throws SSLInitializationException {
return new SSLConnectionSocketFactory(
- (javax.net.ssl.SSLSocketFactory) SSLCertificateSocketFactory.getDefault(-1),
+ (javax.net.ssl.SSLSocketFactory) SSLSocketFactory.getDefault(),
split(System.getProperty("https.protocols")),
split(System.getProperty("https.cipherSuites")),
BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
@@ -286,11 +288,16 @@ public class SSLConnectionSocketFactory
// Android specific code to enable SNI
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
- if (this.socketfactory instanceof SSLCertificateSocketFactory) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Enabling SNI for " + target);
+ }
+ try {
+ Method method = sslsock.getClass().getMethod("setHostname", String.class);
+ method.invoke(sslsock, target);
+ } catch (Exception ex) {
if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Enabling SNI for " + target);
+ Log.d(TAG, "SNI configuration failed", ex);
}
- ((SSLCertificateSocketFactory) this.socketfactory).setHostname(sslsock, target);
}
}
// End of Android specific code