diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/WindowsTorPlugin.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/WindowsTorPlugin.java new file mode 100644 index 000000000..239a753dc --- /dev/null +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/WindowsTorPlugin.java @@ -0,0 +1,52 @@ +package org.briarproject.bramble.plugin.tor; + +import com.sun.jna.platform.win32.Kernel32; + +import org.briarproject.bramble.api.battery.BatteryManager; +import org.briarproject.bramble.api.network.NetworkManager; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.Backoff; +import org.briarproject.bramble.api.plugin.PluginCallback; +import org.briarproject.bramble.api.system.Clock; +import org.briarproject.bramble.api.system.LocationUtils; +import org.briarproject.bramble.api.system.ResourceProvider; + +import java.io.File; +import java.util.concurrent.Executor; + +import javax.net.SocketFactory; + +@NotNullByDefault +class WindowsTorPlugin extends JavaTorPlugin { + + WindowsTorPlugin(Executor ioExecutor, + Executor wakefulIoExecutor, + NetworkManager networkManager, + LocationUtils locationUtils, + SocketFactory torSocketFactory, + Clock clock, + ResourceProvider resourceProvider, + CircumventionProvider circumventionProvider, + BatteryManager batteryManager, + Backoff backoff, + TorRendezvousCrypto torRendezvousCrypto, + PluginCallback callback, + String architecture, + long maxLatency, + int maxIdleTime, + File torDirectory, + int torSocksPort, + int torControlPort) { + super(ioExecutor, wakefulIoExecutor, networkManager, locationUtils, + torSocketFactory, clock, resourceProvider, + circumventionProvider, batteryManager, backoff, + torRendezvousCrypto, callback, architecture, + maxLatency, maxIdleTime, torDirectory, torSocksPort, + torControlPort); + } + + @Override + protected int getProcessId() { + return Kernel32.INSTANCE.GetCurrentProcessId(); + } +} diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/WindowsTorPluginFactory.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/WindowsTorPluginFactory.java new file mode 100644 index 000000000..3ee454f6b --- /dev/null +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/tor/WindowsTorPluginFactory.java @@ -0,0 +1,80 @@ +package org.briarproject.bramble.plugin.tor; + +import org.briarproject.bramble.api.battery.BatteryManager; +import org.briarproject.bramble.api.crypto.CryptoComponent; +import org.briarproject.bramble.api.event.EventBus; +import org.briarproject.bramble.api.lifecycle.IoExecutor; +import org.briarproject.bramble.api.network.NetworkManager; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.Backoff; +import org.briarproject.bramble.api.plugin.BackoffFactory; +import org.briarproject.bramble.api.plugin.PluginCallback; +import org.briarproject.bramble.api.plugin.TorControlPort; +import org.briarproject.bramble.api.plugin.TorDirectory; +import org.briarproject.bramble.api.plugin.TorSocksPort; +import org.briarproject.bramble.api.system.Clock; +import org.briarproject.bramble.api.system.LocationUtils; +import org.briarproject.bramble.api.system.ResourceProvider; +import org.briarproject.bramble.api.system.WakefulIoExecutor; + +import java.io.File; +import java.util.concurrent.Executor; + +import javax.annotation.Nullable; +import javax.annotation.concurrent.Immutable; +import javax.inject.Inject; +import javax.net.SocketFactory; + +import static java.util.logging.Level.INFO; +import static org.briarproject.bramble.util.OsUtils.isWindows; + +@Immutable +@NotNullByDefault +class WindowsTorPluginFactory extends TorPluginFactory { + + @Inject + WindowsTorPluginFactory(@IoExecutor Executor ioExecutor, + @WakefulIoExecutor Executor wakefulIoExecutor, + NetworkManager networkManager, + LocationUtils locationUtils, + EventBus eventBus, + SocketFactory torSocketFactory, + BackoffFactory backoffFactory, + ResourceProvider resourceProvider, + CircumventionProvider circumventionProvider, + BatteryManager batteryManager, + Clock clock, + CryptoComponent crypto, + @TorDirectory File torDirectory, + @TorSocksPort int torSocksPort, + @TorControlPort int torControlPort) { + super(ioExecutor, wakefulIoExecutor, networkManager, locationUtils, + eventBus, torSocketFactory, backoffFactory, resourceProvider, + circumventionProvider, batteryManager, clock, crypto, + torDirectory, torSocksPort, torControlPort); + } + + @Nullable + @Override + String getArchitectureForTorBinary() { + if (!isWindows()) return null; + String arch = System.getProperty("os.arch"); + if (LOG.isLoggable(INFO)) { + LOG.info("System's os.arch is " + arch); + } + if (arch.equals("amd64")) return "windows-x86_64"; + return null; + } + + @Override + TorPlugin createPluginInstance(Backoff backoff, + TorRendezvousCrypto torRendezvousCrypto, PluginCallback callback, + String architecture) { + return new WindowsTorPlugin(ioExecutor, wakefulIoExecutor, + networkManager, locationUtils, torSocketFactory, clock, + resourceProvider, circumventionProvider, batteryManager, + backoff, torRendezvousCrypto, callback, architecture, + MAX_LATENCY, MAX_IDLE_TIME, torDirectory, torSocksPort, + torControlPort); + } +}