MD5 校验值:27cf44ec6e0720408f5ef017a90a3331
CustomSSLSocketFactory.java 文件包含反编译后的源代码,请注意,该内容仅供学习和参考使用,不得用于非法用途。
package com.mopub.network; import android.net.SSLCertificateSocketFactory; import android.os.Build; import com.mopub.common.Preconditions; import com.mopub.common.VisibleForTesting; import com.mopub.common.logging.MoPubLog; import com.mopub.common.util.Reflection; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.net.SocketException; import java.net.UnknownHostException; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLHandshakeException; import javax.net.ssl.SSLSocket; import javax.net.ssl.SSLSocketFactory; public class CustomSSLSocketFactory extends SSLSocketFactory { private SSLSocketFactory a; private CustomSSLSocketFactory() { } public static CustomSSLSocketFactory getDefault(int i) { CustomSSLSocketFactory customSSLSocketFactory = new CustomSSLSocketFactory(); customSSLSocketFactory.a = SSLCertificateSocketFactory.getDefault(i, null); return customSSLSocketFactory; } @Override public Socket createSocket() throws IOException { if (this.a == null) { throw new SocketException("SSLSocketFactory was null. Unable to create socket."); } Socket createSocket = this.a.createSocket(); a(createSocket); return createSocket; } @Override public Socket createSocket(String str, int i) throws IOException, UnknownHostException { if (this.a == null) { throw new SocketException("SSLSocketFactory was null. Unable to create socket."); } Socket createSocket = this.a.createSocket(str, i); a(createSocket); return createSocket; } @Override public Socket createSocket(String str, int i, InetAddress inetAddress, int i2) throws IOException, UnknownHostException { if (this.a == null) { throw new SocketException("SSLSocketFactory was null. Unable to create socket."); } Socket createSocket = this.a.createSocket(str, i, inetAddress, i2); a(createSocket); return createSocket; } @Override public Socket createSocket(InetAddress inetAddress, int i) throws IOException { if (this.a == null) { throw new SocketException("SSLSocketFactory was null. Unable to create socket."); } Socket createSocket = this.a.createSocket(inetAddress, i); a(createSocket); return createSocket; } @Override public Socket createSocket(InetAddress inetAddress, int i, InetAddress inetAddress2, int i2) throws IOException { if (this.a == null) { throw new SocketException("SSLSocketFactory was null. Unable to create socket."); } Socket createSocket = this.a.createSocket(inetAddress, i, inetAddress2, i2); a(createSocket); return createSocket; } @Override public String[] getDefaultCipherSuites() { return this.a == null ? new String[0] : this.a.getDefaultCipherSuites(); } @Override public String[] getSupportedCipherSuites() { return this.a == null ? new String[0] : this.a.getSupportedCipherSuites(); } @Override public Socket createSocket(Socket socket, String str, int i, boolean z) throws IOException { if (this.a == null) { throw new SocketException("SSLSocketFactory was null. Unable to create socket."); } if (Build.VERSION.SDK_INT < 23) { if (z && socket != null) { socket.close(); } Socket createSocket = this.a.createSocket(InetAddressUtils.getInetAddressByName(str), i); a(createSocket); a(createSocket, str); return createSocket; } Socket createSocket2 = this.a.createSocket(socket, str, i, z); a(createSocket2); return createSocket2; } private void a(Socket socket, String str) throws IOException { Preconditions.checkNotNull(socket); if (this.a == null) { throw new SocketException("SSLSocketFactory was null. Unable to create socket."); } if (socket instanceof SSLSocket) { SSLSocket sSLSocket = (SSLSocket) socket; a((SSLCertificateSocketFactory) this.a, sSLSocket, str); a(sSLSocket, str); } } @VisibleForTesting static void a(SSLCertificateSocketFactory sSLCertificateSocketFactory, SSLSocket sSLSocket, String str) { Preconditions.checkNotNull(sSLCertificateSocketFactory); Preconditions.checkNotNull(sSLSocket); if (Build.VERSION.SDK_INT >= 17) { sSLCertificateSocketFactory.setHostname(sSLSocket, str); return; } try { new Reflection.MethodBuilder(sSLSocket, "setHostname").addParam((Class<Class>) String.class, (Class) str).execute(); } catch (Exception e) { MoPubLog.d("Unable to call setHostname() on the socket"); } } @VisibleForTesting static void a(SSLSocket sSLSocket, String str) throws IOException { Preconditions.checkNotNull(sSLSocket); sSLSocket.startHandshake(); if (!HttpsURLConnection.getDefaultHostnameVerifier().verify(str, sSLSocket.getSession())) { throw new SSLHandshakeException("Server Name Identification failed."); } } private void a(Socket socket) { if (socket instanceof SSLSocket) { SSLSocket sSLSocket = (SSLSocket) socket; sSLSocket.setEnabledProtocols(sSLSocket.getSupportedProtocols()); } } }