Skip to content

Commit 47db375

Browse files
authored
Merge pull request #53 from dmitrylyzo/connect-fail-retry
Reconnect with another protocol on failure
2 parents b998f68 + b2f0761 commit 47db375

File tree

1 file changed

+34
-12
lines changed

1 file changed

+34
-12
lines changed

src/connectionManager.js

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)