From 2f7e2e16cf8bed776521f00832ccf16408aca050 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 30 Oct 2012 22:10:38 +0000 Subject: [PATCH] Merged changes from the afsnit repo. The project is now built as an Android project (via Eclipse or ant). Tests have been moved to a separate project so they can exist outside the Android build process. A basic Android app structure has been created. A Bluetooth plugin for Android has been added, and the Bluetooth plugin for J2SE has been modified to use the same techniques. --- .classpath | 27 +- .gitignore | 6 +- .project | 50 +- AndroidManifest.xml | 24 + android.jar | Bin 0 -> 18382981 bytes ant.properties | 17 + build-common.xml | 37 - build.xml | 104 +- dependencies.xml | 21 - libs/test/hamcrest-core-1.1.jar | Bin 33395 -> 0 bytes libs/test/hamcrest-library-1.1.jar | Bin 46692 -> 0 bytes libs/test/jmock-2.5.1.jar | Bin 241000 -> 0 bytes libs/test/junit-4.9b3.jar | Bin 247280 -> 0 bytes proguard-project.txt | 20 + project.properties | 14 + res/values/strings.xml | 4 + src/.gitignore | 2 +- src/build.xml | 26 +- src/net/sf/briar/HelloWorldActivity.java | 19 + src/net/sf/briar/HelloWorldModule.java | 59 + src/net/sf/briar/HelloWorldService.java | 95 + .../sf/briar/android/AndroidExecutorImpl.java | 89 + src/net/sf/briar/android/AndroidModule.java | 13 + .../sf/briar/api/android/AndroidExecutor.java | 17 + src/net/sf/briar/api/crypto/KeyManager.java | 2 +- .../sf/briar/api/db/DatabaseComponent.java | 28 +- src/net/sf/briar/api/db/DatabaseConfig.java | 14 + .../sf/briar/api/db/DatabaseDirectory.java | 15 - src/net/sf/briar/api/db/DatabaseMaxSize.java | 15 - src/net/sf/briar/api/db/DatabasePassword.java | 18 - .../sf/briar/api/db/DbClosedException.java | 7 + .../sf/briar/api/plugins/PluginCallback.java | 10 +- .../sf/briar/api/plugins/PluginManager.java | 3 +- .../plugins/duplex/DuplexPluginFactory.java | 5 + .../plugins/simplex/SimplexPluginFactory.java | 5 + .../api/transport/ConnectionRecogniser.java | 1 - .../{db => transport}/ContactTransport.java | 2 +- .../{db => transport}/TemporarySecret.java | 2 +- src/net/sf/briar/db/Database.java | 41 +- src/net/sf/briar/db/DatabaseCleanerImpl.java | 3 + .../sf/briar/db/DatabaseComponentImpl.java | 87 +- src/net/sf/briar/db/DatabaseModule.java | 11 +- src/net/sf/briar/db/H2Database.java | 25 +- src/net/sf/briar/db/JdbcDatabase.java | 96 +- src/net/sf/briar/{api => }/db/Status.java | 4 +- .../sf/briar/plugins/PluginManagerImpl.java | 80 +- .../plugins/bluetooth/AbstractListener.java | 54 - .../plugins/bluetooth/BluetoothPlugin.java | 321 +-- .../bluetooth/BluetoothPluginFactory.java | 3 + .../plugins/bluetooth/ConnectionCallback.java | 57 - .../plugins/bluetooth/ContactListener.java | 83 - .../plugins/bluetooth/InvitationListener.java | 46 +- .../plugins/droidtooth/DroidtoothPlugin.java | 431 ++++ .../droidtooth/DroidtoothPluginFactory.java | 22 + .../DroidtoothTransportConnection.java | 34 + .../plugins/droidtooth/InsecureBluetooth.java | 207 ++ .../plugins/email/GmailPluginFactory.java | 3 + .../file/RemovableDrivePluginFactory.java | 3 + .../plugins/socket/SimpleSocketPlugin.java | 4 +- .../socket/SimpleSocketPluginFactory.java | 3 + src/net/sf/briar/plugins/tor/TorPlugin.java | 17 +- .../briar/plugins/tor/TorPluginFactory.java | 3 + .../transport/ConnectionRecogniserImpl.java | 2 +- .../sf/briar/transport/KeyManagerImpl.java | 4 +- .../TransportConnectionRecogniser.java | 2 +- src/net/sf/briar/util/BoundedExecutor.java | 7 +- src/net/sf/briar/util/FileUtils.java | 22 +- src/net/sf/briar/util/OsUtils.java | 11 +- test/build.xml | 75 - test/net/sf/briar/BriarTestCase.java | 19 - test/net/sf/briar/LockFairnessTest.java | 161 -- .../net/sf/briar/ProtocolIntegrationTest.java | 264 --- test/net/sf/briar/TestDatabaseModule.java | 38 - test/net/sf/briar/TestUtils.java | 75 - test/net/sf/briar/crypto/CounterModeTest.java | 156 -- test/net/sf/briar/crypto/ErasableKeyTest.java | 79 - .../net/sf/briar/crypto/KeyAgreementTest.java | 28 - .../sf/briar/crypto/KeyDerivationTest.java | 76 - test/net/sf/briar/db/BasicH2Test.java | 192 -- .../sf/briar/db/DatabaseCleanerImplTest.java | 61 - .../briar/db/DatabaseComponentImplTest.java | 151 -- .../sf/briar/db/DatabaseComponentTest.java | 1607 ------------- test/net/sf/briar/db/H2DatabaseTest.java | 2032 ----------------- test/net/sf/briar/db/TestGroup.java | 29 - test/net/sf/briar/db/TestGroupFactory.java | 20 - test/net/sf/briar/db/TestMessage.java | 89 - .../lifecycle/ShutdownManagerImplTest.java | 33 - .../WindowsShutdownManagerImplTest.java | 39 - .../sf/briar/plugins/DuplexClientTest.java | 101 - .../sf/briar/plugins/DuplexServerTest.java | 103 - test/net/sf/briar/plugins/DuplexTest.java | 98 - .../sf/briar/plugins/ImmediateExecutor.java | 10 - .../briar/plugins/PluginManagerImplTest.java | 54 - .../bluetooth/BluetoothClientTest.java | 44 - .../bluetooth/BluetoothServerTest.java | 35 - .../plugins/bluetooth/BluetoothTest.java | 13 - .../briar/plugins/email/GmailPluginTest.java | 123 - .../file/LinuxRemovableDriveFinderTest.java | 25 - .../file/MacRemovableDriveFinderTest.java | 23 - .../PollingRemovableDriveMonitorTest.java | 94 - .../file/RemovableDrivePluginTest.java | 376 --- .../file/UnixRemovableDriveMonitorTest.java | 99 - .../plugins/socket/LanSocketClientTest.java | 44 - .../plugins/socket/LanSocketServerTest.java | 31 - .../socket/SimpleSocketPluginTest.java | 140 -- .../sf/briar/plugins/tor/TorPluginTest.java | 180 -- test/net/sf/briar/protocol/AckReaderTest.java | 124 - .../sf/briar/protocol/BatchReaderTest.java | 137 -- test/net/sf/briar/protocol/ConstantsTest.java | 193 -- test/net/sf/briar/protocol/ConsumersTest.java | 105 - .../sf/briar/protocol/OfferReaderTest.java | 124 - .../protocol/ProtocolIntegrationTest.java | 133 -- .../protocol/ProtocolWriterImplTest.java | 87 - .../sf/briar/protocol/RequestReaderTest.java | 146 -- .../protocol/UnverifiedBatchImplTest.java | 244 -- .../OutgoingSimplexConnectionTest.java | 176 -- .../SimplexProtocolIntegrationTest.java | 223 -- .../simplex/TestSimplexTransportReader.java | 39 - .../simplex/TestSimplexTransportWriter.java | 48 - test/net/sf/briar/serial/ReaderImplTest.java | 556 ----- test/net/sf/briar/serial/WriterImplTest.java | 291 --- .../transport/ConnectionReaderImplTest.java | 107 - .../transport/ConnectionRegistryImplTest.java | 73 - .../briar/transport/ConnectionWindowTest.java | 157 -- .../transport/ConnectionWriterImplTest.java | 124 - .../IncomingEncryptionLayerTest.java | 183 -- .../OutgoingEncryptionLayerTest.java | 159 -- .../transport/TransportIntegrationTest.java | 173 -- test/net/sf/briar/util/ByteUtilsTest.java | 66 - test/net/sf/briar/util/FileUtilsTest.java | 165 -- test/net/sf/briar/util/StringUtilsTest.java | 44 - test/net/sf/briar/util/ZipUtilsTest.java | 202 -- 132 files changed, 1651 insertions(+), 11702 deletions(-) create mode 100644 AndroidManifest.xml create mode 100644 android.jar create mode 100644 ant.properties delete mode 100644 build-common.xml delete mode 100644 dependencies.xml delete mode 100644 libs/test/hamcrest-core-1.1.jar delete mode 100644 libs/test/hamcrest-library-1.1.jar delete mode 100644 libs/test/jmock-2.5.1.jar delete mode 100644 libs/test/junit-4.9b3.jar create mode 100644 proguard-project.txt create mode 100644 project.properties create mode 100644 res/values/strings.xml create mode 100644 src/net/sf/briar/HelloWorldActivity.java create mode 100644 src/net/sf/briar/HelloWorldModule.java create mode 100644 src/net/sf/briar/HelloWorldService.java create mode 100644 src/net/sf/briar/android/AndroidExecutorImpl.java create mode 100644 src/net/sf/briar/android/AndroidModule.java create mode 100644 src/net/sf/briar/api/android/AndroidExecutor.java create mode 100644 src/net/sf/briar/api/db/DatabaseConfig.java delete mode 100644 src/net/sf/briar/api/db/DatabaseDirectory.java delete mode 100644 src/net/sf/briar/api/db/DatabaseMaxSize.java delete mode 100644 src/net/sf/briar/api/db/DatabasePassword.java create mode 100644 src/net/sf/briar/api/db/DbClosedException.java rename src/net/sf/briar/api/{db => transport}/ContactTransport.java (96%) rename src/net/sf/briar/api/{db => transport}/TemporarySecret.java (97%) rename src/net/sf/briar/{api => }/db/Status.java (83%) delete mode 100644 src/net/sf/briar/plugins/bluetooth/AbstractListener.java delete mode 100644 src/net/sf/briar/plugins/bluetooth/ConnectionCallback.java delete mode 100644 src/net/sf/briar/plugins/bluetooth/ContactListener.java create mode 100644 src/net/sf/briar/plugins/droidtooth/DroidtoothPlugin.java create mode 100644 src/net/sf/briar/plugins/droidtooth/DroidtoothPluginFactory.java create mode 100644 src/net/sf/briar/plugins/droidtooth/DroidtoothTransportConnection.java create mode 100644 src/net/sf/briar/plugins/droidtooth/InsecureBluetooth.java delete mode 100644 test/build.xml delete mode 100644 test/net/sf/briar/BriarTestCase.java delete mode 100644 test/net/sf/briar/LockFairnessTest.java delete mode 100644 test/net/sf/briar/ProtocolIntegrationTest.java delete mode 100644 test/net/sf/briar/TestDatabaseModule.java delete mode 100644 test/net/sf/briar/TestUtils.java delete mode 100644 test/net/sf/briar/crypto/CounterModeTest.java delete mode 100644 test/net/sf/briar/crypto/ErasableKeyTest.java delete mode 100644 test/net/sf/briar/crypto/KeyAgreementTest.java delete mode 100644 test/net/sf/briar/crypto/KeyDerivationTest.java delete mode 100644 test/net/sf/briar/db/BasicH2Test.java delete mode 100644 test/net/sf/briar/db/DatabaseCleanerImplTest.java delete mode 100644 test/net/sf/briar/db/DatabaseComponentImplTest.java delete mode 100644 test/net/sf/briar/db/DatabaseComponentTest.java delete mode 100644 test/net/sf/briar/db/H2DatabaseTest.java delete mode 100644 test/net/sf/briar/db/TestGroup.java delete mode 100644 test/net/sf/briar/db/TestGroupFactory.java delete mode 100644 test/net/sf/briar/db/TestMessage.java delete mode 100644 test/net/sf/briar/lifecycle/ShutdownManagerImplTest.java delete mode 100644 test/net/sf/briar/lifecycle/WindowsShutdownManagerImplTest.java delete mode 100644 test/net/sf/briar/plugins/DuplexClientTest.java delete mode 100644 test/net/sf/briar/plugins/DuplexServerTest.java delete mode 100644 test/net/sf/briar/plugins/DuplexTest.java delete mode 100644 test/net/sf/briar/plugins/ImmediateExecutor.java delete mode 100644 test/net/sf/briar/plugins/PluginManagerImplTest.java delete mode 100644 test/net/sf/briar/plugins/bluetooth/BluetoothClientTest.java delete mode 100644 test/net/sf/briar/plugins/bluetooth/BluetoothServerTest.java delete mode 100644 test/net/sf/briar/plugins/bluetooth/BluetoothTest.java delete mode 100644 test/net/sf/briar/plugins/email/GmailPluginTest.java delete mode 100644 test/net/sf/briar/plugins/file/LinuxRemovableDriveFinderTest.java delete mode 100644 test/net/sf/briar/plugins/file/MacRemovableDriveFinderTest.java delete mode 100644 test/net/sf/briar/plugins/file/PollingRemovableDriveMonitorTest.java delete mode 100644 test/net/sf/briar/plugins/file/RemovableDrivePluginTest.java delete mode 100644 test/net/sf/briar/plugins/file/UnixRemovableDriveMonitorTest.java delete mode 100644 test/net/sf/briar/plugins/socket/LanSocketClientTest.java delete mode 100644 test/net/sf/briar/plugins/socket/LanSocketServerTest.java delete mode 100644 test/net/sf/briar/plugins/socket/SimpleSocketPluginTest.java delete mode 100644 test/net/sf/briar/plugins/tor/TorPluginTest.java delete mode 100644 test/net/sf/briar/protocol/AckReaderTest.java delete mode 100644 test/net/sf/briar/protocol/BatchReaderTest.java delete mode 100644 test/net/sf/briar/protocol/ConstantsTest.java delete mode 100644 test/net/sf/briar/protocol/ConsumersTest.java delete mode 100644 test/net/sf/briar/protocol/OfferReaderTest.java delete mode 100644 test/net/sf/briar/protocol/ProtocolIntegrationTest.java delete mode 100644 test/net/sf/briar/protocol/ProtocolWriterImplTest.java delete mode 100644 test/net/sf/briar/protocol/RequestReaderTest.java delete mode 100644 test/net/sf/briar/protocol/UnverifiedBatchImplTest.java delete mode 100644 test/net/sf/briar/protocol/simplex/OutgoingSimplexConnectionTest.java delete mode 100644 test/net/sf/briar/protocol/simplex/SimplexProtocolIntegrationTest.java delete mode 100644 test/net/sf/briar/protocol/simplex/TestSimplexTransportReader.java delete mode 100644 test/net/sf/briar/protocol/simplex/TestSimplexTransportWriter.java delete mode 100644 test/net/sf/briar/serial/ReaderImplTest.java delete mode 100644 test/net/sf/briar/serial/WriterImplTest.java delete mode 100644 test/net/sf/briar/transport/ConnectionReaderImplTest.java delete mode 100644 test/net/sf/briar/transport/ConnectionRegistryImplTest.java delete mode 100644 test/net/sf/briar/transport/ConnectionWindowTest.java delete mode 100644 test/net/sf/briar/transport/ConnectionWriterImplTest.java delete mode 100644 test/net/sf/briar/transport/IncomingEncryptionLayerTest.java delete mode 100644 test/net/sf/briar/transport/OutgoingEncryptionLayerTest.java delete mode 100644 test/net/sf/briar/transport/TransportIntegrationTest.java delete mode 100644 test/net/sf/briar/util/ByteUtilsTest.java delete mode 100644 test/net/sf/briar/util/FileUtilsTest.java delete mode 100644 test/net/sf/briar/util/StringUtilsTest.java delete mode 100644 test/net/sf/briar/util/ZipUtilsTest.java diff --git a/.classpath b/.classpath index 18857aff7..a4763d1ee 100644 --- a/.classpath +++ b/.classpath @@ -1,25 +1,8 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + diff --git a/.gitignore b/.gitignore index e57536479..1a6498b3f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ -/windows-jre -/Briar -/bin +bin +gen +local.properties diff --git a/.project b/.project index 69fc6e96b..401ff926e 100644 --- a/.project +++ b/.project @@ -1,17 +1,33 @@ - - - prototype - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - + + + prototype + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/AndroidManifest.xml b/AndroidManifest.xml new file mode 100644 index 000000000..f66bdf555 --- /dev/null +++ b/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + diff --git a/android.jar b/android.jar new file mode 100644 index 0000000000000000000000000000000000000000..15ee285f0e9773f20e87be86593a79c54a67a0db GIT binary patch literal 18382981 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