diff --git a/gradle/variables.gradle b/gradle/variables.gradle index 89e95b3b2526d28a8b93c80efb250629e78027cf..e7e2535b81ed25698102b864f5b961d08c53a475 100644 --- a/gradle/variables.gradle +++ b/gradle/variables.gradle @@ -8,5 +8,5 @@ ext { junit_version = '5.7.2' mockk_version = '1.10.4' ktlint_plugin_version = '10.2.1' - onionwrapper_version = '0.0.2' + onionwrapper_version = '0.0.4' } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 5eef64ae7a97325b7a2a71dbdf83139f2f8f0623..8068b7ed4b23e4dd13efad28da71c236b412f701 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -2841,41 +2841,50 @@ </component> <component group="net.java" name="jvnet-parent" version="1"> <artifact name="jvnet-parent-1.pom"> - <sha256 value="281440811268e65d9e266b3cc898297e214e04f09740d0386ceeb4a8923d63bf" origin="Generated by Gradle"/> + <sha256 value="281440811268e65d9e266b3cc898297e214e04f09740d0386ceeb4a8923d63bf" + origin="Generated by Gradle" /> </artifact> </component> <component group="net.java" name="jvnet-parent" version="3"> <artifact name="jvnet-parent-3.pom"> - <sha256 value="30f5789efa39ddbf96095aada3fc1260c4561faf2f714686717cb2dc5049475a" origin="Generated by Gradle"/> + <sha256 value="30f5789efa39ddbf96095aada3fc1260c4561faf2f714686717cb2dc5049475a" + origin="Generated by Gradle" /> </artifact> </component> - <component group="net.java.dev.jna" name="jna" version="4.5.2"> - <artifact name="jna-4.5.2.jar"> - <sha256 value="0c8eb7acf67261656d79005191debaba3b6bf5dd60a43735a245429381dbecff" origin="Generated by Gradle"/> + <component group="net.java.dev.jna" name="jna" version="5.13.0"> + <artifact name="jna-5.13.0.jar"> + <sha256 value="66d4f819a062a51a1d5627bffc23fac55d1677f0e0a1feba144aabdd670a64bb" + origin="Generated by Gradle" /> </artifact> - <artifact name="jna-4.5.2.pom"> - <sha256 value="9df42b4ccef7045d6e4fb64b8376dd092dd74d9737cc6495c7698eeccbd3c44f" origin="Generated by Gradle"/> + <artifact name="jna-5.13.0.pom"> + <sha256 value="f515c2578178f45247ecca7a9e1db109531b1c42f2424e253ceeb0f6b8d42374" + origin="Generated by Gradle" /> </artifact> </component> <component group="net.java.dev.jna" name="jna" version="5.6.0"> <artifact name="jna-5.6.0.jar"> - <sha256 value="5557e235a8aa2f9766d5dc609d67948f2a8832c2d796cea9ef1d6cbe0b3b7eaf" origin="Generated by Gradle"/> + <sha256 value="5557e235a8aa2f9766d5dc609d67948f2a8832c2d796cea9ef1d6cbe0b3b7eaf" + origin="Generated by Gradle" /> </artifact> <artifact name="jna-5.6.0.pom"> - <sha256 value="5fe81b0255978f24616d37b10608b79498a5f3073e1d9b2038d8736a831f2608" origin="Generated by Gradle"/> + <sha256 value="5fe81b0255978f24616d37b10608b79498a5f3073e1d9b2038d8736a831f2608" + origin="Generated by Gradle" /> </artifact> </component> - <component group="net.java.dev.jna" name="jna-platform" version="4.5.2"> - <artifact name="jna-platform-4.5.2.jar"> - <sha256 value="f1d00c167d8921c6e23c626ef9f1c3ae0be473c95c68ffa012bc7ae55a87e2d6" origin="Generated by Gradle"/> + <component group="net.java.dev.jna" name="jna-platform" version="5.13.0"> + <artifact name="jna-platform-5.13.0.jar"> + <sha256 value="474d7b88f6e97009b6ec1d98c3024dd95c23187c65dabfbc35331bcac3d173dd" + origin="Generated by Gradle" /> </artifact> - <artifact name="jna-platform-4.5.2.pom"> - <sha256 value="fa62e1efcbd19071be4b37ed1053dadc0ca60880b3980f58abd497f2a9f13d05" origin="Generated by Gradle"/> + <artifact name="jna-platform-5.13.0.pom"> + <sha256 value="63b20c8af057c98196f8789e1a21a6dddf02aa8f385e6b04b4b4f9f0df257066" + origin="Generated by Gradle" /> </artifact> </component> <component group="net.java.dev.jna" name="jna-platform" version="5.6.0"> <artifact name="jna-platform-5.6.0.jar"> - <sha256 value="9ecea8bf2b1b39963939d18b70464eef60c508fed8820f9dcaba0c35518eabf7" origin="Generated by Gradle"/> + <sha256 value="9ecea8bf2b1b39963939d18b70464eef60c508fed8820f9dcaba0c35518eabf7" + origin="Generated by Gradle" /> </artifact> <artifact name="jna-platform-5.6.0.pom"> <sha256 value="1beb35cb4184e6c906a7e32eaebd852dd3da0a263962e99134ab945832394e28" origin="Generated by Gradle"/> @@ -3127,39 +3136,48 @@ </component> <component group="org.briarproject" name="obfs4proxy-linux" version="0.0.14-tor2"> <artifact name="obfs4proxy-linux-0.0.14-tor2.jar"> - <sha256 value="bb2431092b5ad998ad620b0223e725c0f7e43f1b02af2f097a2544edc1fd9738" origin="Generated by Gradle"/> + <sha256 value="bb2431092b5ad998ad620b0223e725c0f7e43f1b02af2f097a2544edc1fd9738" + origin="Generated by Gradle" /> </artifact> <artifact name="obfs4proxy-linux-0.0.14-tor2.pom"> - <sha256 value="9feb0d95ecef6e394b2a55ec4e451ec659f84a705345976053de166b157a0460" origin="Generated by Gradle"/> + <sha256 value="9feb0d95ecef6e394b2a55ec4e451ec659f84a705345976053de166b157a0460" + origin="Generated by Gradle" /> </artifact> </component> - <component group="org.briarproject" name="onionwrapper-android" version="0.0.2"> - <artifact name="onionwrapper-android-0.0.2.aar"> - <sha256 value="d196f1fe5d8b750866ea09d80509716aae7645d39b2c85433994718dbebeb4d1" origin="Generated by Gradle"/> + <component group="org.briarproject" name="onionwrapper-android" version="0.0.4"> + <artifact name="onionwrapper-android-0.0.4.aar"> + <sha256 value="d761854dac454616b3e0ca099b2cd17060365ce4316afe495cc7ae86b6c81d15" + origin="Generated by Gradle" /> </artifact> - <artifact name="onionwrapper-android-0.0.2.module"> - <sha256 value="53b951f528bcd09804c98be99933160beaea329f64c9d691a971ce61d67b4497" origin="Generated by Gradle"/> + <artifact name="onionwrapper-android-0.0.4.module"> + <sha256 value="fd552ff3c8b76c1012ce25f9a2ccc428ee98634b5ce1d911cd3ca07abe487a1f" + origin="Generated by Gradle" /> </artifact> </component> - <component group="org.briarproject" name="onionwrapper-core" version="0.0.2"> - <artifact name="onionwrapper-core-0.0.2.jar"> - <sha256 value="7038e960c9e59803f0e2c19444dbb5214cd99e5a7463c0a01c45318e07a0eb80" origin="Generated by Gradle"/> + <component group="org.briarproject" name="onionwrapper-core" version="0.0.4"> + <artifact name="onionwrapper-core-0.0.4.jar"> + <sha256 value="28a01a62e96aa763989a8afc325abd3bee54f8021269f91aa48b247a6e717870" + origin="Generated by Gradle" /> </artifact> - <artifact name="onionwrapper-core-0.0.2.module"> - <sha256 value="71b6e4713dff5920a85585232ebe9909024885c9178b8ca5cf391bbcbe0f30b8" origin="Generated by Gradle"/> + <artifact name="onionwrapper-core-0.0.4.module"> + <sha256 value="f1be40175fe2f5e2a492af54966f4b9d57865f4fc9ca6b74384efb1771e9863a" + origin="Generated by Gradle" /> </artifact> </component> - <component group="org.briarproject" name="onionwrapper-java" version="0.0.2"> - <artifact name="onionwrapper-java-0.0.2.jar"> - <sha256 value="87a3f4082174dbbd32c4f5f062b46af1d3fedd8cfa1ec84f6ce6ccb6e3674fb6" origin="Generated by Gradle"/> + <component group="org.briarproject" name="onionwrapper-java" version="0.0.4"> + <artifact name="onionwrapper-java-0.0.4.jar"> + <sha256 value="7806ef878074498653b557e26eb70e6007df3450d6a910a2e9a322f7eb4df442" + origin="Generated by Gradle" /> </artifact> - <artifact name="onionwrapper-java-0.0.2.module"> - <sha256 value="80baa417137ebe8069c846a63d6dff03b90eb9d075d3975a305e92a6773220f4" origin="Generated by Gradle"/> + <artifact name="onionwrapper-java-0.0.4.module"> + <sha256 value="aee891efd5481afe0a8a4fac16a46405f02040939fc78c5613880c5424139b56" + origin="Generated by Gradle" /> </artifact> </component> <component group="org.briarproject" name="snowflake-android" version="2.5.1"> <artifact name="snowflake-android-2.5.1.jar"> - <sha256 value="88ec81c17b1b6fa884d06839dec0330e328b45c89f88c970a213ce91ca8eac87" origin="Generated by Gradle"/> + <sha256 value="88ec81c17b1b6fa884d06839dec0330e328b45c89f88c970a213ce91ca8eac87" + origin="Generated by Gradle" /> </artifact> <artifact name="snowflake-android-2.5.1.pom"> <sha256 value="982c1b2e81d7f8e8e82013a3b5de3501cb24cece1411a5cd834965d5b40634b3" origin="Generated by Gradle"/> diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java index 23a6e53a7cbecc80bebd3a4d7bf6742b9868d043..3a39b7febbaf05e6b76051fe9ed9dfb83a59aa18 100644 --- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java +++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java @@ -27,6 +27,7 @@ import org.briarproject.mailbox.core.lifecycle.IoExecutor; import org.briarproject.mailbox.core.lifecycle.ServiceException; import org.briarproject.mailbox.core.settings.Settings; import org.briarproject.mailbox.core.settings.SettingsManager; +import org.briarproject.nullsafety.InterfaceNotNullByDefault; import org.briarproject.onionwrapper.CircumventionProvider; import org.briarproject.onionwrapper.CircumventionProvider.BridgeType; import org.briarproject.onionwrapper.LocationUtils; @@ -43,7 +44,6 @@ import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.IntSupplier; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.ThreadSafe; @@ -75,6 +75,7 @@ import static org.briarproject.onionwrapper.CircumventionProvider.BridgeType.SNO import static org.briarproject.onionwrapper.CircumventionProvider.BridgeType.VANILLA; import static org.slf4j.LoggerFactory.getLogger; +@InterfaceNotNullByDefault public abstract class AbstractTorPlugin implements TorPlugin, EventListener { private static final Logger LOG = getLogger(AbstractTorPlugin.class); @@ -124,7 +125,7 @@ public abstract class AbstractTorPlugin implements TorPlugin, EventListener { tor.setObserver(new Observer() { @Override - public void onState(@Nonnull TorState s) { + public void onState(TorState s) { state.onStateChanged(s); } @@ -134,7 +135,7 @@ public abstract class AbstractTorPlugin implements TorPlugin, EventListener { } @Override - public void onHsDescriptorUpload(@Nonnull String onion) { + public void onHsDescriptorUpload(String onion) { state.onServiceDescriptorUploaded(); } @@ -244,6 +245,9 @@ public abstract class AbstractTorPlugin implements TorPlugin, EventListener { } catch (IOException e) { logException(LOG, e, "Error while sending tor shutdown instructions"); + } catch (InterruptedException e) { + LOG.warn("Interrupted while stopping Tor"); + Thread.currentThread().interrupt(); } } @@ -424,7 +428,14 @@ public abstract class AbstractTorPlugin implements TorPlugin, EventListener { } private synchronized TorPluginState getCurrentState(TorState torState) { - if (torState == TorState.STARTING_STOPPING) { + // Treat TorState.STARTED as TorPluginState.STARTING_STOPPING + // because it's only seen during startup, before + // TorWrapper#enableNetwork() is called for the first time + if (torState == TorState.NOT_STARTED || + torState == TorState.STARTING || + torState == TorState.STARTED || + torState == TorState.STOPPING || + torState == TorState.STOPPED) { return TorPluginState.StartingStopping.INSTANCE; } else if (torState == TorState.DISABLED) { return TorPluginState.Inactive.INSTANCE;