@@ -167,11 +167,6 @@ function normalizeAddress(address) {
167167 // Attempt to correct bad input
168168 address = address . trim ( ) ;
169169
170- if ( ! address . toLowerCase ( ) . startsWith ( 'http' ) ) {
171- // Assume HTTPS for security
172- address = `https://${ address } ` ;
173- }
174-
175170 // Seeing failures in iOS when protocol isn't lowercase
176171 address = replaceAll ( address , 'Http:' , 'http:' ) ;
177172 address = replaceAll ( address , 'Https:' , 'https:' ) ;
@@ -758,26 +753,53 @@ export default class ConnectionManager {
758753 }
759754 }
760755
756+ function tryConnectToAddress ( address , options ) {
757+ const server = {
758+ ManualAddress : address ,
759+ LastConnectionMode : ConnectionMode . Manual
760+ } ;
761+
762+ return self . connectToServer ( server , options ) . then ( ( result ) => {
763+ // connectToServer never rejects, but resolves with State='Unavailable'
764+ if ( result . State === 'Unavailable' ) {
765+ return Promise . reject ( ) ;
766+ }
767+ return result ;
768+ } ) ;
769+ }
770+
761771 self . connectToAddress = function ( address , options ) {
762772 if ( ! address ) {
763773 return Promise . reject ( ) ;
764774 }
765775
766776 address = normalizeAddress ( address ) ;
767777
778+ let urls = [ ] ;
779+
780+ if ( / ^ [ ^ : ] + : \/ \/ / . test ( address ) ) {
781+ // Protocol specified - connect as is
782+ urls . push ( address ) ;
783+ } else {
784+ urls . push ( `https://${ address } ` ) ;
785+ urls . push ( `http://${ address } ` ) ;
786+ }
787+
788+ let i = 0 ;
789+
768790 function onFail ( ) {
769- console . log ( `connectToAddress ${ address } failed` ) ;
791+ console . log ( `connectToAddress ${ urls [ i ] } failed` ) ;
792+
793+ if ( ++ i < urls . length ) {
794+ return tryConnectToAddress ( urls [ i ] , options ) . catch ( onFail ) ;
795+ }
796+
770797 return Promise . resolve ( {
771798 State : 'Unavailable'
772799 } ) ;
773800 }
774801
775- const server = {
776- ManualAddress : address ,
777- LastConnectionMode : ConnectionMode . Manual
778- } ;
779-
780- return self . connectToServer ( server , options ) . catch ( onFail ) ;
802+ return tryConnectToAddress ( urls [ i ] , options ) . catch ( onFail ) ;
781803 } ;
782804
783805 self . deleteServer = ( serverId ) => {
0 commit comments