├── test-shared ├── .gitignore ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── ustadmobile │ │ └── meshrabiya │ │ ├── test │ │ ├── FileAssert.kt │ │ ├── TemporaryFolderExt.kt │ │ ├── ByteArrayAssert.kt │ │ ├── VirtualNodeExt.kt │ │ ├── FileEchoSocketServer.kt │ │ ├── TestVirtualNode.kt │ │ ├── EchoDatagramServer.kt │ │ └── VirtualPacketTestUtil.kt │ │ └── FileExt.kt ├── proguard-rules.pro └── build.gradle ├── lib-meshrabiya ├── .gitignore ├── consumer-rules.pro ├── src │ ├── test │ │ ├── resources │ │ │ └── mockito-extensions │ │ │ │ └── org.mockito.plugins.MockMaker │ │ └── java │ │ │ └── com │ │ │ └── ustadmobile │ │ │ └── meshrabiya │ │ │ ├── vnet │ │ │ ├── VirtualNodeSharedTest.kt │ │ │ ├── VirtualPacketHeaderTest.kt │ │ │ ├── wifi │ │ │ │ ├── HotspotResponseTest.kt │ │ │ │ └── WifiConnectConfigTest.kt │ │ │ ├── MeshrabiyaConnectLinkTest.kt │ │ │ ├── VirtualPacketStreamTest.kt │ │ │ ├── VirtualNodeTest.kt │ │ │ ├── VirtualNodeDatagramSocketTest.kt │ │ │ └── VirtualPacketTest.kt │ │ │ ├── mmcp │ │ │ ├── MmcpPongTest.kt │ │ │ ├── MmcpMessageTest.kt │ │ │ ├── MmcpHotspotResponseTest.kt │ │ │ └── MmcpOriginatorMessageTest.kt │ │ │ ├── ext │ │ │ ├── IntExtTest.kt │ │ │ └── ByteArrayExtTest.kt │ │ │ ├── util │ │ │ └── UuidMaskUtilTest.kt │ │ │ └── portforward │ │ │ └── ForwardingTest.kt │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── ustadmobile │ │ │ │ └── meshrabiya │ │ │ │ ├── vnet │ │ │ │ ├── Protocol.kt │ │ │ │ ├── wifi │ │ │ │ │ ├── WifiConnectException.kt │ │ │ │ │ ├── LocalHotspotRequest.kt │ │ │ │ │ ├── WifiDirectException.kt │ │ │ │ │ ├── DnsSdResponse.kt │ │ │ │ │ ├── HotspotStatus.kt │ │ │ │ │ ├── state │ │ │ │ │ │ ├── WifiDirectState.kt │ │ │ │ │ │ ├── LocalOnlyHotspotState.kt │ │ │ │ │ │ ├── WifiStationState.kt │ │ │ │ │ │ └── MeshrabiyaWifiState.kt │ │ │ │ │ ├── WifiConnectEvent.kt │ │ │ │ │ ├── MeshrabiyaWifiManager.kt │ │ │ │ │ ├── WifiDirectError.kt │ │ │ │ │ ├── WifiP2pFailure.kt │ │ │ │ │ ├── WifiP2pActionListenerAdapter.kt │ │ │ │ │ ├── ConnectBand.kt │ │ │ │ │ ├── HotspotType.kt │ │ │ │ │ ├── HotspotPersistenceType.kt │ │ │ │ │ └── LocalHotspotResponse.kt │ │ │ │ ├── WifiRole.kt │ │ │ │ ├── bluetooth │ │ │ │ │ ├── MeshrabiyaBluetoothState.kt │ │ │ │ │ └── MeshrabiyaBluetoothManager.kt │ │ │ │ ├── PongListener.kt │ │ │ │ ├── socket │ │ │ │ │ ├── ChainSocketNextHop.kt │ │ │ │ │ ├── ChainSocketFactory.kt │ │ │ │ │ ├── ChainSocketInitResponse.kt │ │ │ │ │ ├── ChainSocketExt.kt │ │ │ │ │ ├── ChainSocketInitRequest.kt │ │ │ │ │ ├── ChainSocket.kt │ │ │ │ │ └── ChainSocketFactoryImpl.kt │ │ │ │ ├── ISocket.kt │ │ │ │ ├── NodeConfig.kt │ │ │ │ ├── datagram │ │ │ │ │ ├── VirtualDatagramSocketImplFactory.kt │ │ │ │ │ └── VirtualDatagramSocket2.kt │ │ │ │ ├── LocalNodeState.kt │ │ │ │ ├── BluetoothSocketISocketAdapter.kt │ │ │ │ ├── VirtualNodeReturnPathSocketFactory.kt │ │ │ │ ├── VirtualRouter.kt │ │ │ │ ├── quic │ │ │ │ │ └── CertGenerator.kt │ │ │ │ ├── VirtualNodeDatagramSocket.kt │ │ │ │ ├── MeshrabiyaConnectLink.kt │ │ │ │ └── VirtualPacketHeader.kt │ │ │ │ ├── util │ │ │ │ ├── ByteArrayUtil.kt │ │ │ │ ├── RandomString.kt │ │ │ │ ├── FindFreePort.kt │ │ │ │ ├── FileSerializer.kt │ │ │ │ ├── InetAddressSerializer.kt │ │ │ │ └── UuidMaskUtil.kt │ │ │ │ ├── RemoteEndpoint.kt │ │ │ │ ├── server │ │ │ │ └── OnUuidAllocatedListener.kt │ │ │ │ ├── MeshrabiyaConstants.kt │ │ │ │ ├── ext │ │ │ │ ├── WifiConfigurationExt.kt │ │ │ │ ├── ContextExt.kt │ │ │ │ ├── LinkPropertiesExt.kt │ │ │ │ ├── Inet6AddressExt.kt │ │ │ │ ├── WifiP2pConfigExt.kt │ │ │ │ ├── KeyPairExt.kt │ │ │ │ ├── X509CertificateExt.kt │ │ │ │ ├── CompanionDeviceManagerExt.kt │ │ │ │ ├── ListExt.kt │ │ │ │ ├── EnumerationExt.kt │ │ │ │ ├── IntExt.kt │ │ │ │ ├── WifiManagerExt.kt │ │ │ │ ├── WifiP2pGroupExt.kt │ │ │ │ ├── OutputStreamExt.kt │ │ │ │ ├── SoftApConfigurationExt.kt │ │ │ │ ├── ByteArrayExt.kt │ │ │ │ ├── InetAddressExt.kt │ │ │ │ └── ByteBufferExt.kt │ │ │ │ ├── portforward │ │ │ │ ├── ReturnPathSocketFactory.kt │ │ │ │ └── ForwardBindPoint.kt │ │ │ │ ├── mmcp │ │ │ │ ├── MmcpMessageAndPacketHeader.kt │ │ │ │ ├── MmcpPing.kt │ │ │ │ ├── MmcpHeader.kt │ │ │ │ ├── MmcpPong.kt │ │ │ │ ├── MmcpHotspotResponse.kt │ │ │ │ ├── MmcpAck.kt │ │ │ │ └── MmcpHotspotRequest.kt │ │ │ │ ├── client │ │ │ │ └── BluetoothHttpResponse.kt │ │ │ │ ├── UuidUtil.kt │ │ │ │ └── log │ │ │ │ ├── LogLine.kt │ │ │ │ ├── MNetLogger.kt │ │ │ │ └── MNetLoggerStdout.kt │ │ └── AndroidManifest.xml │ └── androidTest │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── ustadmobile │ │ └── httpoverbluetooth │ │ └── VirtualNodeSharedTest.kt ├── proguard-rules.pro └── build.gradle ├── test-app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── values │ │ │ │ ├── strings.xml │ │ │ │ ├── themes.xml │ │ │ │ └── colors.xml │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── xml │ │ │ │ └── filepaths.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ └── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── ustadmobile │ │ │ │ └── meshrabiya │ │ │ │ └── testapp │ │ │ │ ├── viewmodel │ │ │ │ ├── SnackbarMessage.kt │ │ │ │ ├── InfoViewModel.kt │ │ │ │ ├── SendFileViewModel.kt │ │ │ │ ├── LogListViewModel.kt │ │ │ │ ├── ReceiveViewModel.kt │ │ │ │ ├── NeighborNodeListViewModel.kt │ │ │ │ └── SelectDestNodeViewModel.kt │ │ │ │ ├── appstate │ │ │ │ ├── AppUiState.kt │ │ │ │ └── FabState.kt │ │ │ │ ├── theme │ │ │ │ ├── Color.kt │ │ │ │ ├── Type.kt │ │ │ │ └── Theme.kt │ │ │ │ ├── ext │ │ │ │ ├── ListExt.kt │ │ │ │ └── ContentResolverExt.kt │ │ │ │ ├── screens │ │ │ │ ├── OpenSourceLicensesScreen.kt │ │ │ │ ├── SendFileScreen.kt │ │ │ │ ├── SelectDestNodeScreen.kt │ │ │ │ └── NeighborNodeListScreen.kt │ │ │ │ ├── ScanQrCodeContract.kt │ │ │ │ ├── ViewModelFactory.kt │ │ │ │ ├── server │ │ │ │ └── InputStreamCounter.kt │ │ │ │ ├── ContextExt.kt │ │ │ │ └── MNetLoggerAndroid.kt │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── ustadmobile │ │ │ └── test_app │ │ │ └── ExampleUnitTest.kt │ └── androidTest │ │ └── java │ │ └── com │ │ └── ustadmobile │ │ └── test_app │ │ └── ExampleInstrumentedTest.kt └── proguard-rules.pro ├── .idea ├── .gitignore ├── compiler.xml ├── kotlinc.xml ├── vcs.xml ├── misc.xml ├── gradle.xml └── inspectionProfiles │ └── Project_Default.xml ├── doc ├── mesh.png └── mesh-image-attrib.txt ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── settings.gradle ├── gradle.properties └── gradlew.bat /test-shared/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib-meshrabiya/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lib-meshrabiya/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test-app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /release 3 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /doc/mesh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UstadMobile/Meshrabiya/HEAD/doc/mesh.png -------------------------------------------------------------------------------- /doc/mesh-image-attrib.txt: -------------------------------------------------------------------------------- 1 | https://pixabay.com/no/illustrations/textura-modell-tekstur-design-3557036/ 2 | -------------------------------------------------------------------------------- /lib-meshrabiya/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker: -------------------------------------------------------------------------------- 1 | mock-maker-inline 2 | -------------------------------------------------------------------------------- /test-app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Meshrabiya 3 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UstadMobile/Meshrabiya/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /test-app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UstadMobile/Meshrabiya/HEAD/test-app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /test-app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UstadMobile/Meshrabiya/HEAD/test-app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /test-app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UstadMobile/Meshrabiya/HEAD/test-app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /test-app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UstadMobile/Meshrabiya/HEAD/test-app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /lib-meshrabiya/src/main/java/com/ustadmobile/meshrabiya/vnet/Protocol.kt: -------------------------------------------------------------------------------- 1 | package com.ustadmobile.meshrabiya.vnet 2 | 3 | enum class Protocol { 4 | UDP, TCP 5 | } -------------------------------------------------------------------------------- /test-app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UstadMobile/Meshrabiya/HEAD/test-app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /test-app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UstadMobile/Meshrabiya/HEAD/test-app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /test-app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UstadMobile/Meshrabiya/HEAD/test-app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /test-app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UstadMobile/Meshrabiya/HEAD/test-app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /test-app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UstadMobile/Meshrabiya/HEAD/test-app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /test-app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UstadMobile/Meshrabiya/HEAD/test-app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /test-shared/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /lib-meshrabiya/src/test/java/com/ustadmobile/meshrabiya/vnet/VirtualNodeSharedTest.kt: -------------------------------------------------------------------------------- 1 | package com.ustadmobile.meshrabiya.vnet 2 | 3 | class VirtualNodeSharedTest: VirtualNodeIntegrationTest() { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /test-app/src/main/java/com/ustadmobile/meshrabiya/testapp/viewmodel/SnackbarMessage.kt: -------------------------------------------------------------------------------- 1 | package com.ustadmobile.meshrabiya.testapp.viewmodel 2 | 3 | class SnackbarMessage( 4 | val message: String, 5 | ) { 6 | } -------------------------------------------------------------------------------- /lib-meshrabiya/src/main/java/com/ustadmobile/meshrabiya/vnet/wifi/WifiConnectException.kt: -------------------------------------------------------------------------------- 1 | package com.ustadmobile.meshrabiya.vnet.wifi 2 | 3 | class WifiConnectException(message: String): Exception(message) { 4 | } -------------------------------------------------------------------------------- /test-app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |