3636import java .net .URI ;
3737import java .net .UnknownHostException ;
3838import java .nio .ByteBuffer ;
39+ import java .security .KeyManagementException ;
40+ import java .security .NoSuchAlgorithmException ;
3941import java .util .Collection ;
4042import java .util .Collections ;
4143import java .util .Map ;
@@ -223,7 +225,7 @@ public InetAddress resolve(URI uri) throws UnknownHostException {
223225 }
224226 };
225227 if (httpHeaders != null ) {
226- headers = new TreeMap <String , String >(String .CASE_INSENSITIVE_ORDER );
228+ headers = new TreeMap <>(String .CASE_INSENSITIVE_ORDER );
227229 headers .putAll (httpHeaders );
228230 }
229231 this .connectTimeout = connectTimeout ;
@@ -269,7 +271,7 @@ public Socket getSocket() {
269271 */
270272 public void addHeader (String key , String value ) {
271273 if (headers == null ) {
272- headers = new TreeMap <String , String >(String .CASE_INSENSITIVE_ORDER );
274+ headers = new TreeMap <>(String .CASE_INSENSITIVE_ORDER );
273275 }
274276 headers .put (key , value );
275277 }
@@ -461,19 +463,7 @@ public void sendPing() {
461463 public void run () {
462464 InputStream istream ;
463465 try {
464- boolean upgradeSocketToSSLSocket = false ;
465- // Prioritise a proxy over a socket factory and apply the socketfactory later
466- if (proxy != Proxy .NO_PROXY ) {
467- socket = new Socket (proxy );
468- upgradeSocketToSSLSocket = true ;
469- } else if (socketFactory != null ) {
470- socket = socketFactory .createSocket ();
471- } else if (socket == null ) {
472- socket = new Socket (proxy );
473- upgradeSocketToSSLSocket = true ;
474- } else if (socket .isClosed ()) {
475- throw new IOException ();
476- }
466+ boolean upgradeSocketToSSLSocket = prepareSocket ();
477467
478468 socket .setTcpNoDelay (isTcpNoDelay ());
479469 socket .setReuseAddress (isReuseAddr ());
@@ -485,17 +475,7 @@ public void run() {
485475
486476 // if the socket is set by others we don't apply any TLS wrapper
487477 if (upgradeSocketToSSLSocket && "wss" .equals (uri .getScheme ())) {
488- SSLSocketFactory factory ;
489- // Prioritise the provided socketfactory
490- // Helps when using web debuggers like Fiddler Classic
491- if (socketFactory != null && (socketFactory instanceof SSLSocketFactory )) {
492- factory = (SSLSocketFactory ) socketFactory ;
493- } else {
494- SSLContext sslContext = SSLContext .getInstance ("TLSv1.2" );
495- sslContext .init (null , null , null );
496- factory = sslContext .getSocketFactory ();
497- }
498- socket = factory .createSocket (socket , uri .getHost (), getPort (), true );
478+ upgradeSocketToSSL ();
499479 }
500480
501481 if (socket instanceof SSLSocket ) {
@@ -546,6 +526,38 @@ public void run() {
546526 connectReadThread = null ;
547527 }
548528
529+ private void upgradeSocketToSSL ()
530+ throws NoSuchAlgorithmException , KeyManagementException , IOException {
531+ SSLSocketFactory factory ;
532+ // Prioritise the provided socketfactory
533+ // Helps when using web debuggers like Fiddler Classic
534+ if (socketFactory instanceof SSLSocketFactory ) {
535+ factory = (SSLSocketFactory ) socketFactory ;
536+ } else {
537+ SSLContext sslContext = SSLContext .getInstance ("TLSv1.2" );
538+ sslContext .init (null , null , null );
539+ factory = sslContext .getSocketFactory ();
540+ }
541+ socket = factory .createSocket (socket , uri .getHost (), getPort (), true );
542+ }
543+
544+ private boolean prepareSocket () throws IOException {
545+ boolean upgradeSocketToSSLSocket = false ;
546+ // Prioritise a proxy over a socket factory and apply the socketfactory later
547+ if (proxy != Proxy .NO_PROXY ) {
548+ socket = new Socket (proxy );
549+ upgradeSocketToSSLSocket = true ;
550+ } else if (socketFactory != null ) {
551+ socket = socketFactory .createSocket ();
552+ } else if (socket == null ) {
553+ socket = new Socket (proxy );
554+ upgradeSocketToSSLSocket = true ;
555+ } else if (socket .isClosed ()) {
556+ throw new IOException ();
557+ }
558+ return upgradeSocketToSSLSocket ;
559+ }
560+
549561 /**
550562 * Apply specific SSLParameters If you override this method make sure to always call
551563 * super.onSetSSLParameters() to ensure the hostname validation is active
0 commit comments