diff --git a/extensions/chromium/runet-censorship-bypass/src/extension-common/37-sync-pac-script-with-pac-provider-api.tmpl.js b/extensions/chromium/runet-censorship-bypass/src/extension-common/37-sync-pac-script-with-pac-provider-api.tmpl.js
index 1ffc43b..92b42d1 100644
--- a/extensions/chromium/runet-censorship-bypass/src/extension-common/37-sync-pac-script-with-pac-provider-api.tmpl.js
+++ b/extensions/chromium/runet-censorship-bypass/src/extension-common/37-sync-pac-script-with-pac-provider-api.tmpl.js
@@ -60,7 +60,38 @@
};
+ const tryPromiseSeveralTimesAsync = (createPromise, timeoutsInSec) =>
+ createPromise().then(
+ (res) => Promise.resolve(res),
+ (err) => {
+ console.log('Promise failed, are there any retries?');
+ const outSec = timeoutsInSec.shift();
+ if (outSec === undefined) {
+ console.log('No retries left.');
+ return Promise.reject(err);
+ }
+ console.log('Retrying in', outSec, 'sec');
+ /*
+ const alarmName = 'try-promise=several-times-async';
+ const res = new Promise((resolve) => {
+ chrome.alarms.onAlarm.addListener((alarmInfo) => {
+ if (alarmInfo.name === alarmName) {
+ console.log('Time to retry.');
+ resolve(tryPromiseSeveralTimesAsync(createPromise, timeoutsInSec));
+ }
+ });
+ });
+ chrome.alarms.create(alarmName, { delayInMinutes: outSec/60 });
+ return res;
+ */
+ return new Promise((resolve) =>
+ window.setTimeout(() => resolve(tryPromiseSeveralTimesAsync(createPromise, timeoutsInSec)), outSec*1000),
+ );
+ },
+ );
+
const doWithoutProxyAsync = (createPromise) => new Promise((resolve, reject) => {
+ console.log('Doing without proxy...');
chrome.proxy.settings.get({}, chromified((getErr, settings) => {
if (getErr) {
reject(getErr);
@@ -147,7 +178,7 @@
};
const setPacScriptFromProviderAsync = function setPacScriptFromProviderAsync(
- provider, lastModifiedStr = mandatory(), cb = throwIfError,
+ provider, lastModifiedStr, ifUnattended = mandatory(), cb = throwIfError,
) {
const pacUrl = provider.pacUrls[0];
@@ -182,11 +213,10 @@
}
- console.log('Doing without proxy...');
- const pacDataPromise = doWithoutProxyAsync(
+ doWithoutProxyAsync(
// Employ all urls, the latter are fallbacks for the former.
- () =>
- provider.pacUrls.reduce(
+ () => {
+ const tryAllUrlsAsync = () => provider.pacUrls.reduce(
(promise, url) => promise.catch(
() => new Promise(
(resolve, reject) => httpLib.get(
@@ -197,13 +227,18 @@
),
),
Promise.reject(),
+ );
+ return (ifUnattended
+ ? tryPromiseSeveralTimesAsync(tryAllUrlsAsync, [10, 20, 30])
+ : tryAllUrlsAsync()
).catch(
(err) => Promise.reject(clarify(
err,
chrome.i18n.getMessage('FailedToDownloadPacScriptFromAddresses') + ': [ '
+ provider.pacUrls.join(' , ') + ' ].',
)),
- ),
+ );
+ },
).then(
(pacData) => {
setPacAsync(
@@ -240,7 +275,7 @@
Comparison of PAC-scripts (ru).
\`,
order: 0,
- pacUrls: ['https://antizapret.prostovpn.org/proxy.pac'],
+ pacUrls: ['https://AAAAAAAAAantizapret.prostovpn.org/proxy.pac'],
},
Антицензорити: {
distinctKey: 'Anticensority',
@@ -390,12 +425,13 @@
},
- syncWithPacProviderAsync(
- key = this.currentPacProvierKey, cb = throwIfError) {
- if( typeof(key) === 'function' ) {
- cb = key;
- key = this.getCurrentPacProviderKey();
+ syncWithPacProviderAsync(opts = {}, cb = throwIfError) {
+ const optsDefaults = Object.freeze({ key: this.getCurrentPacProviderKey(), ifUnattended: false });
+ if( typeof(opts) === 'function' ) {
+ cb = opts;
+ opts = {};
}
+ let { key, ifUnattended } = { ...optsDefaults, ...opts };
cb = asyncLogGroup('Syncing with PAC provider ' + key + '...', cb);
if (key === null) {
@@ -405,10 +441,13 @@
const pacProvider = this.getPacProvider(key);
+ ifUnattended = true; // TODO:
+
const pacSetPromise = new Promise(
(resolve, reject) => setPacScriptFromProviderAsync(
pacProvider,
this.getLastModifiedForKey(key),
+ ifUnattended,
(err, res, ...warns) => {
if (!err) {
@@ -425,12 +464,16 @@
)
);
- const ipsErrorPromise = new Promise(
+ const updateIpsAsync = () => new Promise(
(resolve, reject) => updatePacProxyIps(
resolve,
),
);
+ const ipsErrorPromise = !ifUnattended
+ ? updateIpsAsync()
+ : tryPromiseSeveralTimesAsync(updateIpsAsync, [10, 20, 30]);
+
Promise.all([pacSetPromise, ipsErrorPromise]).then(
([[pacErr, pacRes, ...pacWarns], ipsErr]) => {
diff --git a/extensions/chromium/runet-censorship-bypass/src/extension-full/20-ip-to-host-api.js b/extensions/chromium/runet-censorship-bypass/src/extension-full/20-ip-to-host-api.js
index 6da95c8..861dd38 100644
--- a/extensions/chromium/runet-censorship-bypass/src/extension-full/20-ip-to-host-api.js
+++ b/extensions/chromium/runet-censorship-bypass/src/extension-full/20-ip-to-host-api.js
@@ -112,7 +112,7 @@
const promises = types.map(
(type) => new Promise((resolve) =>
httpLib.get(
- `https://dns.google.com/resolve?type=${type}&name=${host}&random_padding=${generateRandomHexString(30,500)}`,
+ `https://AAAAAAAAAdns.google.com/resolve?type=${type}&name=${host}&random_padding=${generateRandomHexString(30,500)}`,
(err, res) => {
if (res) {