From 85f3487cf09ca705fe58bcba22480fcd10048bed Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Fri, 5 Jun 2015 15:17:33 +0200 Subject: [PATCH] fixes #64 by attempting to mount the more common "localhost", which is more likely to be excluded from proxy autoconfiguration scripts. --- main/core/pom.xml | 2 +- main/crypto-aes/pom.xml | 2 +- main/crypto-api/pom.xml | 2 +- main/installer-debian/pom.xml | 2 +- main/installer-osx/pom.xml | 2 +- main/installer-win-portable/pom.xml | 2 +- main/installer-win/pom.xml | 2 +- main/pom.xml | 2 +- main/ui/pom.xml | 2 +- .../ui/util/mount/WindowsWebDavMounter.java | 34 +++++++++---------- 10 files changed, 25 insertions(+), 27 deletions(-) diff --git a/main/core/pom.xml b/main/core/pom.xml index 7bf3dd84c..5e17bd90d 100644 --- a/main/core/pom.xml +++ b/main/core/pom.xml @@ -12,7 +12,7 @@ org.cryptomator main - 0.8.0-SNAPSHOT + 0.7.2 core Cryptomator WebDAV and I/O module diff --git a/main/crypto-aes/pom.xml b/main/crypto-aes/pom.xml index 410aed809..37b3b76d9 100644 --- a/main/crypto-aes/pom.xml +++ b/main/crypto-aes/pom.xml @@ -12,7 +12,7 @@ org.cryptomator main - 0.8.0-SNAPSHOT + 0.7.2 crypto-aes Cryptomator cryptographic module (AES) diff --git a/main/crypto-api/pom.xml b/main/crypto-api/pom.xml index 151e9c4ae..e4ba0b81d 100644 --- a/main/crypto-api/pom.xml +++ b/main/crypto-api/pom.xml @@ -12,7 +12,7 @@ org.cryptomator main - 0.8.0-SNAPSHOT + 0.7.2 crypto-api Cryptomator cryptographic module API diff --git a/main/installer-debian/pom.xml b/main/installer-debian/pom.xml index d37d0fa41..6a057b886 100644 --- a/main/installer-debian/pom.xml +++ b/main/installer-debian/pom.xml @@ -3,7 +3,7 @@ org.cryptomator main - 0.8.0-SNAPSHOT + 0.7.2 installer-debian pom diff --git a/main/installer-osx/pom.xml b/main/installer-osx/pom.xml index 8e391df96..666783c69 100644 --- a/main/installer-osx/pom.xml +++ b/main/installer-osx/pom.xml @@ -3,7 +3,7 @@ org.cryptomator main - 0.8.0-SNAPSHOT + 0.7.2 installer-osx pom diff --git a/main/installer-win-portable/pom.xml b/main/installer-win-portable/pom.xml index dfa814698..e03dd8fc9 100644 --- a/main/installer-win-portable/pom.xml +++ b/main/installer-win-portable/pom.xml @@ -3,7 +3,7 @@ org.cryptomator main - 0.8.0-SNAPSHOT + 0.7.2 installer-win-portable pom diff --git a/main/installer-win/pom.xml b/main/installer-win/pom.xml index 7bb61f599..eaa8dac1d 100644 --- a/main/installer-win/pom.xml +++ b/main/installer-win/pom.xml @@ -3,7 +3,7 @@ org.cryptomator main - 0.8.0-SNAPSHOT + 0.7.2 installer-win pom diff --git a/main/pom.xml b/main/pom.xml index 07ffeed9f..320ecb458 100644 --- a/main/pom.xml +++ b/main/pom.xml @@ -11,7 +11,7 @@ 4.0.0 org.cryptomator main - 0.8.0-SNAPSHOT + 0.7.2 pom Cryptomator diff --git a/main/ui/pom.xml b/main/ui/pom.xml index 7bcff00c0..a32bd671c 100644 --- a/main/ui/pom.xml +++ b/main/ui/pom.xml @@ -12,7 +12,7 @@ org.cryptomator main - 0.8.0-SNAPSHOT + 0.7.2 ui Cryptomator GUI diff --git a/main/ui/src/main/java/org/cryptomator/ui/util/mount/WindowsWebDavMounter.java b/main/ui/src/main/java/org/cryptomator/ui/util/mount/WindowsWebDavMounter.java index 84a98e48b..66d200839 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/util/mount/WindowsWebDavMounter.java +++ b/main/ui/src/main/java/org/cryptomator/ui/util/mount/WindowsWebDavMounter.java @@ -30,7 +30,7 @@ import org.cryptomator.ui.util.command.Script; final class WindowsWebDavMounter implements WebDavMounterStrategy { private static final Pattern WIN_MOUNT_DRIVELETTER_PATTERN = Pattern.compile("\\s*([A-Z]:)\\s*"); - private static final int MAX_MOUNT_ATTEMPTS = 5; + private static final int MAX_MOUNT_ATTEMPTS = 8; @Override public boolean shouldWork() { @@ -39,30 +39,26 @@ final class WindowsWebDavMounter implements WebDavMounterStrategy { @Override public void warmUp(int serverPort) { -// try { -// final Script mountScript = fromLines("net use * \\\\localhost@%DAV_PORT%\\DavWWWRoot\\bill-gates-mom-uses-goto /persistent:no"); -// mountScript.addEnv("DAV_PORT", String.valueOf(serverPort)); -// mountScript.execute(1, TimeUnit.SECONDS); -// } catch (CommandFailedException e) { -// // will most certainly throw an exception, because this is a fake WebDav path. But now windows has some DNS things cached :) -// } + // no-op } @Override public WebDavMount mount(URI uri, String name) throws CommandFailedException { CommandResult mountResult; try { - final Script mountScript = fromLines("net use * \\\\0--1.ipv6-literal.net@%DAV_PORT%\\DavWWWRoot%DAV_UNC_PATH% /persistent:no"); + final Script mountScript = fromLines("net use * \\\\localhost@%DAV_PORT%\\DavWWWRoot%DAV_UNC_PATH% /persistent:no"); mountScript.addEnv("DAV_PORT", String.valueOf(uri.getPort())).addEnv("DAV_UNC_PATH", uri.getRawPath().replace('/', '\\')); mountResult = mountScript.execute(5, TimeUnit.SECONDS); } catch (CommandFailedException ex) { - final Script mountScript = fromLines("net use * \\\\0--1.ipv6-literal.net@%DAV_PORT%\\DavWWWRoot%DAV_UNC_PATH% /persistent:no"); - mountScript.addEnv("DAV_PORT", String.valueOf(uri.getPort())).addEnv("DAV_UNC_PATH", uri.getRawPath().replace('/', '\\')); + final Script localhostMountScript = fromLines("net use * \\\\localhost@%DAV_PORT%\\DavWWWRoot%DAV_UNC_PATH% /persistent:no"); + localhostMountScript.addEnv("DAV_PORT", String.valueOf(uri.getPort())).addEnv("DAV_UNC_PATH", uri.getRawPath().replace('/', '\\')); + final Script ipv6literaltMountScript = fromLines("net use * \\\\0--1.ipv6-literal.net@%DAV_PORT%\\DavWWWRoot%DAV_UNC_PATH% /persistent:no"); + ipv6literaltMountScript.addEnv("DAV_PORT", String.valueOf(uri.getPort())).addEnv("DAV_UNC_PATH", uri.getRawPath().replace('/', '\\')); final Script proxyBypassScript = fromLines("reg add \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\" /v \"ProxyOverride\" /d \";0--1.ipv6-literal.net;0--1.ipv6-literal.net:%DAV_PORT%\" /f"); - proxyBypassScript.addEnv("DAV_PORT", String.valueOf(uri.getPort())); - mountResult = bypassProxyAndRetryMount(mountScript, proxyBypassScript); + proxyBypassScript.addEnv("DAV_PORT", String.valueOf(uri.getPort())); + mountResult = bypassProxyAndRetryMount(localhostMountScript, ipv6literaltMountScript, proxyBypassScript); } - + final String driveLetter = getDriveLetter(mountResult.getStdOut()); final Script openExplorerScript = fromLines("start explorer.exe " + driveLetter); openExplorerScript.execute(); @@ -77,7 +73,7 @@ final class WindowsWebDavMounter implements WebDavMounterStrategy { } }; } - + private boolean isVolumeMounted(String driveLetter) { for (Path path : FileSystems.getDefault().getRootDirectories()) { if (path.toString().startsWith(driveLetter)) { @@ -86,15 +82,17 @@ final class WindowsWebDavMounter implements WebDavMounterStrategy { } return false; } - - private CommandResult bypassProxyAndRetryMount(Script mountScript, Script proxyBypassScript) throws CommandFailedException { + + private CommandResult bypassProxyAndRetryMount(Script localhostMountScript, Script ipv6literalMountScript, Script proxyBypassScript) throws CommandFailedException { CommandFailedException latestException = null; for (int i = 0; i < MAX_MOUNT_ATTEMPTS; i++) { try { // wait a moment before next attempt Thread.sleep(5000); proxyBypassScript.execute(); - return mountScript.execute(5, TimeUnit.SECONDS); + // alternate localhost and 0--1.ipv6literal.net + final Script mountScript = (i % 2 == 0) ? localhostMountScript : ipv6literalMountScript; + return mountScript.execute(3, TimeUnit.SECONDS); } catch (CommandFailedException ex) { latestException = ex; } catch (InterruptedException ex) {