From 2792fc6d62cf3ad57a22978eab63a7f21cdc5d58 Mon Sep 17 00:00:00 2001 From: Abdul Mannan Date: Sat, 2 Apr 2022 04:13:29 +0500 Subject: [PATCH] Bug Fixes Bug Fixes --- .idea/deploymentTargetDropDown.xml | 17 - app/build.gradle | 71 +- app/google-services.json | 40 - app/libs/mopub-sdk-5.17.0.aar | Bin 15244 -> 0 bytes .../ExampleInstrumentedTest.kt | 24 - app/src/main/AndroidManifest.xml | 119 +- .../homeManager/geckoManager/config.yaml | 56 + .../geckoManager/geckoClients.java | 42 +- .../geckoManager/geckoDownloadManager.java | 4 +- .../geckoManager/geckoSession.java | 23 +- .../homeController/homeController.java | 7 +- .../homeController/homeViewController.java | 19 +- .../onionservices/constants/constants.java | 2 +- .../onionservices/constants/enums.java | 2 +- .../helperManager/helperMethod.java | 75 +- .../adPluginManager/admobManager.java | 0 ...mopubManager.java => appLovinManager.java} | 39 +- .../adPluginManager/facebookAdsManager.java | 85 - .../downloadPluginManager/blobDownloader.java | 21 +- .../downloadManager.java | 66 +- .../downloadReciever.java | 355 +- .../downloadService.java | 30 +- .../messagePluginManager/messageManager.java | 3 +- .../orbotPluginManager/orbotManager.java | 6 +- .../pluginManager/pluginController.java | 47 +- .../pluginManager/pluginEnums.java | 6 +- .../downloadNotificationReciever.java | 9 +- .../custom-xml/generic/xml/provider_paths.xml | 5 +- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-ca/strings.xml | 2 +- app/src/main/res/values-ch/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-el/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-ja-rJP/strings.xml | 2 +- app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-ro/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-th/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-ur/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- app/variables.gradle | 2 +- build.gradle | 44 +- docs/GSoC.txt | 45 - docs/WALKTHROUGH | 85 - docs/featuregraphic.xcf | Bin 1316429 -> 0 bytes docs/onionroots.xcf | Bin 1748142 -> 0 bytes docs/orbotnewicons.xcf | Bin 1118257 -> 0 bytes external/badvpn/Android.mk | 77 - external/badvpn/CMakeLists.txt | 408 -- external/badvpn/COPYING | 24 - external/badvpn/ChangeLog | 216 - external/badvpn/INSTALL | 76 - external/badvpn/INSTALL-WINDOWS | 72 - external/badvpn/arpprobe/BArpProbe.c | 359 -- external/badvpn/arpprobe/BArpProbe.h | 80 - external/badvpn/arpprobe/CMakeLists.txt | 1 - external/badvpn/badvpn.7 | 324 -- external/badvpn/base/BLog.c | 96 - external/badvpn/base/BLog.h | 402 -- external/badvpn/base/BLog_syslog.c | 150 - external/badvpn/base/BLog_syslog.h | 42 - external/badvpn/base/BMutex.h | 101 - external/badvpn/base/BPending.c | 205 - external/badvpn/base/BPending.h | 250 - external/badvpn/base/BPending_list.h | 4 - external/badvpn/base/CMakeLists.txt | 13 - external/badvpn/base/DebugObject.c | 39 - external/badvpn/base/DebugObject.h | 147 - external/badvpn/blog_channels.txt | 145 - external/badvpn/blog_generator/blog.php | 121 - .../badvpn/blog_generator/blog_functions.php | 35 - external/badvpn/bproto/BProto.h | 85 - .../badvpn/bproto_generator/ProtoParser.lime | 99 - .../badvpn/bproto_generator/ProtoParser.php | 560 -- external/badvpn/bproto_generator/bproto.php | 115 - .../bproto_generator/bproto_functions.php | 777 --- external/badvpn/client/CMakeLists.txt | 30 - external/badvpn/client/DPReceive.c | 324 -- external/badvpn/client/DPReceive.h | 98 - external/badvpn/client/DPRelay.c | 307 -- external/badvpn/client/DPRelay.h | 89 - external/badvpn/client/DataProto.c | 566 -- external/badvpn/client/DataProto.h | 237 - .../badvpn/client/DataProtoKeepaliveSource.c | 72 - .../badvpn/client/DataProtoKeepaliveSource.h | 73 - external/badvpn/client/DatagramPeerIO.c | 425 -- external/badvpn/client/DatagramPeerIO.h | 271 - .../badvpn/client/FragmentProtoAssembler.c | 469 -- .../badvpn/client/FragmentProtoAssembler.h | 134 - .../client/FragmentProtoAssembler_tree.h | 9 - .../badvpn/client/FragmentProtoDisassembler.c | 229 - .../badvpn/client/FragmentProtoDisassembler.h | 109 - external/badvpn/client/FrameDecider.c | 795 --- external/badvpn/client/FrameDecider.h | 196 - .../badvpn/client/FrameDecider_groups_tree.h | 9 - .../badvpn/client/FrameDecider_macs_tree.h | 9 - .../client/FrameDecider_multicast_tree.h | 9 - external/badvpn/client/PasswordListener.c | 374 -- external/badvpn/client/PasswordListener.h | 156 - external/badvpn/client/PeerChat.c | 433 -- external/badvpn/client/PeerChat.h | 123 - external/badvpn/client/SCOutmsgEncoder.c | 104 - external/badvpn/client/SCOutmsgEncoder.h | 76 - external/badvpn/client/SPProtoDecoder.c | 398 -- external/badvpn/client/SPProtoDecoder.h | 171 - external/badvpn/client/SPProtoEncoder.c | 436 -- external/badvpn/client/SPProtoEncoder.h | 172 - external/badvpn/client/SimpleStreamBuffer.c | 144 - external/badvpn/client/SimpleStreamBuffer.h | 52 - external/badvpn/client/SinglePacketSource.c | 85 - external/badvpn/client/SinglePacketSource.h | 73 - external/badvpn/client/StreamPeerIO.c | 712 --- external/badvpn/client/StreamPeerIO.h | 222 - external/badvpn/client/badvpn-client.8 | 316 -- external/badvpn/client/client.c | 2997 ---------- external/badvpn/client/client.h | 193 - .../cmake/modules/COPYING-CMAKE-SCRIPTS | 22 - external/badvpn/cmake/modules/FindGLIB2.cmake | 52 - .../cmake/modules/FindLibraryWithDebug.cmake | 113 - external/badvpn/cmake/modules/FindNSPR.cmake | 57 - external/badvpn/cmake/modules/FindNSS.cmake | 57 - .../badvpn/cmake/modules/FindOpenSSL.cmake | 72 - external/badvpn/compile-tun2sock.sh | 112 - external/badvpn/compile-udpgw.sh | 84 - external/badvpn/dhcpclient/BDHCPClient.c | 340 -- external/badvpn/dhcpclient/BDHCPClient.h | 87 - external/badvpn/dhcpclient/BDHCPClientCore.c | 860 --- external/badvpn/dhcpclient/BDHCPClientCore.h | 114 - external/badvpn/dhcpclient/CMakeLists.txt | 10 - external/badvpn/dhcpclient/DHCPIpUdpDecoder.c | 137 - external/badvpn/dhcpclient/DHCPIpUdpDecoder.h | 49 - external/badvpn/dhcpclient/DHCPIpUdpEncoder.c | 119 - external/badvpn/dhcpclient/DHCPIpUdpEncoder.h | 49 - external/badvpn/dostest/CMakeLists.txt | 10 - external/badvpn/dostest/StreamBuffer.c | 147 - external/badvpn/dostest/StreamBuffer.h | 70 - external/badvpn/dostest/dostest-attacker.c | 512 -- external/badvpn/dostest/dostest-server.c | 567 -- external/badvpn/examples/CMakeLists.txt | 97 - external/badvpn/examples/FastPacketSource.h | 79 - external/badvpn/examples/RandomPacketSink.h | 116 - external/badvpn/examples/TimerPacketSink.h | 97 - external/badvpn/examples/arpprobe_test.c | 131 - external/badvpn/examples/bavl_test.c | 129 - external/badvpn/examples/bencryption_bench.c | 146 - external/badvpn/examples/bprocess_example.c | 140 - external/badvpn/examples/brandom2_test.c | 65 - external/badvpn/examples/btimer_example.c | 84 - external/badvpn/examples/cavl_test.c | 285 - external/badvpn/examples/cavl_test_tree.h | 23 - external/badvpn/examples/dhcpclient_test.c | 159 - external/badvpn/examples/emscripten_test.c | 71 - external/badvpn/examples/fairqueue_test.c | 145 - external/badvpn/examples/fairqueue_test2.c | 93 - external/badvpn/examples/indexedlist_test.c | 95 - external/badvpn/examples/ipaddr6_test.c | 169 - external/badvpn/examples/ncd_parser_test.c | 294 - external/badvpn/examples/ncd_tokenizer_test.c | 149 - .../badvpn/examples/ncd_value_parser_test.c | 78 - .../examples/ncdinterfacemonitor_test.c | 150 - .../badvpn/examples/ncdudevmanager_test.c | 161 - .../badvpn/examples/ncdudevmonitor_test.c | 152 - external/badvpn/examples/ncdval_test.c | 380 -- external/badvpn/examples/ncdvalcons_test.c | 111 - external/badvpn/examples/parse_number_test.c | 130 - external/badvpn/examples/predicate_test.c | 116 - external/badvpn/examples/savl_test.c | 135 - external/badvpn/examples/savl_test_tree.h | 9 - external/badvpn/examples/stdin_input.c | 138 - external/badvpn/examples/substring_test.c | 204 - external/badvpn/fix_flex.php | 10 - external/badvpn/flooder/CMakeLists.txt | 7 - external/badvpn/flooder/flooder.c | 671 --- external/badvpn/flooder/flooder.h | 37 - external/badvpn/flow/BufferWriter.c | 112 - external/badvpn/flow/BufferWriter.h | 107 - external/badvpn/flow/CMakeLists.txt | 31 - external/badvpn/flow/LineBuffer.c | 140 - external/badvpn/flow/LineBuffer.h | 54 - external/badvpn/flow/PacketBuffer.c | 131 - external/badvpn/flow/PacketBuffer.h | 77 - external/badvpn/flow/PacketCopier.c | 136 - external/badvpn/flow/PacketCopier.h | 90 - external/badvpn/flow/PacketPassConnector.c | 125 - external/badvpn/flow/PacketPassConnector.h | 102 - external/badvpn/flow/PacketPassFairQueue.c | 405 -- external/badvpn/flow/PacketPassFairQueue.h | 204 - .../badvpn/flow/PacketPassFairQueue_tree.h | 7 - external/badvpn/flow/PacketPassFifoQueue.c | 241 - external/badvpn/flow/PacketPassFifoQueue.h | 76 - external/badvpn/flow/PacketPassInterface.c | 68 - external/badvpn/flow/PacketPassInterface.h | 236 - external/badvpn/flow/PacketPassNotifier.c | 103 - external/badvpn/flow/PacketPassNotifier.h | 99 - .../badvpn/flow/PacketPassPriorityQueue.c | 283 - .../badvpn/flow/PacketPassPriorityQueue.h | 192 - .../flow/PacketPassPriorityQueue_tree.h | 7 - external/badvpn/flow/PacketProtoDecoder.c | 182 - external/badvpn/flow/PacketProtoDecoder.h | 96 - external/badvpn/flow/PacketProtoEncoder.c | 101 - external/badvpn/flow/PacketProtoEncoder.h | 80 - external/badvpn/flow/PacketProtoFlow.c | 82 - external/badvpn/flow/PacketProtoFlow.h | 83 - external/badvpn/flow/PacketRecvBlocker.c | 99 - external/badvpn/flow/PacketRecvBlocker.h | 90 - external/badvpn/flow/PacketRecvConnector.c | 123 - external/badvpn/flow/PacketRecvConnector.h | 102 - external/badvpn/flow/PacketRecvInterface.c | 56 - external/badvpn/flow/PacketRecvInterface.h | 170 - external/badvpn/flow/PacketRouter.c | 129 - external/badvpn/flow/PacketRouter.h | 126 - external/badvpn/flow/PacketStreamSender.c | 111 - external/badvpn/flow/PacketStreamSender.h | 83 - external/badvpn/flow/RouteBuffer.c | 256 - external/badvpn/flow/RouteBuffer.h | 139 - external/badvpn/flow/SinglePacketBuffer.c | 87 - external/badvpn/flow/SinglePacketBuffer.h | 75 - external/badvpn/flow/SinglePacketSender.c | 72 - external/badvpn/flow/SinglePacketSender.h | 82 - external/badvpn/flow/SingleStreamReceiver.c | 82 - external/badvpn/flow/SingleStreamReceiver.h | 53 - external/badvpn/flow/SingleStreamSender.c | 82 - external/badvpn/flow/SingleStreamSender.h | 53 - external/badvpn/flow/StreamPacketSender.c | 90 - external/badvpn/flow/StreamPacketSender.h | 77 - external/badvpn/flow/StreamPassConnector.c | 120 - external/badvpn/flow/StreamPassConnector.h | 98 - external/badvpn/flow/StreamPassInterface.c | 56 - external/badvpn/flow/StreamPassInterface.h | 165 - external/badvpn/flow/StreamRecvConnector.c | 120 - external/badvpn/flow/StreamRecvConnector.h | 98 - external/badvpn/flow/StreamRecvInterface.c | 56 - external/badvpn/flow/StreamRecvInterface.h | 165 - external/badvpn/flowextra/CMakeLists.txt | 5 - external/badvpn/flowextra/KeepaliveIO.c | 112 - external/badvpn/flowextra/KeepaliveIO.h | 88 - .../flowextra/PacketPassInactivityMonitor.c | 131 - .../flowextra/PacketPassInactivityMonitor.h | 124 - external/badvpn/generate_files | 51 - .../badvpn/generated/NCDConfigParser_parse.c | 1890 ------- .../badvpn/generated/NCDConfigParser_parse.h | 22 - .../generated/NCDConfigParser_parse.out | 950 ---- .../badvpn/generated/NCDConfigParser_parse.y | 718 --- .../badvpn/generated/NCDValParser_parse.c | 1119 ---- .../badvpn/generated/NCDValParser_parse.h | 7 - .../badvpn/generated/NCDValParser_parse.out | 217 - .../badvpn/generated/NCDValParser_parse.y | 202 - external/badvpn/generated/bison_BPredicate.c | 2168 -------- external/badvpn/generated/bison_BPredicate.h | 114 - .../badvpn/generated/blog_channel_BArpProbe.h | 4 - .../generated/blog_channel_BConnection.h | 4 - .../generated/blog_channel_BDHCPClient.h | 4 - .../generated/blog_channel_BDHCPClientCore.h | 4 - .../badvpn/generated/blog_channel_BDatagram.h | 4 - .../generated/blog_channel_BEncryption.h | 4 - .../generated/blog_channel_BInputProcess.h | 4 - .../generated/blog_channel_BLockReactor.h | 4 - .../badvpn/generated/blog_channel_BNetwork.h | 4 - .../generated/blog_channel_BPredicate.h | 4 - .../badvpn/generated/blog_channel_BProcess.h | 4 - .../badvpn/generated/blog_channel_BReactor.h | 4 - .../generated/blog_channel_BSSLConnection.h | 4 - .../badvpn/generated/blog_channel_BSignal.h | 4 - .../generated/blog_channel_BSocksClient.h | 4 - external/badvpn/generated/blog_channel_BTap.h | 4 - .../generated/blog_channel_BThreadSignal.h | 4 - .../generated/blog_channel_BThreadWork.h | 4 - .../badvpn/generated/blog_channel_BTime.h | 4 - .../generated/blog_channel_BUnixSignal.h | 4 - .../badvpn/generated/blog_channel_DPReceive.h | 4 - .../badvpn/generated/blog_channel_DPRelay.h | 4 - .../badvpn/generated/blog_channel_DataProto.h | 4 - .../generated/blog_channel_DatagramPeerIO.h | 4 - .../blog_channel_FragmentProtoAssembler.h | 4 - .../generated/blog_channel_FrameDecider.h | 4 - .../generated/blog_channel_LineBuffer.h | 4 - .../badvpn/generated/blog_channel_Listener.h | 4 - .../generated/blog_channel_NCDBuildProgram.h | 4 - .../generated/blog_channel_NCDConfigParser.h | 4 - .../blog_channel_NCDConfigTokenizer.h | 4 - .../generated/blog_channel_NCDIfConfig.h | 4 - .../blog_channel_NCDInterfaceMonitor.h | 4 - .../generated/blog_channel_NCDModuleIndex.h | 4 - .../generated/blog_channel_NCDModuleProcess.h | 4 - .../generated/blog_channel_NCDPlaceholderDb.h | 4 - .../generated/blog_channel_NCDRequest.h | 4 - .../generated/blog_channel_NCDRequestClient.h | 4 - .../generated/blog_channel_NCDRfkillMonitor.h | 4 - .../generated/blog_channel_NCDUdevCache.h | 4 - .../generated/blog_channel_NCDUdevManager.h | 4 - .../generated/blog_channel_NCDUdevMonitor.h | 4 - .../blog_channel_NCDUdevMonitorParser.h | 4 - .../badvpn/generated/blog_channel_NCDVal.h | 4 - .../generated/blog_channel_NCDValGenerator.h | 4 - .../generated/blog_channel_NCDValParser.h | 4 - .../generated/blog_channel_PRStreamSink.h | 4 - .../generated/blog_channel_PRStreamSource.h | 4 - .../blog_channel_PacketProtoDecoder.h | 4 - .../generated/blog_channel_PasswordListener.h | 4 - .../badvpn/generated/blog_channel_PeerChat.h | 4 - .../generated/blog_channel_SPProtoDecoder.h | 4 - .../generated/blog_channel_ServerConnection.h | 4 - .../generated/blog_channel_SocksUdpGwClient.h | 4 - .../generated/blog_channel_StreamPeerIO.h | 4 - .../generated/blog_channel_UdpGwClient.h | 4 - external/badvpn/generated/blog_channel_addr.h | 4 - .../badvpn/generated/blog_channel_client.h | 4 - .../generated/blog_channel_dostest_attacker.h | 4 - .../generated/blog_channel_dostest_server.h | 4 - .../badvpn/generated/blog_channel_flooder.h | 4 - external/badvpn/generated/blog_channel_lwip.h | 4 - external/badvpn/generated/blog_channel_ncd.h | 4 - .../badvpn/generated/blog_channel_ncd_alias.h | 4 - .../generated/blog_channel_ncd_arithmetic.h | 4 - .../generated/blog_channel_ncd_assert.h | 4 - .../generated/blog_channel_ncd_backtrack.h | 4 - .../generated/blog_channel_ncd_blocker.h | 4 - .../generated/blog_channel_ncd_buffer.h | 4 - .../badvpn/generated/blog_channel_ncd_call2.h | 4 - .../generated/blog_channel_ncd_choose.h | 4 - .../generated/blog_channel_ncd_concat.h | 4 - .../generated/blog_channel_ncd_daemon.h | 4 - .../generated/blog_channel_ncd_depend.h | 4 - .../generated/blog_channel_ncd_depend_scope.h | 4 - .../blog_channel_ncd_dynamic_depend.h | 4 - .../badvpn/generated/blog_channel_ncd_exit.h | 4 - .../generated/blog_channel_ncd_explode.h | 4 - .../badvpn/generated/blog_channel_ncd_file.h | 4 - .../generated/blog_channel_ncd_file_open.h | 4 - .../generated/blog_channel_ncd_foreach.h | 4 - .../generated/blog_channel_ncd_from_string.h | 4 - .../generated/blog_channel_ncd_getargs.h | 4 - .../generated/blog_channel_ncd_getenv.h | 4 - .../badvpn/generated/blog_channel_ncd_if.h | 4 - .../generated/blog_channel_ncd_imperative.h | 4 - .../generated/blog_channel_ncd_implode.h | 4 - .../badvpn/generated/blog_channel_ncd_index.h | 4 - .../badvpn/generated/blog_channel_ncd_list.h | 4 - .../generated/blog_channel_ncd_load_module.h | 4 - .../badvpn/generated/blog_channel_ncd_log.h | 4 - .../generated/blog_channel_ncd_log_msg.h | 4 - .../generated/blog_channel_ncd_logical.h | 4 - .../generated/blog_channel_ncd_multidepend.h | 4 - .../blog_channel_ncd_net_backend_badvpn.h | 4 - .../blog_channel_ncd_net_backend_rfkill.h | 4 - .../blog_channel_ncd_net_backend_waitdevice.h | 4 - .../blog_channel_ncd_net_backend_waitlink.h | 4 - ...g_channel_ncd_net_backend_wpa_supplicant.h | 4 - .../generated/blog_channel_ncd_net_dns.h | 4 - .../generated/blog_channel_ncd_net_iptables.h | 4 - .../blog_channel_ncd_net_ipv4_addr.h | 4 - ...log_channel_ncd_net_ipv4_addr_in_network.h | 4 - .../blog_channel_ncd_net_ipv4_arp_probe.h | 4 - .../blog_channel_ncd_net_ipv4_dhcp.h | 4 - .../blog_channel_ncd_net_ipv4_route.h | 4 - .../blog_channel_ncd_net_ipv6_addr.h | 4 - ...log_channel_ncd_net_ipv6_addr_in_network.h | 4 - .../blog_channel_ncd_net_ipv6_route.h | 4 - ...g_channel_ncd_net_ipv6_wait_dynamic_addr.h | 4 - .../generated/blog_channel_ncd_net_up.h | 4 - .../blog_channel_ncd_net_watch_interfaces.h | 4 - .../generated/blog_channel_ncd_netmask.h | 4 - .../generated/blog_channel_ncd_ondemand.h | 4 - .../badvpn/generated/blog_channel_ncd_parse.h | 4 - .../badvpn/generated/blog_channel_ncd_print.h | 4 - .../blog_channel_ncd_process_manager.h | 4 - .../generated/blog_channel_ncd_reboot.h | 4 - .../badvpn/generated/blog_channel_ncd_ref.h | 4 - .../generated/blog_channel_ncd_regex_match.h | 4 - .../generated/blog_channel_ncd_request.h | 4 - .../badvpn/generated/blog_channel_ncd_run.h | 4 - .../generated/blog_channel_ncd_runonce.h | 4 - .../badvpn/generated/blog_channel_ncd_sleep.h | 4 - .../generated/blog_channel_ncd_socket.h | 4 - .../badvpn/generated/blog_channel_ncd_spawn.h | 4 - .../generated/blog_channel_ncd_strcmp.h | 4 - .../generated/blog_channel_ncd_substr.h | 4 - .../generated/blog_channel_ncd_sys_evdev.h | 4 - .../blog_channel_ncd_sys_request_client.h | 4 - .../blog_channel_ncd_sys_request_server.h | 4 - .../blog_channel_ncd_sys_start_process.h | 4 - .../blog_channel_ncd_sys_watch_directory.h | 4 - .../blog_channel_ncd_sys_watch_input.h | 4 - .../blog_channel_ncd_sys_watch_usb.h | 4 - .../badvpn/generated/blog_channel_ncd_timer.h | 4 - .../generated/blog_channel_ncd_to_string.h | 4 - .../badvpn/generated/blog_channel_ncd_try.h | 4 - .../badvpn/generated/blog_channel_ncd_value.h | 4 - .../generated/blog_channel_ncd_valuemetic.h | 4 - .../badvpn/generated/blog_channel_ncd_var.h | 4 - .../badvpn/generated/blog_channel_nsskey.h | 4 - .../badvpn/generated/blog_channel_server.h | 4 - .../badvpn/generated/blog_channel_tun2socks.h | 4 - .../badvpn/generated/blog_channel_udpgw.h | 4 - .../badvpn/generated/blog_channels_defines.h | 146 - .../badvpn/generated/blog_channels_list.h | 145 - external/badvpn/generated/bproto_addr.h | 675 --- .../badvpn/generated/bproto_bproto_test.h | 1029 ---- external/badvpn/generated/bproto_msgproto.h | 2122 ------- external/badvpn/generated/flex_BPredicate.c | 2143 -------- external/badvpn/generated/flex_BPredicate.h | 350 -- external/badvpn/lemon/lemon.c | 4889 ----------------- external/badvpn/lemon/lempar.c | 842 --- external/badvpn/lime/HOWTO | 70 - external/badvpn/lime/flex_token_stream.php | 34 - external/badvpn/lime/lemon.c | 4588 ---------------- external/badvpn/lime/lime.bootstrap | 31 - external/badvpn/lime/lime.php | 910 --- external/badvpn/lime/lime_scan_tokens.l | 121 - external/badvpn/lime/metagrammar | 58 - external/badvpn/lime/parse_engine.php | 252 - external/badvpn/lime/set.so.php | 29 - external/badvpn/lwip/CHANGELOG | 3396 ------------ external/badvpn/lwip/CMakeLists.txt | 27 - external/badvpn/lwip/COPYING | 33 - external/badvpn/lwip/FILES | 4 - external/badvpn/lwip/README | 89 - external/badvpn/lwip/UPGRADING | 144 - external/badvpn/lwip/custom/arch/cc.h | 96 - external/badvpn/lwip/custom/arch/perf.h | 36 - external/badvpn/lwip/custom/lwipopts.h | 70 - external/badvpn/lwip/custom/sys.c | 37 - external/badvpn/lwip/doc/FILES | 6 - external/badvpn/lwip/doc/contrib.txt | 63 - external/badvpn/lwip/doc/rawapi.txt | 511 -- external/badvpn/lwip/doc/savannah.txt | 135 - external/badvpn/lwip/doc/snmp_agent.txt | 181 - external/badvpn/lwip/doc/sys_arch.txt | 267 - external/badvpn/lwip/lwip-base-version | 1 - external/badvpn/lwip/src/FILES | 13 - external/badvpn/lwip/src/api/api_lib.c | 788 --- external/badvpn/lwip/src/api/api_msg.c | 1610 ------ external/badvpn/lwip/src/api/err.c | 75 - external/badvpn/lwip/src/api/netbuf.c | 245 - external/badvpn/lwip/src/api/netdb.c | 353 -- external/badvpn/lwip/src/api/netifapi.c | 160 - external/badvpn/lwip/src/api/sockets.c | 2555 --------- external/badvpn/lwip/src/api/tcpip.c | 492 -- external/badvpn/lwip/src/core/def.c | 108 - external/badvpn/lwip/src/core/dhcp.c | 1771 ------ external/badvpn/lwip/src/core/dns.c | 988 ---- external/badvpn/lwip/src/core/inet_chksum.c | 545 -- external/badvpn/lwip/src/core/init.c | 345 -- external/badvpn/lwip/src/core/ipv4/autoip.c | 528 -- external/badvpn/lwip/src/core/ipv4/icmp.c | 338 -- external/badvpn/lwip/src/core/ipv4/igmp.c | 805 --- external/badvpn/lwip/src/core/ipv4/ip4.c | 924 ---- external/badvpn/lwip/src/core/ipv4/ip4_addr.c | 312 -- external/badvpn/lwip/src/core/ipv4/ip_frag.c | 863 --- external/badvpn/lwip/src/core/ipv6/README | 1 - external/badvpn/lwip/src/core/ipv6/dhcp6.c | 50 - external/badvpn/lwip/src/core/ipv6/ethip6.c | 193 - external/badvpn/lwip/src/core/ipv6/icmp6.c | 337 -- external/badvpn/lwip/src/core/ipv6/inet6.c | 51 - external/badvpn/lwip/src/core/ipv6/ip6.c | 1034 ---- external/badvpn/lwip/src/core/ipv6/ip6_addr.c | 251 - external/badvpn/lwip/src/core/ipv6/ip6_frag.c | 697 --- external/badvpn/lwip/src/core/ipv6/mld6.c | 580 -- external/badvpn/lwip/src/core/ipv6/nd6.c | 1787 ------ external/badvpn/lwip/src/core/mem.c | 659 --- external/badvpn/lwip/src/core/memp.c | 485 -- external/badvpn/lwip/src/core/netif.c | 918 ---- external/badvpn/lwip/src/core/pbuf.c | 1179 ---- external/badvpn/lwip/src/core/raw.c | 422 -- external/badvpn/lwip/src/core/snmp/asn1_dec.c | 657 --- external/badvpn/lwip/src/core/snmp/asn1_enc.c | 611 -- external/badvpn/lwip/src/core/snmp/mib2.c | 4146 -------------- .../badvpn/lwip/src/core/snmp/mib_structs.c | 1174 ---- external/badvpn/lwip/src/core/snmp/msg_in.c | 1453 ----- external/badvpn/lwip/src/core/snmp/msg_out.c | 678 --- external/badvpn/lwip/src/core/stats.c | 181 - external/badvpn/lwip/src/core/sys.c | 68 - external/badvpn/lwip/src/core/tcp.c | 1852 ------- external/badvpn/lwip/src/core/tcp_in.c | 1666 ------ external/badvpn/lwip/src/core/tcp_out.c | 1499 ----- external/badvpn/lwip/src/core/timers.c | 546 -- external/badvpn/lwip/src/core/udp.c | 1151 ---- .../lwip/src/include/ipv4/lwip/autoip.h | 118 - .../badvpn/lwip/src/include/ipv4/lwip/icmp.h | 125 - .../badvpn/lwip/src/include/ipv4/lwip/igmp.h | 106 - .../badvpn/lwip/src/include/ipv4/lwip/inet.h | 107 - .../badvpn/lwip/src/include/ipv4/lwip/ip4.h | 146 - .../lwip/src/include/ipv4/lwip/ip4_addr.h | 244 - .../lwip/src/include/ipv4/lwip/ip_frag.h | 91 - .../badvpn/lwip/src/include/ipv6/lwip/dhcp6.h | 58 - .../lwip/src/include/ipv6/lwip/ethip6.h | 68 - .../badvpn/lwip/src/include/ipv6/lwip/icmp6.h | 152 - .../badvpn/lwip/src/include/ipv6/lwip/inet6.h | 92 - .../badvpn/lwip/src/include/ipv6/lwip/ip6.h | 197 - .../lwip/src/include/ipv6/lwip/ip6_addr.h | 286 - .../lwip/src/include/ipv6/lwip/ip6_frag.h | 102 - .../badvpn/lwip/src/include/ipv6/lwip/mld6.h | 118 - .../badvpn/lwip/src/include/ipv6/lwip/nd6.h | 369 -- external/badvpn/lwip/src/include/lwip/api.h | 338 -- .../badvpn/lwip/src/include/lwip/api_msg.h | 177 - external/badvpn/lwip/src/include/lwip/arch.h | 217 - external/badvpn/lwip/src/include/lwip/debug.h | 99 - external/badvpn/lwip/src/include/lwip/def.h | 123 - external/badvpn/lwip/src/include/lwip/dhcp.h | 242 - external/badvpn/lwip/src/include/lwip/dns.h | 124 - external/badvpn/lwip/src/include/lwip/err.h | 85 - .../lwip/src/include/lwip/inet_chksum.h | 112 - external/badvpn/lwip/src/include/lwip/init.h | 72 - external/badvpn/lwip/src/include/lwip/ip.h | 254 - .../badvpn/lwip/src/include/lwip/ip_addr.h | 130 - external/badvpn/lwip/src/include/lwip/mem.h | 123 - external/badvpn/lwip/src/include/lwip/memp.h | 116 - .../badvpn/lwip/src/include/lwip/memp_std.h | 135 - .../badvpn/lwip/src/include/lwip/netbuf.h | 112 - external/badvpn/lwip/src/include/lwip/netdb.h | 124 - external/badvpn/lwip/src/include/lwip/netif.h | 393 -- .../badvpn/lwip/src/include/lwip/netifapi.h | 108 - external/badvpn/lwip/src/include/lwip/opt.h | 2417 -------- external/badvpn/lwip/src/include/lwip/pbuf.h | 185 - external/badvpn/lwip/src/include/lwip/raw.h | 131 - external/badvpn/lwip/src/include/lwip/sio.h | 141 - external/badvpn/lwip/src/include/lwip/snmp.h | 367 -- .../badvpn/lwip/src/include/lwip/snmp_asn1.h | 101 - .../badvpn/lwip/src/include/lwip/snmp_msg.h | 315 -- .../lwip/src/include/lwip/snmp_structs.h | 268 - .../badvpn/lwip/src/include/lwip/sockets.h | 411 -- external/badvpn/lwip/src/include/lwip/stats.h | 347 -- external/badvpn/lwip/src/include/lwip/sys.h | 336 -- external/badvpn/lwip/src/include/lwip/tcp.h | 400 -- .../badvpn/lwip/src/include/lwip/tcp_impl.h | 508 -- external/badvpn/lwip/src/include/lwip/tcpip.h | 179 - .../badvpn/lwip/src/include/lwip/timers.h | 100 - external/badvpn/lwip/src/include/lwip/udp.h | 215 - .../badvpn/lwip/src/include/netif/etharp.h | 223 - .../badvpn/lwip/src/include/netif/ppp_oe.h | 190 - .../badvpn/lwip/src/include/netif/slipif.h | 81 - .../badvpn/lwip/src/include/posix/netdb.h | 33 - .../lwip/src/include/posix/sys/socket.h | 33 - external/badvpn/lwip/src/netif/FILES | 29 - external/badvpn/lwip/src/netif/etharp.c | 1413 ----- external/badvpn/lwip/src/netif/ethernetif.c | 322 -- external/badvpn/lwip/src/netif/ppp/auth.c | 1334 ----- external/badvpn/lwip/src/netif/ppp/auth.h | 111 - external/badvpn/lwip/src/netif/ppp/chap.c | 908 --- external/badvpn/lwip/src/netif/ppp/chap.h | 150 - external/badvpn/lwip/src/netif/ppp/chpms.c | 396 -- external/badvpn/lwip/src/netif/ppp/chpms.h | 64 - external/badvpn/lwip/src/netif/ppp/fsm.c | 890 --- external/badvpn/lwip/src/netif/ppp/fsm.h | 157 - external/badvpn/lwip/src/netif/ppp/ipcp.c | 1411 ----- external/badvpn/lwip/src/netif/ppp/ipcp.h | 106 - external/badvpn/lwip/src/netif/ppp/lcp.c | 2066 ------- external/badvpn/lwip/src/netif/ppp/lcp.h | 151 - external/badvpn/lwip/src/netif/ppp/magic.c | 80 - external/badvpn/lwip/src/netif/ppp/magic.h | 63 - external/badvpn/lwip/src/netif/ppp/md5.c | 320 -- external/badvpn/lwip/src/netif/ppp/md5.h | 55 - external/badvpn/lwip/src/netif/ppp/pap.c | 628 --- external/badvpn/lwip/src/netif/ppp/pap.h | 118 - external/badvpn/lwip/src/netif/ppp/ppp.c | 2052 ------- external/badvpn/lwip/src/netif/ppp/ppp.h | 201 - external/badvpn/lwip/src/netif/ppp/ppp_impl.h | 363 -- external/badvpn/lwip/src/netif/ppp/ppp_oe.c | 1132 ---- external/badvpn/lwip/src/netif/ppp/pppdebug.h | 73 - external/badvpn/lwip/src/netif/ppp/randm.c | 249 - external/badvpn/lwip/src/netif/ppp/randm.h | 81 - external/badvpn/lwip/src/netif/ppp/readme.txt | 21 - external/badvpn/lwip/src/netif/ppp/vj.c | 652 --- external/badvpn/lwip/src/netif/ppp/vj.h | 156 - external/badvpn/lwip/src/netif/slipif.c | 546 -- .../badvpn/lwip/test/unit/core/test_mem.c | 73 - .../badvpn/lwip/test/unit/core/test_mem.h | 8 - .../badvpn/lwip/test/unit/core/test_pbuf.c | 73 - .../badvpn/lwip/test/unit/core/test_pbuf.h | 8 - .../badvpn/lwip/test/unit/dhcp/test_dhcp.c | 916 --- .../badvpn/lwip/test/unit/dhcp/test_dhcp.h | 8 - .../lwip/test/unit/etharp/test_etharp.c | 262 - .../lwip/test/unit/etharp/test_etharp.h | 8 - external/badvpn/lwip/test/unit/lwip_check.h | 37 - .../badvpn/lwip/test/unit/lwip_unittests.c | 49 - external/badvpn/lwip/test/unit/lwipopts.h | 53 - .../badvpn/lwip/test/unit/tcp/tcp_helper.c | 303 - .../badvpn/lwip/test/unit/tcp/tcp_helper.h | 52 - external/badvpn/lwip/test/unit/tcp/test_tcp.c | 671 --- external/badvpn/lwip/test/unit/tcp/test_tcp.h | 8 - .../badvpn/lwip/test/unit/tcp/test_tcp_oos.c | 958 ---- .../badvpn/lwip/test/unit/tcp/test_tcp_oos.h | 8 - external/badvpn/lwip/test/unit/udp/test_udp.c | 68 - external/badvpn/lwip/test/unit/udp/test_udp.h | 8 - external/badvpn/misc/BRefTarget.h | 114 - external/badvpn/misc/Utf16Decoder.h | 113 - external/badvpn/misc/Utf16Encoder.h | 67 - external/badvpn/misc/Utf8Decoder.h | 143 - external/badvpn/misc/Utf8Encoder.h | 81 - external/badvpn/misc/arp_proto.h | 60 - external/badvpn/misc/array_length.h | 35 - external/badvpn/misc/balign.h | 76 - external/badvpn/misc/balloc.h | 248 - external/badvpn/misc/blimits.h | 60 - external/badvpn/misc/bsize.h | 117 - external/badvpn/misc/bsort.h | 69 - external/badvpn/misc/bstring.h | 140 - external/badvpn/misc/byteorder.h | 196 - external/badvpn/misc/cmdline.h | 181 - external/badvpn/misc/compare.h | 37 - external/badvpn/misc/concat_strings.h | 85 - external/badvpn/misc/cstring.h | 347 -- external/badvpn/misc/dead.h | 134 - external/badvpn/misc/debug.h | 142 - external/badvpn/misc/debugcounter.h | 118 - external/badvpn/misc/debugerror.h | 90 - external/badvpn/misc/dhcp_proto.h | 131 - external/badvpn/misc/ethernet_proto.h | 52 - external/badvpn/misc/exparray.h | 101 - external/badvpn/misc/expstring.h | 161 - external/badvpn/misc/find_char.h | 58 - external/badvpn/misc/find_program.h | 103 - external/badvpn/misc/get_iface_info.h | 110 - external/badvpn/misc/grow_array.h | 139 - external/badvpn/misc/hashfun.h | 60 - external/badvpn/misc/igmp_proto.h | 97 - external/badvpn/misc/ipaddr.h | 218 - external/badvpn/misc/ipaddr6.h | 400 -- external/badvpn/misc/ipv4_proto.h | 145 - external/badvpn/misc/ipv6_proto.h | 86 - external/badvpn/misc/loggers_string.h | 43 - external/badvpn/misc/loglevel.h | 80 - external/badvpn/misc/maxalign.h | 53 - external/badvpn/misc/merge.h | 36 - external/badvpn/misc/minmax.h | 56 - external/badvpn/misc/modadd.h | 59 - external/badvpn/misc/mswsock.h | 229 - external/badvpn/misc/nonblocking.h | 51 - external/badvpn/misc/nsskey.h | 118 - external/badvpn/misc/offset.h | 51 - external/badvpn/misc/open_standard_streams.h | 54 - external/badvpn/misc/overflow.h | 66 - external/badvpn/misc/packed.h | 51 - external/badvpn/misc/parse_number.h | 304 - external/badvpn/misc/print_macros.h | 98 - external/badvpn/misc/read_file.h | 98 - external/badvpn/misc/read_write_int.h | 181 - external/badvpn/misc/socks_proto.h | 118 - external/badvpn/misc/sslsocket.h | 48 - external/badvpn/misc/stdbuf_cmdline.h | 92 - external/badvpn/misc/strdup.h | 86 - external/badvpn/misc/string_begins_with.h | 96 - external/badvpn/misc/substring.h | 81 - external/badvpn/misc/udp_proto.h | 170 - external/badvpn/misc/unicode_funcs.h | 232 - external/badvpn/misc/version.h | 41 - external/badvpn/misc/write_file.h | 104 - external/badvpn/ncd-request/CMakeLists.txt | 9 - external/badvpn/ncd-request/ncd-request.c | 224 - external/badvpn/ncd/CMakeLists.txt | 211 - external/badvpn/ncd/NCDAst.c | 1022 ---- external/badvpn/ncd/NCDAst.h | 237 - external/badvpn/ncd/NCDBuildProgram.c | 316 -- external/badvpn/ncd/NCDBuildProgram.h | 49 - external/badvpn/ncd/NCDConfigParser.c | 214 - external/badvpn/ncd/NCDConfigParser.h | 40 - external/badvpn/ncd/NCDConfigParser_parse.y | 718 --- external/badvpn/ncd/NCDConfigTokenizer.c | 321 -- external/badvpn/ncd/NCDConfigTokenizer.h | 64 - external/badvpn/ncd/NCDInterpProcess.c | 497 -- external/badvpn/ncd/NCDInterpProcess.h | 100 - external/badvpn/ncd/NCDInterpProg.c | 140 - external/badvpn/ncd/NCDInterpProg.h | 63 - external/badvpn/ncd/NCDInterpProg_hash.h | 12 - external/badvpn/ncd/NCDInterpreter.c | 1356 ----- external/badvpn/ncd/NCDInterpreter.h | 156 - external/badvpn/ncd/NCDMethodIndex.c | 272 - external/badvpn/ncd/NCDMethodIndex.h | 135 - external/badvpn/ncd/NCDMethodIndex_hash.h | 12 - external/badvpn/ncd/NCDModule.c | 625 --- external/badvpn/ncd/NCDModule.h | 1011 ---- external/badvpn/ncd/NCDModuleIndex.c | 372 -- external/badvpn/ncd/NCDModuleIndex.h | 86 - external/badvpn/ncd/NCDModuleIndex_mhash.h | 12 - external/badvpn/ncd/NCDObject.c | 40 - external/badvpn/ncd/NCDObject.h | 356 -- external/badvpn/ncd/NCDPlaceholderDb.c | 127 - external/badvpn/ncd/NCDPlaceholderDb.h | 95 - external/badvpn/ncd/NCDStringIndex.c | 262 - external/badvpn/ncd/NCDStringIndex.h | 83 - external/badvpn/ncd/NCDStringIndex_hash.h | 13 - external/badvpn/ncd/NCDSugar.c | 253 - external/badvpn/ncd/NCDSugar.h | 38 - external/badvpn/ncd/NCDVal.c | 2065 ------- external/badvpn/ncd/NCDVal.h | 857 --- external/badvpn/ncd/NCDValCons.c | 283 - external/badvpn/ncd/NCDValCons.h | 176 - external/badvpn/ncd/NCDValGenerator.c | 193 - external/badvpn/ncd/NCDValGenerator.h | 40 - external/badvpn/ncd/NCDValParser.c | 225 - external/badvpn/ncd/NCDValParser.h | 50 - external/badvpn/ncd/NCDValParser_parse.y | 202 - external/badvpn/ncd/NCDVal_maptree.h | 15 - external/badvpn/ncd/README | 386 -- external/badvpn/ncd/emncd.c | 137 - external/badvpn/ncd/emncd.html | 320 -- external/badvpn/ncd/examples/dbus_start.ncd | 82 - .../badvpn/ncd/examples/dhcpd.conf.template | 11 - .../badvpn/ncd/examples/directory_updater.ncd | 72 - external/badvpn/ncd/examples/events.ncd | 101 - .../ncd/examples/igmpproxy.conf.template | 10 - .../badvpn/ncd/examples/make_dhcp_config.ncd | 27 - .../ncd/examples/make_igmpproxy_config.ncd | 53 - external/badvpn/ncd/examples/network.ncd | 123 - .../badvpn/ncd/examples/onoff_server.ncdi | 82 - .../badvpn/ncd/examples/onoff_server_test.ncd | 20 - external/badvpn/ncd/examples/router/README | 36 - .../ncd/examples/router/add-port-forwarding | 43 - .../ncd/examples/router/dhcp_server.ncdi | 60 - .../ncd/examples/router/list-port-forwardings | 61 - external/badvpn/ncd/examples/router/ncd.conf | 6 - .../badvpn/ncd/examples/router/network.ncdi | 356 -- .../router/network_control_server.ncdi | 96 - .../ncd/examples/router/port_forwarding.ncdi | 170 - .../badvpn/ncd/examples/router/pppoe.ncdi | 296 - .../examples/router/remove-port-forwarding | 43 - .../badvpn/ncd/examples/router/unbound.ncdi | 42 - .../badvpn/ncd/examples/tcp_echo_client.ncd | 35 - .../badvpn/ncd/examples/tcp_echo_server.ncd | 40 - external/badvpn/ncd/extra/BEventLock.c | 146 - external/badvpn/ncd/extra/BEventLock.h | 127 - external/badvpn/ncd/extra/NCDBProcessOpts.c | 154 - external/badvpn/ncd/extra/NCDBProcessOpts.h | 54 - external/badvpn/ncd/extra/NCDBuf.c | 123 - external/badvpn/ncd/extra/NCDBuf.h | 61 - external/badvpn/ncd/extra/NCDIfConfig.c | 483 -- external/badvpn/ncd/extra/NCDIfConfig.h | 70 - .../badvpn/ncd/extra/NCDInterfaceMonitor.c | 446 -- .../badvpn/ncd/extra/NCDInterfaceMonitor.h | 160 - external/badvpn/ncd/extra/NCDRequestClient.c | 647 --- external/badvpn/ncd/extra/NCDRequestClient.h | 111 - external/badvpn/ncd/extra/NCDRfkillMonitor.c | 117 - external/badvpn/ncd/extra/NCDRfkillMonitor.h | 53 - external/badvpn/ncd/extra/address_utils.h | 280 - external/badvpn/ncd/extra/build_cmdline.c | 111 - external/badvpn/ncd/extra/build_cmdline.h | 38 - external/badvpn/ncd/extra/make_fast_names.h | 154 - external/badvpn/ncd/extra/value_utils.h | 174 - external/badvpn/ncd/include_linux_input.c | 1 - external/badvpn/ncd/make_name_indices.h | 104 - external/badvpn/ncd/modules/alias.c | 148 - external/badvpn/ncd/modules/arithmetic.c | 404 -- external/badvpn/ncd/modules/assert.c | 105 - external/badvpn/ncd/modules/backtrack.c | 103 - external/badvpn/ncd/modules/blocker.c | 353 -- external/badvpn/ncd/modules/buffer.c | 619 --- .../badvpn/ncd/modules/buffer_chunks_tree.h | 9 - external/badvpn/ncd/modules/call2.c | 498 -- external/badvpn/ncd/modules/choose.c | 145 - .../badvpn/ncd/modules/command_template.c | 218 - .../badvpn/ncd/modules/command_template.h | 62 - external/badvpn/ncd/modules/concat.c | 189 - external/badvpn/ncd/modules/daemon.c | 296 - external/badvpn/ncd/modules/depend.c | 452 -- external/badvpn/ncd/modules/depend_scope.c | 466 -- external/badvpn/ncd/modules/dynamic_depend.c | 548 -- external/badvpn/ncd/modules/event_template.c | 184 - external/badvpn/ncd/modules/event_template.h | 64 - external/badvpn/ncd/modules/exit.c | 91 - external/badvpn/ncd/modules/explode.c | 232 - external/badvpn/ncd/modules/file.c | 350 -- external/badvpn/ncd/modules/file_open.c | 585 -- external/badvpn/ncd/modules/foreach.c | 715 --- external/badvpn/ncd/modules/from_string.c | 125 - external/badvpn/ncd/modules/getargs.c | 98 - external/badvpn/ncd/modules/getenv.c | 153 - external/badvpn/ncd/modules/if.c | 103 - external/badvpn/ncd/modules/imperative.c | 324 -- external/badvpn/ncd/modules/implode.c | 155 - external/badvpn/ncd/modules/index.c | 164 - external/badvpn/ncd/modules/list.c | 871 --- external/badvpn/ncd/modules/load_module.c | 313 -- external/badvpn/ncd/modules/log.c | 285 - external/badvpn/ncd/modules/logical.c | 160 - external/badvpn/ncd/modules/modules.h | 210 - external/badvpn/ncd/modules/multidepend.c | 401 -- .../badvpn/ncd/modules/net_backend_badvpn.c | 281 - .../badvpn/ncd/modules/net_backend_rfkill.c | 216 - .../ncd/modules/net_backend_waitdevice.c | 187 - .../badvpn/ncd/modules/net_backend_waitlink.c | 155 - .../ncd/modules/net_backend_wpa_supplicant.c | 573 -- external/badvpn/ncd/modules/net_dns.c | 434 -- external/badvpn/ncd/modules/net_iptables.c | 749 --- external/badvpn/ncd/modules/net_ipv4_addr.c | 148 - .../ncd/modules/net_ipv4_addr_in_network.c | 173 - .../badvpn/ncd/modules/net_ipv4_arp_probe.c | 212 - external/badvpn/ncd/modules/net_ipv4_dhcp.c | 351 -- external/badvpn/ncd/modules/net_ipv4_route.c | 211 - external/badvpn/ncd/modules/net_ipv6_addr.c | 148 - .../ncd/modules/net_ipv6_addr_in_network.c | 168 - external/badvpn/ncd/modules/net_ipv6_route.c | 213 - .../ncd/modules/net_ipv6_wait_dynamic_addr.c | 201 - external/badvpn/ncd/modules/net_up.c | 119 - .../badvpn/ncd/modules/net_watch_interfaces.c | 474 -- external/badvpn/ncd/modules/netmask.c | 263 - external/badvpn/ncd/modules/ondemand.c | 372 -- external/badvpn/ncd/modules/parse.c | 392 -- external/badvpn/ncd/modules/print.c | 207 - external/badvpn/ncd/modules/process_manager.c | 538 -- external/badvpn/ncd/modules/reboot.c | 103 - external/badvpn/ncd/modules/ref.c | 215 - external/badvpn/ncd/modules/regex_match.c | 369 -- external/badvpn/ncd/modules/run.c | 187 - external/badvpn/ncd/modules/runonce.c | 331 -- external/badvpn/ncd/modules/sleep.c | 178 - external/badvpn/ncd/modules/socket.c | 1057 ---- external/badvpn/ncd/modules/spawn.c | 410 -- external/badvpn/ncd/modules/strcmp.c | 107 - external/badvpn/ncd/modules/substr.c | 167 - external/badvpn/ncd/modules/sys_evdev.c | 348 -- .../badvpn/ncd/modules/sys_request_client.c | 646 --- .../badvpn/ncd/modules/sys_request_server.c | 792 --- .../badvpn/ncd/modules/sys_start_process.c | 1266 ----- .../badvpn/ncd/modules/sys_watch_directory.c | 425 -- external/badvpn/ncd/modules/sys_watch_input.c | 455 -- external/badvpn/ncd/modules/sys_watch_usb.c | 421 -- external/badvpn/ncd/modules/timer.c | 146 - external/badvpn/ncd/modules/to_string.c | 116 - external/badvpn/ncd/modules/try.c | 302 - external/badvpn/ncd/modules/value.c | 2102 ------- external/badvpn/ncd/modules/value_maptree.h | 11 - external/badvpn/ncd/modules/valuemetic.c | 219 - external/badvpn/ncd/modules/var.c | 163 - external/badvpn/ncd/ncd.c | 463 -- external/badvpn/ncd/ncd.h | 37 - external/badvpn/ncd/parse_linux_input.sh | 94 - external/badvpn/ncd/static_strings.h | 70 - external/badvpn/ncd/tests/addr_in_network.ncd | 60 - external/badvpn/ncd/tests/alias.ncd | 48 - external/badvpn/ncd/tests/arithmetic.ncd | 69 - external/badvpn/ncd/tests/backtracking.ncd | 31 - external/badvpn/ncd/tests/buffer.ncd | 54 - external/badvpn/ncd/tests/call.ncd | 18 - external/badvpn/ncd/tests/concat.ncd | 19 - external/badvpn/ncd/tests/depend.ncd | 64 - external/badvpn/ncd/tests/depend_scope.ncd | 31 - .../badvpn/ncd/tests/escape_and_nulls.ncd | 38 - external/badvpn/ncd/tests/explode.ncd | 23 - external/badvpn/ncd/tests/foreach.ncd | 35 - external/badvpn/ncd/tests/if.ncd | 38 - external/badvpn/ncd/tests/implode.ncd | 15 - external/badvpn/ncd/tests/include.ncd | 16 - .../badvpn/ncd/tests/include_included.ncdi | 5 - .../badvpn/ncd/tests/include_included2.ncdi | 5 - external/badvpn/ncd/tests/logical.ncd | 46 - external/badvpn/ncd/tests/multidepend.ncd | 30 - external/badvpn/ncd/tests/netmask.ncd | 15 - external/badvpn/ncd/tests/parse.ncd | 85 - external/badvpn/ncd/tests/process_manager.ncd | 112 - external/badvpn/ncd/tests/regex.ncd | 48 - external/badvpn/ncd/tests/run_tests | 38 - external/badvpn/ncd/tests/strings.ncd | 47 - external/badvpn/ncd/tests/substr.ncd | 37 - external/badvpn/ncd/tests/turing.ncd | 138 - external/badvpn/ncd/tests/value.ncd | 258 - external/badvpn/ncd/tests/value_substr.ncd | 25 - external/badvpn/nspr_support/BSSLConnection.c | 1024 ---- external/badvpn/nspr_support/BSSLConnection.h | 116 - external/badvpn/nspr_support/CMakeLists.txt | 5 - .../badvpn/nspr_support/DummyPRFileDesc.c | 176 - .../badvpn/nspr_support/DummyPRFileDesc.h | 61 - external/badvpn/predicate/BPredicate.c | 284 - external/badvpn/predicate/BPredicate.h | 177 - external/badvpn/predicate/BPredicate.l | 83 - external/badvpn/predicate/BPredicate.y | 345 -- .../badvpn/predicate/BPredicate_internal.h | 154 - external/badvpn/predicate/BPredicate_parser.h | 47 - external/badvpn/predicate/CMakeLists.txt | 6 - .../badvpn/predicate/LexMemoryBufferInput.h | 86 - external/badvpn/protocol/addr.bproto | 11 - external/badvpn/protocol/addr.h | 207 - external/badvpn/protocol/dataproto.h | 91 - external/badvpn/protocol/fragmentproto.h | 100 - external/badvpn/protocol/msgproto.bproto | 43 - external/badvpn/protocol/msgproto.h | 76 - external/badvpn/protocol/packetproto.h | 68 - external/badvpn/protocol/requestproto.h | 50 - external/badvpn/protocol/scproto.h | 266 - external/badvpn/protocol/spproto.h | 195 - external/badvpn/protocol/udpgw_proto.h | 84 - external/badvpn/random/BRandom2.c | 90 - external/badvpn/random/BRandom2.h | 50 - external/badvpn/random/CMakeLists.txt | 1 - external/badvpn/scripts/cmake | 8 - external/badvpn/scripts/copy_nss | 23 - external/badvpn/scripts/toolchain.cmake | 6 - external/badvpn/security/BEncryption.c | 240 - external/badvpn/security/BEncryption.h | 175 - external/badvpn/security/BHash.c | 69 - external/badvpn/security/BHash.h | 80 - external/badvpn/security/BRandom.c | 42 - external/badvpn/security/BRandom.h | 49 - external/badvpn/security/BSecurity.c | 149 - external/badvpn/security/BSecurity.h | 60 - external/badvpn/security/CMakeLists.txt | 10 - external/badvpn/security/OTPCalculator.c | 118 - external/badvpn/security/OTPCalculator.h | 96 - external/badvpn/security/OTPChecker.c | 297 - external/badvpn/security/OTPChecker.h | 148 - external/badvpn/security/OTPGenerator.c | 159 - external/badvpn/security/OTPGenerator.h | 134 - external/badvpn/server/CMakeLists.txt | 12 - external/badvpn/server/badvpn-server.8 | 190 - external/badvpn/server/server.c | 2394 -------- external/badvpn/server/server.h | 186 - .../badvpn/server_connection/CMakeLists.txt | 5 - .../server_connection/SCKeepaliveSource.c | 69 - .../server_connection/SCKeepaliveSource.h | 72 - .../server_connection/ServerConnection.c | 669 --- .../server_connection/ServerConnection.h | 289 - external/badvpn/socksclient/BSocksClient.c | 608 -- external/badvpn/socksclient/BSocksClient.h | 147 - external/badvpn/socksclient/CMakeLists.txt | 1 - external/badvpn/stringmap/BStringMap.c | 198 - external/badvpn/stringmap/BStringMap.h | 57 - external/badvpn/stringmap/CMakeLists.txt | 1 - external/badvpn/structure/BAVL.h | 797 --- external/badvpn/structure/CAvl.h | 36 - external/badvpn/structure/CAvl_decl.h | 77 - external/badvpn/structure/CAvl_footer.h | 113 - external/badvpn/structure/CAvl_header.h | 141 - external/badvpn/structure/CAvl_impl.h | 949 ---- external/badvpn/structure/CHash.h | 39 - external/badvpn/structure/CHash_decl.h | 59 - external/badvpn/structure/CHash_footer.h | 74 - external/badvpn/structure/CHash_header.h | 78 - external/badvpn/structure/CHash_impl.h | 312 -- external/badvpn/structure/ChunkBuffer2.h | 317 -- external/badvpn/structure/IndexedList.h | 225 - external/badvpn/structure/IndexedList_tree.h | 15 - external/badvpn/structure/LinkedList0.h | 202 - external/badvpn/structure/LinkedList1.h | 275 - external/badvpn/structure/LinkedList3.h | 362 -- external/badvpn/structure/SAvl.h | 40 - external/badvpn/structure/SAvl_decl.h | 73 - external/badvpn/structure/SAvl_footer.h | 89 - external/badvpn/structure/SAvl_header.h | 93 - external/badvpn/structure/SAvl_impl.h | 164 - external/badvpn/structure/SAvl_tree.h | 18 - external/badvpn/structure/SLinkedList.h | 38 - external/badvpn/structure/SLinkedList_decl.h | 67 - .../badvpn/structure/SLinkedList_footer.h | 57 - .../badvpn/structure/SLinkedList_header.h | 62 - external/badvpn/structure/SLinkedList_impl.h | 182 - external/badvpn/system/BAddr.h | 808 --- external/badvpn/system/BConnection.h | 369 -- external/badvpn/system/BConnectionGeneric.h | 144 - external/badvpn/system/BConnection_unix.c | 1057 ---- external/badvpn/system/BConnection_unix.h | 87 - external/badvpn/system/BConnection_win.c | 875 --- external/badvpn/system/BConnection_win.h | 101 - external/badvpn/system/BDatagram.h | 209 - external/badvpn/system/BDatagram_unix.c | 855 --- external/badvpn/system/BDatagram_unix.h | 71 - external/badvpn/system/BDatagram_win.c | 755 --- external/badvpn/system/BDatagram_win.h | 99 - external/badvpn/system/BInputProcess.c | 211 - external/badvpn/system/BInputProcess.h | 65 - external/badvpn/system/BLockReactor.c | 131 - external/badvpn/system/BLockReactor.h | 58 - external/badvpn/system/BNetwork.c | 99 - external/badvpn/system/BNetwork.h | 36 - external/badvpn/system/BProcess.c | 400 -- external/badvpn/system/BProcess.h | 200 - external/badvpn/system/BReactor.h | 11 - external/badvpn/system/BReactor_badvpn.c | 1430 ----- external/badvpn/system/BReactor_badvpn.h | 572 -- .../system/BReactor_badvpn_timerstree.h | 13 - external/badvpn/system/BReactor_emscripten.c | 176 - external/badvpn/system/BReactor_emscripten.h | 87 - external/badvpn/system/BReactor_glib.c | 524 -- external/badvpn/system/BReactor_glib.h | 148 - external/badvpn/system/BSignal.c | 188 - external/badvpn/system/BSignal.h | 64 - external/badvpn/system/BThreadSignal.c | 136 - external/badvpn/system/BThreadSignal.h | 53 - external/badvpn/system/BTime.c | 38 - external/badvpn/system/BTime.h | 163 - external/badvpn/system/BUnixSignal.c | 406 -- external/badvpn/system/BUnixSignal.h | 132 - external/badvpn/system/CMakeLists.txt | 44 - external/badvpn/tests/CMakeLists.txt | 8 - external/badvpn/tests/bproto_test.bproto | 9 - external/badvpn/tests/bproto_test.c | 76 - external/badvpn/tests/chunkbuffer2_test.c | 86 - external/badvpn/tests/threadwork_test.c | 87 - external/badvpn/threadwork/BThreadWork.c | 451 -- external/badvpn/threadwork/BThreadWork.h | 171 - external/badvpn/threadwork/CMakeLists.txt | 6 - external/badvpn/tun2socks/CMakeLists.txt | 15 - external/badvpn/tun2socks/SocksUdpGwClient.c | 228 - external/badvpn/tun2socks/SocksUdpGwClient.h | 64 - external/badvpn/tun2socks/badvpn-tun2socks.8 | 126 - external/badvpn/tun2socks/tun2socks.c | 2300 -------- external/badvpn/tun2socks/tun2socks.h | 46 - external/badvpn/tunctl/CMakeLists.txt | 6 - external/badvpn/tunctl/tunctl.c | 352 -- external/badvpn/tuntap/BTap.c | 631 --- external/badvpn/tuntap/BTap.h | 199 - external/badvpn/tuntap/CMakeLists.txt | 10 - external/badvpn/tuntap/tapwin32-funcs.c | 227 - external/badvpn/tuntap/tapwin32-funcs.h | 42 - external/badvpn/tuntap/wintap-common.h | 39 - external/badvpn/udevmonitor/CMakeLists.txt | 7 - external/badvpn/udevmonitor/NCDUdevCache.c | 417 -- external/badvpn/udevmonitor/NCDUdevCache.h | 66 - external/badvpn/udevmonitor/NCDUdevManager.c | 547 -- external/badvpn/udevmonitor/NCDUdevManager.h | 84 - external/badvpn/udevmonitor/NCDUdevMonitor.c | 250 - external/badvpn/udevmonitor/NCDUdevMonitor.h | 71 - .../badvpn/udevmonitor/NCDUdevMonitorParser.c | 358 -- .../badvpn/udevmonitor/NCDUdevMonitorParser.h | 76 - external/badvpn/udpgw/CMakeLists.txt | 9 - external/badvpn/udpgw/udpgw.c | 1473 ----- external/badvpn/udpgw/udpgw.h | 52 - external/badvpn/udpgw_client/CMakeLists.txt | 1 - external/badvpn/udpgw_client/UdpGwClient.c | 597 -- external/badvpn/udpgw_client/UdpGwClient.h | 118 - libnetcipher/.classpath | 9 - libnetcipher/.gitignore | 1 - libnetcipher/.project | 33 - libnetcipher/AndroidManifest.xml | 8 - libnetcipher/build.gradle | 62 - libnetcipher/custom_rules.xml | 104 - .../libs/httpclientandroidlib-1.2.1.jar | 0 libnetcipher/netcipher.pom | 33 - libnetcipher/proguard-project.txt | 20 - libnetcipher/project.properties | 15 - libnetcipher/res/raw/debiancacerts.bks | 0 libnetcipher/settings.gradle | 1 - .../guardianproject/netcipher/NetCipher.java | 357 -- .../client/SocksAwareClientConnOperator.java | 255 - .../client/SocksAwareProxyRoutePlanner.java | 71 - .../netcipher/client/StrongBuilder.java | 159 - .../netcipher/client/StrongBuilderBase.java | 287 - .../client/StrongConnectionBuilder.java | 165 - .../netcipher/client/StrongConstants.java | 44 - .../netcipher/client/StrongHttpsClient.java | 164 - .../client/StrongSSLSocketFactory.java | 202 - .../client/TlsOnlySocketFactory.java | 544 -- .../netcipher/proxy/OrbotHelper.java | 701 --- .../netcipher/proxy/ProxyHelper.java | 74 - .../netcipher/proxy/ProxySelector.java | 59 - .../netcipher/proxy/PsiphonHelper.java | 177 - .../netcipher/proxy/SetFromMap.java | 88 - .../netcipher/proxy/SignatureUtils.java | 476 -- .../netcipher/proxy/StatusCallback.java | 64 - .../netcipher/proxy/TorServiceUtils.java | 246 - .../netcipher/web/WebkitProxy.java | 833 --- orbotmanager/build.gradle | 6 +- .../android/service/OrbotService.java | 12 +- .../android/service/vpn/TorifiedApp.java | 109 +- .../service/wrapper/orbotLocalConstants.java | 2 +- todo.txt | 8 + 1061 files changed, 581 insertions(+), 233402 deletions(-) delete mode 100644 .idea/deploymentTargetDropDown.xml delete mode 100755 app/google-services.json delete mode 100644 app/libs/mopub-sdk-5.17.0.aar delete mode 100644 app/src/androidTest/java/com/example/genesissearchwidget/ExampleInstrumentedTest.kt create mode 100644 app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/config.yaml delete mode 100644 app/src/main/java/com/hiddenservices/onionservices/pluginManager/adPluginManager/admobManager.java rename app/src/main/java/com/hiddenservices/onionservices/pluginManager/adPluginManager/{mopubManager.java => appLovinManager.java} (86%) delete mode 100644 app/src/main/java/com/hiddenservices/onionservices/pluginManager/adPluginManager/facebookAdsManager.java delete mode 100644 docs/GSoC.txt delete mode 100644 docs/WALKTHROUGH delete mode 100644 docs/featuregraphic.xcf delete mode 100644 docs/onionroots.xcf delete mode 100644 docs/orbotnewicons.xcf delete mode 100644 external/badvpn/Android.mk delete mode 100644 external/badvpn/CMakeLists.txt delete mode 100644 external/badvpn/COPYING delete mode 100644 external/badvpn/ChangeLog delete mode 100644 external/badvpn/INSTALL delete mode 100644 external/badvpn/INSTALL-WINDOWS delete mode 100644 external/badvpn/arpprobe/BArpProbe.c delete mode 100644 external/badvpn/arpprobe/BArpProbe.h delete mode 100644 external/badvpn/arpprobe/CMakeLists.txt delete mode 100644 external/badvpn/badvpn.7 delete mode 100644 external/badvpn/base/BLog.c delete mode 100644 external/badvpn/base/BLog.h delete mode 100644 external/badvpn/base/BLog_syslog.c delete mode 100644 external/badvpn/base/BLog_syslog.h delete mode 100644 external/badvpn/base/BMutex.h delete mode 100644 external/badvpn/base/BPending.c delete mode 100644 external/badvpn/base/BPending.h delete mode 100644 external/badvpn/base/BPending_list.h delete mode 100644 external/badvpn/base/CMakeLists.txt delete mode 100644 external/badvpn/base/DebugObject.c delete mode 100644 external/badvpn/base/DebugObject.h delete mode 100644 external/badvpn/blog_channels.txt delete mode 100644 external/badvpn/blog_generator/blog.php delete mode 100644 external/badvpn/blog_generator/blog_functions.php delete mode 100644 external/badvpn/bproto/BProto.h delete mode 100644 external/badvpn/bproto_generator/ProtoParser.lime delete mode 100644 external/badvpn/bproto_generator/ProtoParser.php delete mode 100644 external/badvpn/bproto_generator/bproto.php delete mode 100644 external/badvpn/bproto_generator/bproto_functions.php delete mode 100644 external/badvpn/client/CMakeLists.txt delete mode 100644 external/badvpn/client/DPReceive.c delete mode 100644 external/badvpn/client/DPReceive.h delete mode 100644 external/badvpn/client/DPRelay.c delete mode 100644 external/badvpn/client/DPRelay.h delete mode 100644 external/badvpn/client/DataProto.c delete mode 100644 external/badvpn/client/DataProto.h delete mode 100644 external/badvpn/client/DataProtoKeepaliveSource.c delete mode 100644 external/badvpn/client/DataProtoKeepaliveSource.h delete mode 100644 external/badvpn/client/DatagramPeerIO.c delete mode 100644 external/badvpn/client/DatagramPeerIO.h delete mode 100644 external/badvpn/client/FragmentProtoAssembler.c delete mode 100644 external/badvpn/client/FragmentProtoAssembler.h delete mode 100644 external/badvpn/client/FragmentProtoAssembler_tree.h delete mode 100644 external/badvpn/client/FragmentProtoDisassembler.c delete mode 100644 external/badvpn/client/FragmentProtoDisassembler.h delete mode 100644 external/badvpn/client/FrameDecider.c delete mode 100644 external/badvpn/client/FrameDecider.h delete mode 100644 external/badvpn/client/FrameDecider_groups_tree.h delete mode 100644 external/badvpn/client/FrameDecider_macs_tree.h delete mode 100644 external/badvpn/client/FrameDecider_multicast_tree.h delete mode 100644 external/badvpn/client/PasswordListener.c delete mode 100644 external/badvpn/client/PasswordListener.h delete mode 100644 external/badvpn/client/PeerChat.c delete mode 100644 external/badvpn/client/PeerChat.h delete mode 100644 external/badvpn/client/SCOutmsgEncoder.c delete mode 100644 external/badvpn/client/SCOutmsgEncoder.h delete mode 100644 external/badvpn/client/SPProtoDecoder.c delete mode 100644 external/badvpn/client/SPProtoDecoder.h delete mode 100644 external/badvpn/client/SPProtoEncoder.c delete mode 100644 external/badvpn/client/SPProtoEncoder.h delete mode 100644 external/badvpn/client/SimpleStreamBuffer.c delete mode 100644 external/badvpn/client/SimpleStreamBuffer.h delete mode 100644 external/badvpn/client/SinglePacketSource.c delete mode 100644 external/badvpn/client/SinglePacketSource.h delete mode 100644 external/badvpn/client/StreamPeerIO.c delete mode 100644 external/badvpn/client/StreamPeerIO.h delete mode 100644 external/badvpn/client/badvpn-client.8 delete mode 100644 external/badvpn/client/client.c delete mode 100644 external/badvpn/client/client.h delete mode 100644 external/badvpn/cmake/modules/COPYING-CMAKE-SCRIPTS delete mode 100644 external/badvpn/cmake/modules/FindGLIB2.cmake delete mode 100644 external/badvpn/cmake/modules/FindLibraryWithDebug.cmake delete mode 100644 external/badvpn/cmake/modules/FindNSPR.cmake delete mode 100644 external/badvpn/cmake/modules/FindNSS.cmake delete mode 100644 external/badvpn/cmake/modules/FindOpenSSL.cmake delete mode 100644 external/badvpn/compile-tun2sock.sh delete mode 100644 external/badvpn/compile-udpgw.sh delete mode 100644 external/badvpn/dhcpclient/BDHCPClient.c delete mode 100644 external/badvpn/dhcpclient/BDHCPClient.h delete mode 100644 external/badvpn/dhcpclient/BDHCPClientCore.c delete mode 100644 external/badvpn/dhcpclient/BDHCPClientCore.h delete mode 100644 external/badvpn/dhcpclient/CMakeLists.txt delete mode 100644 external/badvpn/dhcpclient/DHCPIpUdpDecoder.c delete mode 100644 external/badvpn/dhcpclient/DHCPIpUdpDecoder.h delete mode 100644 external/badvpn/dhcpclient/DHCPIpUdpEncoder.c delete mode 100644 external/badvpn/dhcpclient/DHCPIpUdpEncoder.h delete mode 100644 external/badvpn/dostest/CMakeLists.txt delete mode 100644 external/badvpn/dostest/StreamBuffer.c delete mode 100644 external/badvpn/dostest/StreamBuffer.h delete mode 100644 external/badvpn/dostest/dostest-attacker.c delete mode 100644 external/badvpn/dostest/dostest-server.c delete mode 100644 external/badvpn/examples/CMakeLists.txt delete mode 100644 external/badvpn/examples/FastPacketSource.h delete mode 100644 external/badvpn/examples/RandomPacketSink.h delete mode 100644 external/badvpn/examples/TimerPacketSink.h delete mode 100644 external/badvpn/examples/arpprobe_test.c delete mode 100644 external/badvpn/examples/bavl_test.c delete mode 100644 external/badvpn/examples/bencryption_bench.c delete mode 100644 external/badvpn/examples/bprocess_example.c delete mode 100644 external/badvpn/examples/brandom2_test.c delete mode 100644 external/badvpn/examples/btimer_example.c delete mode 100644 external/badvpn/examples/cavl_test.c delete mode 100644 external/badvpn/examples/cavl_test_tree.h delete mode 100644 external/badvpn/examples/dhcpclient_test.c delete mode 100644 external/badvpn/examples/emscripten_test.c delete mode 100644 external/badvpn/examples/fairqueue_test.c delete mode 100644 external/badvpn/examples/fairqueue_test2.c delete mode 100644 external/badvpn/examples/indexedlist_test.c delete mode 100644 external/badvpn/examples/ipaddr6_test.c delete mode 100644 external/badvpn/examples/ncd_parser_test.c delete mode 100644 external/badvpn/examples/ncd_tokenizer_test.c delete mode 100644 external/badvpn/examples/ncd_value_parser_test.c delete mode 100644 external/badvpn/examples/ncdinterfacemonitor_test.c delete mode 100644 external/badvpn/examples/ncdudevmanager_test.c delete mode 100644 external/badvpn/examples/ncdudevmonitor_test.c delete mode 100644 external/badvpn/examples/ncdval_test.c delete mode 100644 external/badvpn/examples/ncdvalcons_test.c delete mode 100644 external/badvpn/examples/parse_number_test.c delete mode 100644 external/badvpn/examples/predicate_test.c delete mode 100644 external/badvpn/examples/savl_test.c delete mode 100644 external/badvpn/examples/savl_test_tree.h delete mode 100644 external/badvpn/examples/stdin_input.c delete mode 100644 external/badvpn/examples/substring_test.c delete mode 100644 external/badvpn/fix_flex.php delete mode 100644 external/badvpn/flooder/CMakeLists.txt delete mode 100644 external/badvpn/flooder/flooder.c delete mode 100644 external/badvpn/flooder/flooder.h delete mode 100644 external/badvpn/flow/BufferWriter.c delete mode 100644 external/badvpn/flow/BufferWriter.h delete mode 100644 external/badvpn/flow/CMakeLists.txt delete mode 100644 external/badvpn/flow/LineBuffer.c delete mode 100644 external/badvpn/flow/LineBuffer.h delete mode 100644 external/badvpn/flow/PacketBuffer.c delete mode 100644 external/badvpn/flow/PacketBuffer.h delete mode 100644 external/badvpn/flow/PacketCopier.c delete mode 100644 external/badvpn/flow/PacketCopier.h delete mode 100644 external/badvpn/flow/PacketPassConnector.c delete mode 100644 external/badvpn/flow/PacketPassConnector.h delete mode 100644 external/badvpn/flow/PacketPassFairQueue.c delete mode 100644 external/badvpn/flow/PacketPassFairQueue.h delete mode 100644 external/badvpn/flow/PacketPassFairQueue_tree.h delete mode 100644 external/badvpn/flow/PacketPassFifoQueue.c delete mode 100644 external/badvpn/flow/PacketPassFifoQueue.h delete mode 100644 external/badvpn/flow/PacketPassInterface.c delete mode 100644 external/badvpn/flow/PacketPassInterface.h delete mode 100644 external/badvpn/flow/PacketPassNotifier.c delete mode 100644 external/badvpn/flow/PacketPassNotifier.h delete mode 100644 external/badvpn/flow/PacketPassPriorityQueue.c delete mode 100644 external/badvpn/flow/PacketPassPriorityQueue.h delete mode 100644 external/badvpn/flow/PacketPassPriorityQueue_tree.h delete mode 100644 external/badvpn/flow/PacketProtoDecoder.c delete mode 100644 external/badvpn/flow/PacketProtoDecoder.h delete mode 100644 external/badvpn/flow/PacketProtoEncoder.c delete mode 100644 external/badvpn/flow/PacketProtoEncoder.h delete mode 100644 external/badvpn/flow/PacketProtoFlow.c delete mode 100644 external/badvpn/flow/PacketProtoFlow.h delete mode 100644 external/badvpn/flow/PacketRecvBlocker.c delete mode 100644 external/badvpn/flow/PacketRecvBlocker.h delete mode 100644 external/badvpn/flow/PacketRecvConnector.c delete mode 100644 external/badvpn/flow/PacketRecvConnector.h delete mode 100644 external/badvpn/flow/PacketRecvInterface.c delete mode 100644 external/badvpn/flow/PacketRecvInterface.h delete mode 100644 external/badvpn/flow/PacketRouter.c delete mode 100644 external/badvpn/flow/PacketRouter.h delete mode 100644 external/badvpn/flow/PacketStreamSender.c delete mode 100644 external/badvpn/flow/PacketStreamSender.h delete mode 100644 external/badvpn/flow/RouteBuffer.c delete mode 100644 external/badvpn/flow/RouteBuffer.h delete mode 100644 external/badvpn/flow/SinglePacketBuffer.c delete mode 100644 external/badvpn/flow/SinglePacketBuffer.h delete mode 100644 external/badvpn/flow/SinglePacketSender.c delete mode 100644 external/badvpn/flow/SinglePacketSender.h delete mode 100644 external/badvpn/flow/SingleStreamReceiver.c delete mode 100644 external/badvpn/flow/SingleStreamReceiver.h delete mode 100644 external/badvpn/flow/SingleStreamSender.c delete mode 100644 external/badvpn/flow/SingleStreamSender.h delete mode 100644 external/badvpn/flow/StreamPacketSender.c delete mode 100644 external/badvpn/flow/StreamPacketSender.h delete mode 100644 external/badvpn/flow/StreamPassConnector.c delete mode 100644 external/badvpn/flow/StreamPassConnector.h delete mode 100644 external/badvpn/flow/StreamPassInterface.c delete mode 100644 external/badvpn/flow/StreamPassInterface.h delete mode 100644 external/badvpn/flow/StreamRecvConnector.c delete mode 100644 external/badvpn/flow/StreamRecvConnector.h delete mode 100644 external/badvpn/flow/StreamRecvInterface.c delete mode 100644 external/badvpn/flow/StreamRecvInterface.h delete mode 100644 external/badvpn/flowextra/CMakeLists.txt delete mode 100644 external/badvpn/flowextra/KeepaliveIO.c delete mode 100644 external/badvpn/flowextra/KeepaliveIO.h delete mode 100644 external/badvpn/flowextra/PacketPassInactivityMonitor.c delete mode 100644 external/badvpn/flowextra/PacketPassInactivityMonitor.h delete mode 100644 external/badvpn/generate_files delete mode 100644 external/badvpn/generated/NCDConfigParser_parse.c delete mode 100644 external/badvpn/generated/NCDConfigParser_parse.h delete mode 100644 external/badvpn/generated/NCDConfigParser_parse.out delete mode 100644 external/badvpn/generated/NCDConfigParser_parse.y delete mode 100644 external/badvpn/generated/NCDValParser_parse.c delete mode 100644 external/badvpn/generated/NCDValParser_parse.h delete mode 100644 external/badvpn/generated/NCDValParser_parse.out delete mode 100644 external/badvpn/generated/NCDValParser_parse.y delete mode 100644 external/badvpn/generated/bison_BPredicate.c delete mode 100644 external/badvpn/generated/bison_BPredicate.h delete mode 100644 external/badvpn/generated/blog_channel_BArpProbe.h delete mode 100644 external/badvpn/generated/blog_channel_BConnection.h delete mode 100644 external/badvpn/generated/blog_channel_BDHCPClient.h delete mode 100644 external/badvpn/generated/blog_channel_BDHCPClientCore.h delete mode 100644 external/badvpn/generated/blog_channel_BDatagram.h delete mode 100644 external/badvpn/generated/blog_channel_BEncryption.h delete mode 100644 external/badvpn/generated/blog_channel_BInputProcess.h delete mode 100644 external/badvpn/generated/blog_channel_BLockReactor.h delete mode 100644 external/badvpn/generated/blog_channel_BNetwork.h delete mode 100644 external/badvpn/generated/blog_channel_BPredicate.h delete mode 100644 external/badvpn/generated/blog_channel_BProcess.h delete mode 100644 external/badvpn/generated/blog_channel_BReactor.h delete mode 100644 external/badvpn/generated/blog_channel_BSSLConnection.h delete mode 100644 external/badvpn/generated/blog_channel_BSignal.h delete mode 100644 external/badvpn/generated/blog_channel_BSocksClient.h delete mode 100644 external/badvpn/generated/blog_channel_BTap.h delete mode 100644 external/badvpn/generated/blog_channel_BThreadSignal.h delete mode 100644 external/badvpn/generated/blog_channel_BThreadWork.h delete mode 100644 external/badvpn/generated/blog_channel_BTime.h delete mode 100644 external/badvpn/generated/blog_channel_BUnixSignal.h delete mode 100644 external/badvpn/generated/blog_channel_DPReceive.h delete mode 100644 external/badvpn/generated/blog_channel_DPRelay.h delete mode 100644 external/badvpn/generated/blog_channel_DataProto.h delete mode 100644 external/badvpn/generated/blog_channel_DatagramPeerIO.h delete mode 100644 external/badvpn/generated/blog_channel_FragmentProtoAssembler.h delete mode 100644 external/badvpn/generated/blog_channel_FrameDecider.h delete mode 100644 external/badvpn/generated/blog_channel_LineBuffer.h delete mode 100644 external/badvpn/generated/blog_channel_Listener.h delete mode 100644 external/badvpn/generated/blog_channel_NCDBuildProgram.h delete mode 100644 external/badvpn/generated/blog_channel_NCDConfigParser.h delete mode 100644 external/badvpn/generated/blog_channel_NCDConfigTokenizer.h delete mode 100644 external/badvpn/generated/blog_channel_NCDIfConfig.h delete mode 100644 external/badvpn/generated/blog_channel_NCDInterfaceMonitor.h delete mode 100644 external/badvpn/generated/blog_channel_NCDModuleIndex.h delete mode 100644 external/badvpn/generated/blog_channel_NCDModuleProcess.h delete mode 100644 external/badvpn/generated/blog_channel_NCDPlaceholderDb.h delete mode 100644 external/badvpn/generated/blog_channel_NCDRequest.h delete mode 100644 external/badvpn/generated/blog_channel_NCDRequestClient.h delete mode 100644 external/badvpn/generated/blog_channel_NCDRfkillMonitor.h delete mode 100644 external/badvpn/generated/blog_channel_NCDUdevCache.h delete mode 100644 external/badvpn/generated/blog_channel_NCDUdevManager.h delete mode 100644 external/badvpn/generated/blog_channel_NCDUdevMonitor.h delete mode 100644 external/badvpn/generated/blog_channel_NCDUdevMonitorParser.h delete mode 100644 external/badvpn/generated/blog_channel_NCDVal.h delete mode 100644 external/badvpn/generated/blog_channel_NCDValGenerator.h delete mode 100644 external/badvpn/generated/blog_channel_NCDValParser.h delete mode 100644 external/badvpn/generated/blog_channel_PRStreamSink.h delete mode 100644 external/badvpn/generated/blog_channel_PRStreamSource.h delete mode 100644 external/badvpn/generated/blog_channel_PacketProtoDecoder.h delete mode 100644 external/badvpn/generated/blog_channel_PasswordListener.h delete mode 100644 external/badvpn/generated/blog_channel_PeerChat.h delete mode 100644 external/badvpn/generated/blog_channel_SPProtoDecoder.h delete mode 100644 external/badvpn/generated/blog_channel_ServerConnection.h delete mode 100644 external/badvpn/generated/blog_channel_SocksUdpGwClient.h delete mode 100644 external/badvpn/generated/blog_channel_StreamPeerIO.h delete mode 100644 external/badvpn/generated/blog_channel_UdpGwClient.h delete mode 100644 external/badvpn/generated/blog_channel_addr.h delete mode 100644 external/badvpn/generated/blog_channel_client.h delete mode 100644 external/badvpn/generated/blog_channel_dostest_attacker.h delete mode 100644 external/badvpn/generated/blog_channel_dostest_server.h delete mode 100644 external/badvpn/generated/blog_channel_flooder.h delete mode 100644 external/badvpn/generated/blog_channel_lwip.h delete mode 100644 external/badvpn/generated/blog_channel_ncd.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_alias.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_arithmetic.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_assert.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_backtrack.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_blocker.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_buffer.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_call2.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_choose.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_concat.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_daemon.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_depend.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_depend_scope.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_dynamic_depend.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_exit.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_explode.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_file.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_file_open.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_foreach.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_from_string.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_getargs.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_getenv.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_if.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_imperative.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_implode.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_index.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_list.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_load_module.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_log.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_log_msg.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_logical.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_multidepend.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_backend_badvpn.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_backend_rfkill.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_backend_waitdevice.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_backend_waitlink.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_backend_wpa_supplicant.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_dns.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_iptables.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_ipv4_addr.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_ipv4_addr_in_network.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_ipv4_arp_probe.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_ipv4_dhcp.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_ipv4_route.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_ipv6_addr.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_ipv6_addr_in_network.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_ipv6_route.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_ipv6_wait_dynamic_addr.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_up.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_net_watch_interfaces.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_netmask.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_ondemand.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_parse.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_print.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_process_manager.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_reboot.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_ref.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_regex_match.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_request.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_run.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_runonce.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_sleep.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_socket.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_spawn.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_strcmp.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_substr.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_sys_evdev.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_sys_request_client.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_sys_request_server.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_sys_start_process.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_sys_watch_directory.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_sys_watch_input.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_sys_watch_usb.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_timer.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_to_string.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_try.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_value.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_valuemetic.h delete mode 100644 external/badvpn/generated/blog_channel_ncd_var.h delete mode 100644 external/badvpn/generated/blog_channel_nsskey.h delete mode 100644 external/badvpn/generated/blog_channel_server.h delete mode 100644 external/badvpn/generated/blog_channel_tun2socks.h delete mode 100644 external/badvpn/generated/blog_channel_udpgw.h delete mode 100644 external/badvpn/generated/blog_channels_defines.h delete mode 100644 external/badvpn/generated/blog_channels_list.h delete mode 100644 external/badvpn/generated/bproto_addr.h delete mode 100644 external/badvpn/generated/bproto_bproto_test.h delete mode 100644 external/badvpn/generated/bproto_msgproto.h delete mode 100644 external/badvpn/generated/flex_BPredicate.c delete mode 100644 external/badvpn/generated/flex_BPredicate.h delete mode 100644 external/badvpn/lemon/lemon.c delete mode 100644 external/badvpn/lemon/lempar.c delete mode 100644 external/badvpn/lime/HOWTO delete mode 100644 external/badvpn/lime/flex_token_stream.php delete mode 100644 external/badvpn/lime/lemon.c delete mode 100644 external/badvpn/lime/lime.bootstrap delete mode 100644 external/badvpn/lime/lime.php delete mode 100644 external/badvpn/lime/lime_scan_tokens.l delete mode 100644 external/badvpn/lime/metagrammar delete mode 100644 external/badvpn/lime/parse_engine.php delete mode 100644 external/badvpn/lime/set.so.php delete mode 100644 external/badvpn/lwip/CHANGELOG delete mode 100644 external/badvpn/lwip/CMakeLists.txt delete mode 100644 external/badvpn/lwip/COPYING delete mode 100644 external/badvpn/lwip/FILES delete mode 100644 external/badvpn/lwip/README delete mode 100644 external/badvpn/lwip/UPGRADING delete mode 100644 external/badvpn/lwip/custom/arch/cc.h delete mode 100644 external/badvpn/lwip/custom/arch/perf.h delete mode 100644 external/badvpn/lwip/custom/lwipopts.h delete mode 100644 external/badvpn/lwip/custom/sys.c delete mode 100644 external/badvpn/lwip/doc/FILES delete mode 100644 external/badvpn/lwip/doc/contrib.txt delete mode 100644 external/badvpn/lwip/doc/rawapi.txt delete mode 100644 external/badvpn/lwip/doc/savannah.txt delete mode 100644 external/badvpn/lwip/doc/snmp_agent.txt delete mode 100644 external/badvpn/lwip/doc/sys_arch.txt delete mode 100644 external/badvpn/lwip/lwip-base-version delete mode 100644 external/badvpn/lwip/src/FILES delete mode 100644 external/badvpn/lwip/src/api/api_lib.c delete mode 100644 external/badvpn/lwip/src/api/api_msg.c delete mode 100644 external/badvpn/lwip/src/api/err.c delete mode 100644 external/badvpn/lwip/src/api/netbuf.c delete mode 100644 external/badvpn/lwip/src/api/netdb.c delete mode 100644 external/badvpn/lwip/src/api/netifapi.c delete mode 100644 external/badvpn/lwip/src/api/sockets.c delete mode 100644 external/badvpn/lwip/src/api/tcpip.c delete mode 100644 external/badvpn/lwip/src/core/def.c delete mode 100644 external/badvpn/lwip/src/core/dhcp.c delete mode 100644 external/badvpn/lwip/src/core/dns.c delete mode 100644 external/badvpn/lwip/src/core/inet_chksum.c delete mode 100644 external/badvpn/lwip/src/core/init.c delete mode 100644 external/badvpn/lwip/src/core/ipv4/autoip.c delete mode 100644 external/badvpn/lwip/src/core/ipv4/icmp.c delete mode 100644 external/badvpn/lwip/src/core/ipv4/igmp.c delete mode 100644 external/badvpn/lwip/src/core/ipv4/ip4.c delete mode 100644 external/badvpn/lwip/src/core/ipv4/ip4_addr.c delete mode 100644 external/badvpn/lwip/src/core/ipv4/ip_frag.c delete mode 100644 external/badvpn/lwip/src/core/ipv6/README delete mode 100644 external/badvpn/lwip/src/core/ipv6/dhcp6.c delete mode 100644 external/badvpn/lwip/src/core/ipv6/ethip6.c delete mode 100644 external/badvpn/lwip/src/core/ipv6/icmp6.c delete mode 100644 external/badvpn/lwip/src/core/ipv6/inet6.c delete mode 100644 external/badvpn/lwip/src/core/ipv6/ip6.c delete mode 100644 external/badvpn/lwip/src/core/ipv6/ip6_addr.c delete mode 100644 external/badvpn/lwip/src/core/ipv6/ip6_frag.c delete mode 100644 external/badvpn/lwip/src/core/ipv6/mld6.c delete mode 100644 external/badvpn/lwip/src/core/ipv6/nd6.c delete mode 100644 external/badvpn/lwip/src/core/mem.c delete mode 100644 external/badvpn/lwip/src/core/memp.c delete mode 100644 external/badvpn/lwip/src/core/netif.c delete mode 100644 external/badvpn/lwip/src/core/pbuf.c delete mode 100644 external/badvpn/lwip/src/core/raw.c delete mode 100644 external/badvpn/lwip/src/core/snmp/asn1_dec.c delete mode 100644 external/badvpn/lwip/src/core/snmp/asn1_enc.c delete mode 100644 external/badvpn/lwip/src/core/snmp/mib2.c delete mode 100644 external/badvpn/lwip/src/core/snmp/mib_structs.c delete mode 100644 external/badvpn/lwip/src/core/snmp/msg_in.c delete mode 100644 external/badvpn/lwip/src/core/snmp/msg_out.c delete mode 100644 external/badvpn/lwip/src/core/stats.c delete mode 100644 external/badvpn/lwip/src/core/sys.c delete mode 100644 external/badvpn/lwip/src/core/tcp.c delete mode 100644 external/badvpn/lwip/src/core/tcp_in.c delete mode 100644 external/badvpn/lwip/src/core/tcp_out.c delete mode 100644 external/badvpn/lwip/src/core/timers.c delete mode 100644 external/badvpn/lwip/src/core/udp.c delete mode 100644 external/badvpn/lwip/src/include/ipv4/lwip/autoip.h delete mode 100644 external/badvpn/lwip/src/include/ipv4/lwip/icmp.h delete mode 100644 external/badvpn/lwip/src/include/ipv4/lwip/igmp.h delete mode 100644 external/badvpn/lwip/src/include/ipv4/lwip/inet.h delete mode 100644 external/badvpn/lwip/src/include/ipv4/lwip/ip4.h delete mode 100644 external/badvpn/lwip/src/include/ipv4/lwip/ip4_addr.h delete mode 100644 external/badvpn/lwip/src/include/ipv4/lwip/ip_frag.h delete mode 100644 external/badvpn/lwip/src/include/ipv6/lwip/dhcp6.h delete mode 100644 external/badvpn/lwip/src/include/ipv6/lwip/ethip6.h delete mode 100644 external/badvpn/lwip/src/include/ipv6/lwip/icmp6.h delete mode 100644 external/badvpn/lwip/src/include/ipv6/lwip/inet6.h delete mode 100644 external/badvpn/lwip/src/include/ipv6/lwip/ip6.h delete mode 100644 external/badvpn/lwip/src/include/ipv6/lwip/ip6_addr.h delete mode 100644 external/badvpn/lwip/src/include/ipv6/lwip/ip6_frag.h delete mode 100644 external/badvpn/lwip/src/include/ipv6/lwip/mld6.h delete mode 100644 external/badvpn/lwip/src/include/ipv6/lwip/nd6.h delete mode 100644 external/badvpn/lwip/src/include/lwip/api.h delete mode 100644 external/badvpn/lwip/src/include/lwip/api_msg.h delete mode 100644 external/badvpn/lwip/src/include/lwip/arch.h delete mode 100644 external/badvpn/lwip/src/include/lwip/debug.h delete mode 100644 external/badvpn/lwip/src/include/lwip/def.h delete mode 100644 external/badvpn/lwip/src/include/lwip/dhcp.h delete mode 100644 external/badvpn/lwip/src/include/lwip/dns.h delete mode 100644 external/badvpn/lwip/src/include/lwip/err.h delete mode 100644 external/badvpn/lwip/src/include/lwip/inet_chksum.h delete mode 100644 external/badvpn/lwip/src/include/lwip/init.h delete mode 100644 external/badvpn/lwip/src/include/lwip/ip.h delete mode 100644 external/badvpn/lwip/src/include/lwip/ip_addr.h delete mode 100644 external/badvpn/lwip/src/include/lwip/mem.h delete mode 100644 external/badvpn/lwip/src/include/lwip/memp.h delete mode 100644 external/badvpn/lwip/src/include/lwip/memp_std.h delete mode 100644 external/badvpn/lwip/src/include/lwip/netbuf.h delete mode 100644 external/badvpn/lwip/src/include/lwip/netdb.h delete mode 100644 external/badvpn/lwip/src/include/lwip/netif.h delete mode 100644 external/badvpn/lwip/src/include/lwip/netifapi.h delete mode 100644 external/badvpn/lwip/src/include/lwip/opt.h delete mode 100644 external/badvpn/lwip/src/include/lwip/pbuf.h delete mode 100644 external/badvpn/lwip/src/include/lwip/raw.h delete mode 100644 external/badvpn/lwip/src/include/lwip/sio.h delete mode 100644 external/badvpn/lwip/src/include/lwip/snmp.h delete mode 100644 external/badvpn/lwip/src/include/lwip/snmp_asn1.h delete mode 100644 external/badvpn/lwip/src/include/lwip/snmp_msg.h delete mode 100644 external/badvpn/lwip/src/include/lwip/snmp_structs.h delete mode 100644 external/badvpn/lwip/src/include/lwip/sockets.h delete mode 100644 external/badvpn/lwip/src/include/lwip/stats.h delete mode 100644 external/badvpn/lwip/src/include/lwip/sys.h delete mode 100644 external/badvpn/lwip/src/include/lwip/tcp.h delete mode 100644 external/badvpn/lwip/src/include/lwip/tcp_impl.h delete mode 100644 external/badvpn/lwip/src/include/lwip/tcpip.h delete mode 100644 external/badvpn/lwip/src/include/lwip/timers.h delete mode 100644 external/badvpn/lwip/src/include/lwip/udp.h delete mode 100644 external/badvpn/lwip/src/include/netif/etharp.h delete mode 100644 external/badvpn/lwip/src/include/netif/ppp_oe.h delete mode 100644 external/badvpn/lwip/src/include/netif/slipif.h delete mode 100644 external/badvpn/lwip/src/include/posix/netdb.h delete mode 100644 external/badvpn/lwip/src/include/posix/sys/socket.h delete mode 100644 external/badvpn/lwip/src/netif/FILES delete mode 100644 external/badvpn/lwip/src/netif/etharp.c delete mode 100644 external/badvpn/lwip/src/netif/ethernetif.c delete mode 100644 external/badvpn/lwip/src/netif/ppp/auth.c delete mode 100644 external/badvpn/lwip/src/netif/ppp/auth.h delete mode 100644 external/badvpn/lwip/src/netif/ppp/chap.c delete mode 100644 external/badvpn/lwip/src/netif/ppp/chap.h delete mode 100644 external/badvpn/lwip/src/netif/ppp/chpms.c delete mode 100644 external/badvpn/lwip/src/netif/ppp/chpms.h delete mode 100644 external/badvpn/lwip/src/netif/ppp/fsm.c delete mode 100644 external/badvpn/lwip/src/netif/ppp/fsm.h delete mode 100644 external/badvpn/lwip/src/netif/ppp/ipcp.c delete mode 100644 external/badvpn/lwip/src/netif/ppp/ipcp.h delete mode 100644 external/badvpn/lwip/src/netif/ppp/lcp.c delete mode 100644 external/badvpn/lwip/src/netif/ppp/lcp.h delete mode 100644 external/badvpn/lwip/src/netif/ppp/magic.c delete mode 100644 external/badvpn/lwip/src/netif/ppp/magic.h delete mode 100644 external/badvpn/lwip/src/netif/ppp/md5.c delete mode 100644 external/badvpn/lwip/src/netif/ppp/md5.h delete mode 100644 external/badvpn/lwip/src/netif/ppp/pap.c delete mode 100644 external/badvpn/lwip/src/netif/ppp/pap.h delete mode 100644 external/badvpn/lwip/src/netif/ppp/ppp.c delete mode 100644 external/badvpn/lwip/src/netif/ppp/ppp.h delete mode 100644 external/badvpn/lwip/src/netif/ppp/ppp_impl.h delete mode 100644 external/badvpn/lwip/src/netif/ppp/ppp_oe.c delete mode 100644 external/badvpn/lwip/src/netif/ppp/pppdebug.h delete mode 100644 external/badvpn/lwip/src/netif/ppp/randm.c delete mode 100644 external/badvpn/lwip/src/netif/ppp/randm.h delete mode 100644 external/badvpn/lwip/src/netif/ppp/readme.txt delete mode 100644 external/badvpn/lwip/src/netif/ppp/vj.c delete mode 100644 external/badvpn/lwip/src/netif/ppp/vj.h delete mode 100644 external/badvpn/lwip/src/netif/slipif.c delete mode 100644 external/badvpn/lwip/test/unit/core/test_mem.c delete mode 100644 external/badvpn/lwip/test/unit/core/test_mem.h delete mode 100644 external/badvpn/lwip/test/unit/core/test_pbuf.c delete mode 100644 external/badvpn/lwip/test/unit/core/test_pbuf.h delete mode 100644 external/badvpn/lwip/test/unit/dhcp/test_dhcp.c delete mode 100644 external/badvpn/lwip/test/unit/dhcp/test_dhcp.h delete mode 100644 external/badvpn/lwip/test/unit/etharp/test_etharp.c delete mode 100644 external/badvpn/lwip/test/unit/etharp/test_etharp.h delete mode 100644 external/badvpn/lwip/test/unit/lwip_check.h delete mode 100644 external/badvpn/lwip/test/unit/lwip_unittests.c delete mode 100644 external/badvpn/lwip/test/unit/lwipopts.h delete mode 100644 external/badvpn/lwip/test/unit/tcp/tcp_helper.c delete mode 100644 external/badvpn/lwip/test/unit/tcp/tcp_helper.h delete mode 100644 external/badvpn/lwip/test/unit/tcp/test_tcp.c delete mode 100644 external/badvpn/lwip/test/unit/tcp/test_tcp.h delete mode 100644 external/badvpn/lwip/test/unit/tcp/test_tcp_oos.c delete mode 100644 external/badvpn/lwip/test/unit/tcp/test_tcp_oos.h delete mode 100644 external/badvpn/lwip/test/unit/udp/test_udp.c delete mode 100644 external/badvpn/lwip/test/unit/udp/test_udp.h delete mode 100644 external/badvpn/misc/BRefTarget.h delete mode 100644 external/badvpn/misc/Utf16Decoder.h delete mode 100644 external/badvpn/misc/Utf16Encoder.h delete mode 100644 external/badvpn/misc/Utf8Decoder.h delete mode 100644 external/badvpn/misc/Utf8Encoder.h delete mode 100644 external/badvpn/misc/arp_proto.h delete mode 100644 external/badvpn/misc/array_length.h delete mode 100644 external/badvpn/misc/balign.h delete mode 100644 external/badvpn/misc/balloc.h delete mode 100644 external/badvpn/misc/blimits.h delete mode 100644 external/badvpn/misc/bsize.h delete mode 100644 external/badvpn/misc/bsort.h delete mode 100644 external/badvpn/misc/bstring.h delete mode 100644 external/badvpn/misc/byteorder.h delete mode 100644 external/badvpn/misc/cmdline.h delete mode 100644 external/badvpn/misc/compare.h delete mode 100644 external/badvpn/misc/concat_strings.h delete mode 100644 external/badvpn/misc/cstring.h delete mode 100644 external/badvpn/misc/dead.h delete mode 100644 external/badvpn/misc/debug.h delete mode 100644 external/badvpn/misc/debugcounter.h delete mode 100644 external/badvpn/misc/debugerror.h delete mode 100644 external/badvpn/misc/dhcp_proto.h delete mode 100644 external/badvpn/misc/ethernet_proto.h delete mode 100644 external/badvpn/misc/exparray.h delete mode 100644 external/badvpn/misc/expstring.h delete mode 100644 external/badvpn/misc/find_char.h delete mode 100644 external/badvpn/misc/find_program.h delete mode 100644 external/badvpn/misc/get_iface_info.h delete mode 100644 external/badvpn/misc/grow_array.h delete mode 100644 external/badvpn/misc/hashfun.h delete mode 100644 external/badvpn/misc/igmp_proto.h delete mode 100644 external/badvpn/misc/ipaddr.h delete mode 100644 external/badvpn/misc/ipaddr6.h delete mode 100644 external/badvpn/misc/ipv4_proto.h delete mode 100644 external/badvpn/misc/ipv6_proto.h delete mode 100644 external/badvpn/misc/loggers_string.h delete mode 100644 external/badvpn/misc/loglevel.h delete mode 100644 external/badvpn/misc/maxalign.h delete mode 100644 external/badvpn/misc/merge.h delete mode 100644 external/badvpn/misc/minmax.h delete mode 100644 external/badvpn/misc/modadd.h delete mode 100644 external/badvpn/misc/mswsock.h delete mode 100644 external/badvpn/misc/nonblocking.h delete mode 100644 external/badvpn/misc/nsskey.h delete mode 100644 external/badvpn/misc/offset.h delete mode 100644 external/badvpn/misc/open_standard_streams.h delete mode 100644 external/badvpn/misc/overflow.h delete mode 100644 external/badvpn/misc/packed.h delete mode 100644 external/badvpn/misc/parse_number.h delete mode 100644 external/badvpn/misc/print_macros.h delete mode 100644 external/badvpn/misc/read_file.h delete mode 100644 external/badvpn/misc/read_write_int.h delete mode 100644 external/badvpn/misc/socks_proto.h delete mode 100644 external/badvpn/misc/sslsocket.h delete mode 100644 external/badvpn/misc/stdbuf_cmdline.h delete mode 100644 external/badvpn/misc/strdup.h delete mode 100644 external/badvpn/misc/string_begins_with.h delete mode 100644 external/badvpn/misc/substring.h delete mode 100644 external/badvpn/misc/udp_proto.h delete mode 100644 external/badvpn/misc/unicode_funcs.h delete mode 100644 external/badvpn/misc/version.h delete mode 100644 external/badvpn/misc/write_file.h delete mode 100644 external/badvpn/ncd-request/CMakeLists.txt delete mode 100644 external/badvpn/ncd-request/ncd-request.c delete mode 100644 external/badvpn/ncd/CMakeLists.txt delete mode 100644 external/badvpn/ncd/NCDAst.c delete mode 100644 external/badvpn/ncd/NCDAst.h delete mode 100644 external/badvpn/ncd/NCDBuildProgram.c delete mode 100644 external/badvpn/ncd/NCDBuildProgram.h delete mode 100644 external/badvpn/ncd/NCDConfigParser.c delete mode 100644 external/badvpn/ncd/NCDConfigParser.h delete mode 100644 external/badvpn/ncd/NCDConfigParser_parse.y delete mode 100644 external/badvpn/ncd/NCDConfigTokenizer.c delete mode 100644 external/badvpn/ncd/NCDConfigTokenizer.h delete mode 100644 external/badvpn/ncd/NCDInterpProcess.c delete mode 100644 external/badvpn/ncd/NCDInterpProcess.h delete mode 100644 external/badvpn/ncd/NCDInterpProg.c delete mode 100644 external/badvpn/ncd/NCDInterpProg.h delete mode 100644 external/badvpn/ncd/NCDInterpProg_hash.h delete mode 100644 external/badvpn/ncd/NCDInterpreter.c delete mode 100644 external/badvpn/ncd/NCDInterpreter.h delete mode 100644 external/badvpn/ncd/NCDMethodIndex.c delete mode 100644 external/badvpn/ncd/NCDMethodIndex.h delete mode 100644 external/badvpn/ncd/NCDMethodIndex_hash.h delete mode 100644 external/badvpn/ncd/NCDModule.c delete mode 100644 external/badvpn/ncd/NCDModule.h delete mode 100644 external/badvpn/ncd/NCDModuleIndex.c delete mode 100644 external/badvpn/ncd/NCDModuleIndex.h delete mode 100644 external/badvpn/ncd/NCDModuleIndex_mhash.h delete mode 100644 external/badvpn/ncd/NCDObject.c delete mode 100644 external/badvpn/ncd/NCDObject.h delete mode 100644 external/badvpn/ncd/NCDPlaceholderDb.c delete mode 100644 external/badvpn/ncd/NCDPlaceholderDb.h delete mode 100644 external/badvpn/ncd/NCDStringIndex.c delete mode 100644 external/badvpn/ncd/NCDStringIndex.h delete mode 100644 external/badvpn/ncd/NCDStringIndex_hash.h delete mode 100644 external/badvpn/ncd/NCDSugar.c delete mode 100644 external/badvpn/ncd/NCDSugar.h delete mode 100644 external/badvpn/ncd/NCDVal.c delete mode 100644 external/badvpn/ncd/NCDVal.h delete mode 100644 external/badvpn/ncd/NCDValCons.c delete mode 100644 external/badvpn/ncd/NCDValCons.h delete mode 100644 external/badvpn/ncd/NCDValGenerator.c delete mode 100644 external/badvpn/ncd/NCDValGenerator.h delete mode 100644 external/badvpn/ncd/NCDValParser.c delete mode 100644 external/badvpn/ncd/NCDValParser.h delete mode 100644 external/badvpn/ncd/NCDValParser_parse.y delete mode 100644 external/badvpn/ncd/NCDVal_maptree.h delete mode 100644 external/badvpn/ncd/README delete mode 100644 external/badvpn/ncd/emncd.c delete mode 100644 external/badvpn/ncd/emncd.html delete mode 100644 external/badvpn/ncd/examples/dbus_start.ncd delete mode 100644 external/badvpn/ncd/examples/dhcpd.conf.template delete mode 100644 external/badvpn/ncd/examples/directory_updater.ncd delete mode 100644 external/badvpn/ncd/examples/events.ncd delete mode 100644 external/badvpn/ncd/examples/igmpproxy.conf.template delete mode 100644 external/badvpn/ncd/examples/make_dhcp_config.ncd delete mode 100644 external/badvpn/ncd/examples/make_igmpproxy_config.ncd delete mode 100644 external/badvpn/ncd/examples/network.ncd delete mode 100644 external/badvpn/ncd/examples/onoff_server.ncdi delete mode 100644 external/badvpn/ncd/examples/onoff_server_test.ncd delete mode 100644 external/badvpn/ncd/examples/router/README delete mode 100644 external/badvpn/ncd/examples/router/add-port-forwarding delete mode 100644 external/badvpn/ncd/examples/router/dhcp_server.ncdi delete mode 100644 external/badvpn/ncd/examples/router/list-port-forwardings delete mode 100644 external/badvpn/ncd/examples/router/ncd.conf delete mode 100644 external/badvpn/ncd/examples/router/network.ncdi delete mode 100644 external/badvpn/ncd/examples/router/network_control_server.ncdi delete mode 100644 external/badvpn/ncd/examples/router/port_forwarding.ncdi delete mode 100644 external/badvpn/ncd/examples/router/pppoe.ncdi delete mode 100644 external/badvpn/ncd/examples/router/remove-port-forwarding delete mode 100644 external/badvpn/ncd/examples/router/unbound.ncdi delete mode 100644 external/badvpn/ncd/examples/tcp_echo_client.ncd delete mode 100644 external/badvpn/ncd/examples/tcp_echo_server.ncd delete mode 100644 external/badvpn/ncd/extra/BEventLock.c delete mode 100644 external/badvpn/ncd/extra/BEventLock.h delete mode 100644 external/badvpn/ncd/extra/NCDBProcessOpts.c delete mode 100644 external/badvpn/ncd/extra/NCDBProcessOpts.h delete mode 100644 external/badvpn/ncd/extra/NCDBuf.c delete mode 100644 external/badvpn/ncd/extra/NCDBuf.h delete mode 100644 external/badvpn/ncd/extra/NCDIfConfig.c delete mode 100644 external/badvpn/ncd/extra/NCDIfConfig.h delete mode 100644 external/badvpn/ncd/extra/NCDInterfaceMonitor.c delete mode 100644 external/badvpn/ncd/extra/NCDInterfaceMonitor.h delete mode 100644 external/badvpn/ncd/extra/NCDRequestClient.c delete mode 100644 external/badvpn/ncd/extra/NCDRequestClient.h delete mode 100644 external/badvpn/ncd/extra/NCDRfkillMonitor.c delete mode 100644 external/badvpn/ncd/extra/NCDRfkillMonitor.h delete mode 100644 external/badvpn/ncd/extra/address_utils.h delete mode 100644 external/badvpn/ncd/extra/build_cmdline.c delete mode 100644 external/badvpn/ncd/extra/build_cmdline.h delete mode 100644 external/badvpn/ncd/extra/make_fast_names.h delete mode 100644 external/badvpn/ncd/extra/value_utils.h delete mode 100644 external/badvpn/ncd/include_linux_input.c delete mode 100644 external/badvpn/ncd/make_name_indices.h delete mode 100644 external/badvpn/ncd/modules/alias.c delete mode 100644 external/badvpn/ncd/modules/arithmetic.c delete mode 100644 external/badvpn/ncd/modules/assert.c delete mode 100644 external/badvpn/ncd/modules/backtrack.c delete mode 100644 external/badvpn/ncd/modules/blocker.c delete mode 100644 external/badvpn/ncd/modules/buffer.c delete mode 100644 external/badvpn/ncd/modules/buffer_chunks_tree.h delete mode 100644 external/badvpn/ncd/modules/call2.c delete mode 100644 external/badvpn/ncd/modules/choose.c delete mode 100644 external/badvpn/ncd/modules/command_template.c delete mode 100644 external/badvpn/ncd/modules/command_template.h delete mode 100644 external/badvpn/ncd/modules/concat.c delete mode 100644 external/badvpn/ncd/modules/daemon.c delete mode 100644 external/badvpn/ncd/modules/depend.c delete mode 100644 external/badvpn/ncd/modules/depend_scope.c delete mode 100644 external/badvpn/ncd/modules/dynamic_depend.c delete mode 100644 external/badvpn/ncd/modules/event_template.c delete mode 100644 external/badvpn/ncd/modules/event_template.h delete mode 100644 external/badvpn/ncd/modules/exit.c delete mode 100644 external/badvpn/ncd/modules/explode.c delete mode 100644 external/badvpn/ncd/modules/file.c delete mode 100644 external/badvpn/ncd/modules/file_open.c delete mode 100644 external/badvpn/ncd/modules/foreach.c delete mode 100644 external/badvpn/ncd/modules/from_string.c delete mode 100644 external/badvpn/ncd/modules/getargs.c delete mode 100644 external/badvpn/ncd/modules/getenv.c delete mode 100644 external/badvpn/ncd/modules/if.c delete mode 100644 external/badvpn/ncd/modules/imperative.c delete mode 100644 external/badvpn/ncd/modules/implode.c delete mode 100644 external/badvpn/ncd/modules/index.c delete mode 100644 external/badvpn/ncd/modules/list.c delete mode 100644 external/badvpn/ncd/modules/load_module.c delete mode 100644 external/badvpn/ncd/modules/log.c delete mode 100644 external/badvpn/ncd/modules/logical.c delete mode 100644 external/badvpn/ncd/modules/modules.h delete mode 100644 external/badvpn/ncd/modules/multidepend.c delete mode 100644 external/badvpn/ncd/modules/net_backend_badvpn.c delete mode 100644 external/badvpn/ncd/modules/net_backend_rfkill.c delete mode 100644 external/badvpn/ncd/modules/net_backend_waitdevice.c delete mode 100644 external/badvpn/ncd/modules/net_backend_waitlink.c delete mode 100644 external/badvpn/ncd/modules/net_backend_wpa_supplicant.c delete mode 100644 external/badvpn/ncd/modules/net_dns.c delete mode 100644 external/badvpn/ncd/modules/net_iptables.c delete mode 100644 external/badvpn/ncd/modules/net_ipv4_addr.c delete mode 100644 external/badvpn/ncd/modules/net_ipv4_addr_in_network.c delete mode 100644 external/badvpn/ncd/modules/net_ipv4_arp_probe.c delete mode 100644 external/badvpn/ncd/modules/net_ipv4_dhcp.c delete mode 100644 external/badvpn/ncd/modules/net_ipv4_route.c delete mode 100644 external/badvpn/ncd/modules/net_ipv6_addr.c delete mode 100644 external/badvpn/ncd/modules/net_ipv6_addr_in_network.c delete mode 100644 external/badvpn/ncd/modules/net_ipv6_route.c delete mode 100644 external/badvpn/ncd/modules/net_ipv6_wait_dynamic_addr.c delete mode 100644 external/badvpn/ncd/modules/net_up.c delete mode 100644 external/badvpn/ncd/modules/net_watch_interfaces.c delete mode 100644 external/badvpn/ncd/modules/netmask.c delete mode 100644 external/badvpn/ncd/modules/ondemand.c delete mode 100644 external/badvpn/ncd/modules/parse.c delete mode 100644 external/badvpn/ncd/modules/print.c delete mode 100644 external/badvpn/ncd/modules/process_manager.c delete mode 100644 external/badvpn/ncd/modules/reboot.c delete mode 100644 external/badvpn/ncd/modules/ref.c delete mode 100644 external/badvpn/ncd/modules/regex_match.c delete mode 100644 external/badvpn/ncd/modules/run.c delete mode 100644 external/badvpn/ncd/modules/runonce.c delete mode 100644 external/badvpn/ncd/modules/sleep.c delete mode 100644 external/badvpn/ncd/modules/socket.c delete mode 100644 external/badvpn/ncd/modules/spawn.c delete mode 100644 external/badvpn/ncd/modules/strcmp.c delete mode 100644 external/badvpn/ncd/modules/substr.c delete mode 100644 external/badvpn/ncd/modules/sys_evdev.c delete mode 100644 external/badvpn/ncd/modules/sys_request_client.c delete mode 100644 external/badvpn/ncd/modules/sys_request_server.c delete mode 100644 external/badvpn/ncd/modules/sys_start_process.c delete mode 100644 external/badvpn/ncd/modules/sys_watch_directory.c delete mode 100644 external/badvpn/ncd/modules/sys_watch_input.c delete mode 100644 external/badvpn/ncd/modules/sys_watch_usb.c delete mode 100644 external/badvpn/ncd/modules/timer.c delete mode 100644 external/badvpn/ncd/modules/to_string.c delete mode 100644 external/badvpn/ncd/modules/try.c delete mode 100644 external/badvpn/ncd/modules/value.c delete mode 100644 external/badvpn/ncd/modules/value_maptree.h delete mode 100644 external/badvpn/ncd/modules/valuemetic.c delete mode 100644 external/badvpn/ncd/modules/var.c delete mode 100644 external/badvpn/ncd/ncd.c delete mode 100644 external/badvpn/ncd/ncd.h delete mode 100644 external/badvpn/ncd/parse_linux_input.sh delete mode 100644 external/badvpn/ncd/static_strings.h delete mode 100644 external/badvpn/ncd/tests/addr_in_network.ncd delete mode 100644 external/badvpn/ncd/tests/alias.ncd delete mode 100644 external/badvpn/ncd/tests/arithmetic.ncd delete mode 100644 external/badvpn/ncd/tests/backtracking.ncd delete mode 100644 external/badvpn/ncd/tests/buffer.ncd delete mode 100644 external/badvpn/ncd/tests/call.ncd delete mode 100644 external/badvpn/ncd/tests/concat.ncd delete mode 100644 external/badvpn/ncd/tests/depend.ncd delete mode 100644 external/badvpn/ncd/tests/depend_scope.ncd delete mode 100644 external/badvpn/ncd/tests/escape_and_nulls.ncd delete mode 100644 external/badvpn/ncd/tests/explode.ncd delete mode 100644 external/badvpn/ncd/tests/foreach.ncd delete mode 100644 external/badvpn/ncd/tests/if.ncd delete mode 100644 external/badvpn/ncd/tests/implode.ncd delete mode 100644 external/badvpn/ncd/tests/include.ncd delete mode 100644 external/badvpn/ncd/tests/include_included.ncdi delete mode 100644 external/badvpn/ncd/tests/include_included2.ncdi delete mode 100644 external/badvpn/ncd/tests/logical.ncd delete mode 100644 external/badvpn/ncd/tests/multidepend.ncd delete mode 100644 external/badvpn/ncd/tests/netmask.ncd delete mode 100644 external/badvpn/ncd/tests/parse.ncd delete mode 100644 external/badvpn/ncd/tests/process_manager.ncd delete mode 100644 external/badvpn/ncd/tests/regex.ncd delete mode 100644 external/badvpn/ncd/tests/run_tests delete mode 100644 external/badvpn/ncd/tests/strings.ncd delete mode 100644 external/badvpn/ncd/tests/substr.ncd delete mode 100644 external/badvpn/ncd/tests/turing.ncd delete mode 100644 external/badvpn/ncd/tests/value.ncd delete mode 100644 external/badvpn/ncd/tests/value_substr.ncd delete mode 100644 external/badvpn/nspr_support/BSSLConnection.c delete mode 100644 external/badvpn/nspr_support/BSSLConnection.h delete mode 100644 external/badvpn/nspr_support/CMakeLists.txt delete mode 100644 external/badvpn/nspr_support/DummyPRFileDesc.c delete mode 100644 external/badvpn/nspr_support/DummyPRFileDesc.h delete mode 100644 external/badvpn/predicate/BPredicate.c delete mode 100644 external/badvpn/predicate/BPredicate.h delete mode 100644 external/badvpn/predicate/BPredicate.l delete mode 100644 external/badvpn/predicate/BPredicate.y delete mode 100644 external/badvpn/predicate/BPredicate_internal.h delete mode 100644 external/badvpn/predicate/BPredicate_parser.h delete mode 100644 external/badvpn/predicate/CMakeLists.txt delete mode 100644 external/badvpn/predicate/LexMemoryBufferInput.h delete mode 100644 external/badvpn/protocol/addr.bproto delete mode 100644 external/badvpn/protocol/addr.h delete mode 100644 external/badvpn/protocol/dataproto.h delete mode 100644 external/badvpn/protocol/fragmentproto.h delete mode 100644 external/badvpn/protocol/msgproto.bproto delete mode 100644 external/badvpn/protocol/msgproto.h delete mode 100644 external/badvpn/protocol/packetproto.h delete mode 100644 external/badvpn/protocol/requestproto.h delete mode 100644 external/badvpn/protocol/scproto.h delete mode 100644 external/badvpn/protocol/spproto.h delete mode 100644 external/badvpn/protocol/udpgw_proto.h delete mode 100644 external/badvpn/random/BRandom2.c delete mode 100644 external/badvpn/random/BRandom2.h delete mode 100644 external/badvpn/random/CMakeLists.txt delete mode 100644 external/badvpn/scripts/cmake delete mode 100644 external/badvpn/scripts/copy_nss delete mode 100644 external/badvpn/scripts/toolchain.cmake delete mode 100644 external/badvpn/security/BEncryption.c delete mode 100644 external/badvpn/security/BEncryption.h delete mode 100644 external/badvpn/security/BHash.c delete mode 100644 external/badvpn/security/BHash.h delete mode 100644 external/badvpn/security/BRandom.c delete mode 100644 external/badvpn/security/BRandom.h delete mode 100644 external/badvpn/security/BSecurity.c delete mode 100644 external/badvpn/security/BSecurity.h delete mode 100644 external/badvpn/security/CMakeLists.txt delete mode 100644 external/badvpn/security/OTPCalculator.c delete mode 100644 external/badvpn/security/OTPCalculator.h delete mode 100644 external/badvpn/security/OTPChecker.c delete mode 100644 external/badvpn/security/OTPChecker.h delete mode 100644 external/badvpn/security/OTPGenerator.c delete mode 100644 external/badvpn/security/OTPGenerator.h delete mode 100644 external/badvpn/server/CMakeLists.txt delete mode 100644 external/badvpn/server/badvpn-server.8 delete mode 100644 external/badvpn/server/server.c delete mode 100644 external/badvpn/server/server.h delete mode 100644 external/badvpn/server_connection/CMakeLists.txt delete mode 100644 external/badvpn/server_connection/SCKeepaliveSource.c delete mode 100644 external/badvpn/server_connection/SCKeepaliveSource.h delete mode 100644 external/badvpn/server_connection/ServerConnection.c delete mode 100644 external/badvpn/server_connection/ServerConnection.h delete mode 100644 external/badvpn/socksclient/BSocksClient.c delete mode 100644 external/badvpn/socksclient/BSocksClient.h delete mode 100644 external/badvpn/socksclient/CMakeLists.txt delete mode 100644 external/badvpn/stringmap/BStringMap.c delete mode 100644 external/badvpn/stringmap/BStringMap.h delete mode 100644 external/badvpn/stringmap/CMakeLists.txt delete mode 100644 external/badvpn/structure/BAVL.h delete mode 100644 external/badvpn/structure/CAvl.h delete mode 100644 external/badvpn/structure/CAvl_decl.h delete mode 100644 external/badvpn/structure/CAvl_footer.h delete mode 100644 external/badvpn/structure/CAvl_header.h delete mode 100644 external/badvpn/structure/CAvl_impl.h delete mode 100644 external/badvpn/structure/CHash.h delete mode 100644 external/badvpn/structure/CHash_decl.h delete mode 100644 external/badvpn/structure/CHash_footer.h delete mode 100644 external/badvpn/structure/CHash_header.h delete mode 100644 external/badvpn/structure/CHash_impl.h delete mode 100644 external/badvpn/structure/ChunkBuffer2.h delete mode 100644 external/badvpn/structure/IndexedList.h delete mode 100644 external/badvpn/structure/IndexedList_tree.h delete mode 100644 external/badvpn/structure/LinkedList0.h delete mode 100644 external/badvpn/structure/LinkedList1.h delete mode 100644 external/badvpn/structure/LinkedList3.h delete mode 100644 external/badvpn/structure/SAvl.h delete mode 100644 external/badvpn/structure/SAvl_decl.h delete mode 100644 external/badvpn/structure/SAvl_footer.h delete mode 100644 external/badvpn/structure/SAvl_header.h delete mode 100644 external/badvpn/structure/SAvl_impl.h delete mode 100644 external/badvpn/structure/SAvl_tree.h delete mode 100644 external/badvpn/structure/SLinkedList.h delete mode 100644 external/badvpn/structure/SLinkedList_decl.h delete mode 100644 external/badvpn/structure/SLinkedList_footer.h delete mode 100644 external/badvpn/structure/SLinkedList_header.h delete mode 100644 external/badvpn/structure/SLinkedList_impl.h delete mode 100644 external/badvpn/system/BAddr.h delete mode 100644 external/badvpn/system/BConnection.h delete mode 100644 external/badvpn/system/BConnectionGeneric.h delete mode 100644 external/badvpn/system/BConnection_unix.c delete mode 100644 external/badvpn/system/BConnection_unix.h delete mode 100644 external/badvpn/system/BConnection_win.c delete mode 100644 external/badvpn/system/BConnection_win.h delete mode 100644 external/badvpn/system/BDatagram.h delete mode 100644 external/badvpn/system/BDatagram_unix.c delete mode 100644 external/badvpn/system/BDatagram_unix.h delete mode 100644 external/badvpn/system/BDatagram_win.c delete mode 100644 external/badvpn/system/BDatagram_win.h delete mode 100644 external/badvpn/system/BInputProcess.c delete mode 100644 external/badvpn/system/BInputProcess.h delete mode 100644 external/badvpn/system/BLockReactor.c delete mode 100644 external/badvpn/system/BLockReactor.h delete mode 100644 external/badvpn/system/BNetwork.c delete mode 100644 external/badvpn/system/BNetwork.h delete mode 100644 external/badvpn/system/BProcess.c delete mode 100644 external/badvpn/system/BProcess.h delete mode 100644 external/badvpn/system/BReactor.h delete mode 100644 external/badvpn/system/BReactor_badvpn.c delete mode 100644 external/badvpn/system/BReactor_badvpn.h delete mode 100644 external/badvpn/system/BReactor_badvpn_timerstree.h delete mode 100644 external/badvpn/system/BReactor_emscripten.c delete mode 100644 external/badvpn/system/BReactor_emscripten.h delete mode 100644 external/badvpn/system/BReactor_glib.c delete mode 100644 external/badvpn/system/BReactor_glib.h delete mode 100644 external/badvpn/system/BSignal.c delete mode 100644 external/badvpn/system/BSignal.h delete mode 100644 external/badvpn/system/BThreadSignal.c delete mode 100644 external/badvpn/system/BThreadSignal.h delete mode 100644 external/badvpn/system/BTime.c delete mode 100644 external/badvpn/system/BTime.h delete mode 100644 external/badvpn/system/BUnixSignal.c delete mode 100644 external/badvpn/system/BUnixSignal.h delete mode 100644 external/badvpn/system/CMakeLists.txt delete mode 100644 external/badvpn/tests/CMakeLists.txt delete mode 100644 external/badvpn/tests/bproto_test.bproto delete mode 100644 external/badvpn/tests/bproto_test.c delete mode 100644 external/badvpn/tests/chunkbuffer2_test.c delete mode 100644 external/badvpn/tests/threadwork_test.c delete mode 100644 external/badvpn/threadwork/BThreadWork.c delete mode 100644 external/badvpn/threadwork/BThreadWork.h delete mode 100644 external/badvpn/threadwork/CMakeLists.txt delete mode 100644 external/badvpn/tun2socks/CMakeLists.txt delete mode 100644 external/badvpn/tun2socks/SocksUdpGwClient.c delete mode 100644 external/badvpn/tun2socks/SocksUdpGwClient.h delete mode 100644 external/badvpn/tun2socks/badvpn-tun2socks.8 delete mode 100644 external/badvpn/tun2socks/tun2socks.c delete mode 100644 external/badvpn/tun2socks/tun2socks.h delete mode 100644 external/badvpn/tunctl/CMakeLists.txt delete mode 100644 external/badvpn/tunctl/tunctl.c delete mode 100644 external/badvpn/tuntap/BTap.c delete mode 100644 external/badvpn/tuntap/BTap.h delete mode 100644 external/badvpn/tuntap/CMakeLists.txt delete mode 100644 external/badvpn/tuntap/tapwin32-funcs.c delete mode 100644 external/badvpn/tuntap/tapwin32-funcs.h delete mode 100644 external/badvpn/tuntap/wintap-common.h delete mode 100644 external/badvpn/udevmonitor/CMakeLists.txt delete mode 100644 external/badvpn/udevmonitor/NCDUdevCache.c delete mode 100644 external/badvpn/udevmonitor/NCDUdevCache.h delete mode 100644 external/badvpn/udevmonitor/NCDUdevManager.c delete mode 100644 external/badvpn/udevmonitor/NCDUdevManager.h delete mode 100644 external/badvpn/udevmonitor/NCDUdevMonitor.c delete mode 100644 external/badvpn/udevmonitor/NCDUdevMonitor.h delete mode 100644 external/badvpn/udevmonitor/NCDUdevMonitorParser.c delete mode 100644 external/badvpn/udevmonitor/NCDUdevMonitorParser.h delete mode 100644 external/badvpn/udpgw/CMakeLists.txt delete mode 100644 external/badvpn/udpgw/udpgw.c delete mode 100644 external/badvpn/udpgw/udpgw.h delete mode 100644 external/badvpn/udpgw_client/CMakeLists.txt delete mode 100644 external/badvpn/udpgw_client/UdpGwClient.c delete mode 100644 external/badvpn/udpgw_client/UdpGwClient.h delete mode 100644 libnetcipher/.classpath delete mode 100644 libnetcipher/.gitignore delete mode 100644 libnetcipher/.project delete mode 100644 libnetcipher/AndroidManifest.xml delete mode 100644 libnetcipher/build.gradle delete mode 100644 libnetcipher/custom_rules.xml delete mode 100644 libnetcipher/libs/httpclientandroidlib-1.2.1.jar delete mode 100644 libnetcipher/netcipher.pom delete mode 100644 libnetcipher/proguard-project.txt delete mode 100644 libnetcipher/project.properties delete mode 100644 libnetcipher/res/raw/debiancacerts.bks delete mode 100644 libnetcipher/settings.gradle delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/NetCipher.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/client/SocksAwareClientConnOperator.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/client/SocksAwareProxyRoutePlanner.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/client/StrongBuilder.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/client/StrongBuilderBase.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/client/StrongConnectionBuilder.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/client/StrongConstants.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/client/StrongHttpsClient.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/client/StrongSSLSocketFactory.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/client/TlsOnlySocketFactory.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/proxy/OrbotHelper.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/proxy/ProxyHelper.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/proxy/ProxySelector.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/proxy/PsiphonHelper.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/proxy/SetFromMap.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/proxy/SignatureUtils.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/proxy/StatusCallback.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/proxy/TorServiceUtils.java delete mode 100644 libnetcipher/src/info/guardianproject/netcipher/web/WebkitProxy.java create mode 100644 todo.txt diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index 22be7647..00000000 --- a/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 9aa8b970..552eeb42 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,9 +2,7 @@ plugins { id "com.jetbrains.python.envs" version "0.0.26" } -ext.gleanExpireByVersion = 1 apply plugin: 'com.android.application' -apply plugin: "org.mozilla.telemetry.glean-gradle-plugin" apply from: 'variables.gradle' apply plugin: 'kotlin-android' @@ -30,10 +28,6 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } - dexOptions { - preDexLibraries project.ext.preDexLibraries - } - buildTypes { release { minifyEnabled project.ext.minifyEnabled @@ -74,79 +68,60 @@ android { } } dependencies { - /* Android Support Repository dependencies */ + + /* File Support Dependencies */ + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation files('libs/httpclientandroidlib-1.2.1.jar') + /* Android Support Repository Dependencies */ - /* Default Libraries */ - + implementation 'androidx.recyclerview:recyclerview:1.2.1' + implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' + implementation 'com.google.android.material:material:1.5.0' + implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.6.10' + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10' + implementation 'org.apache.commons:commons-text:1.3' + implementation 'androidx.work:work-runtime-ktx:2.8.0-alpha01' + implementation 'androidx.constraintlayout:constraintlayout:2.1.3' + implementation 'com.android.support.constraint:constraint-layout:2.0.4' + implementation 'androidx.preference:preference-ktx:1.2.0' + implementation 'com.android.support:support-annotations:29.0.0' implementation 'androidx.appcompat:appcompat:1.4.1' /* Firefox ABI Splits */ - // implementation "androidx.compose.foundation:foundation:1.0.4" - // implementation "org.mozilla.components:browser-engine-gecko:100.0.20220327143103" - implementation "androidx.compose.foundation:foundation:1.0.4" + implementation "androidx.compose.foundation:foundation:1.1.1" implementation "org.mozilla.components:browser-engine-gecko:100.0.20220327143103" - implementation "org.mozilla.components:service-glean:100.0.20220327143103" implementation "org.mozilla.components:support-rusthttp:100.0.20220327143103" implementation "org.mozilla.components:support-rustlog:100.0.20220327143103" - implementation "org.mozilla.components:browser-icons:100.0.20220327143103" implementation "org.mozilla.components:concept-fetch:100.0.20220327143103" implementation "org.mozilla.components:concept-base:100.0.20220327143103" implementation "org.mozilla.components:support-utils:100.0.20220327143103" - - - /* Android Support Repository dependencies */ - implementation fileTree(dir: 'libs', include: ['*.jar']) - - - /* Default Libraries */ - - implementation 'androidx.appcompat:appcompat:1.4.1' - - /* Firefox ABI Splits */ - - implementation 'androidx.constraintlayout:constraintlayout:2.1.3' - implementation 'com.android.support.constraint:constraint-layout:2.0.4' - implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.preference:preference-ktx:1.2.0' - implementation 'com.google.android.material:material:1.5.0' - implementation 'androidx.appcompat:appcompat:1.4.1' - + /* Analytics */ implementation 'com.flurry.android:analytics:13.1.0@aar' /* Ads Manager */ - implementation 'com.android.support:support-annotations:29.0.0' - implementation 'com.facebook.android:audience-network-sdk:6.6.0' - implementation 'com.mopub.mediation:facebookaudiencenetwork:6.6.0.0' - implementation 'com.applovin:applovin-sdk:+' - implementation 'com.applovin.mediation:facebook-adapter:+' - /* Crawler Service */ - - implementation 'org.jsoup:jsoup:1.13.1' + implementation 'com.facebook.android:audience-network-sdk:6.8.0' + implementation 'com.applovin:applovin-sdk:11.3.1' + implementation 'com.applovin.mediation:facebook-adapter:6.8.0.12' /* Orbot Service */ implementation project(path: ':orbotmanager') /* Helper Libraries */ - implementation 'androidx.work:work-runtime-ktx:2.7.0-alpha05' - implementation files('libs/httpclientandroidlib-1.2.1.jar') + implementation 'com.coolerfall:android-http-download-manager:1.6.3' implementation 'com.android.volley:volley:1.2.1' implementation "net.zetetic:android-database-sqlcipher:4.4.3" implementation "androidx.sqlite:sqlite-ktx:2.2.0" implementation 'androidx.palette:palette-ktx:1.0.0' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'androidx.coordinatorlayout:coordinatorlayout:1.2.0' - implementation 'com.google.android.material:material:1.5.0' - implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.31" - implementation 'org.apache.commons:commons-text:1.3' + implementation 'org.jsoup:jsoup:1.13.1' } diff --git a/app/google-services.json b/app/google-services.json deleted file mode 100755 index 71935c15..00000000 --- a/app/google-services.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "project_info": { - "project_number": "1026582312920", - "firebase_url": "https://genesis-5cc48.firebaseio.com", - "project_id": "genesis-5cc48", - "storage_bucket": "genesis-5cc48.appspot.com" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:1026582312920:android:056aacc3b6f0c3b3f164ad", - "android_client_info": { - "package_name": "com.darkweb.genesissearchengine.production" - } - }, - "oauth_client": [ - { - "client_id": "1026582312920-ciidt1n08e3fh9akdrn38ph6on2c7d95.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIza SyBMzD4SV_-2_2tG9E5a475k5OkwP9V-Naw" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "1026582312920-ciidt1n08e3fh9akdrn38ph6on2c7d95.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/app/libs/mopub-sdk-5.17.0.aar b/app/libs/mopub-sdk-5.17.0.aar deleted file mode 100644 index 32d6a2016125cee000d30b591b5a77ddbbda80c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15244 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

$BG(*0Pn4F@r>CM`N}O5=q;O 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 + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -185,44 +186,61 @@ - + + + + - + android:value="be76c64dae2519d4ab8daaed88298da14c7c294f" /> + - + android:name="applovin.sdk.key" + android:value="hGlhanpemGqPOKKAgaXvhyxwZaG9uD68csy1OadWTNhEgKvBWR7-7KSpyFr6nfZ4KMOuBBV5J49s2LLSg-SVxg" /> + + + + + + + + + + + + + android:exported="false"> + + + + + + + + + + + + android:grantUriPermissions="true" + tools:ignore="ExportedContentProvider"> + + android:exported="false" /> + + android:exported="false" /> + + android:exported="false" /> + + android:exported="false" /> + - \ No newline at end of file diff --git a/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/config.yaml b/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/config.yaml new file mode 100644 index 00000000..354e4582 --- /dev/null +++ b/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/config.yaml @@ -0,0 +1,56 @@ +# Contents of /data/local/tmp/com.yourcompany.yourapp-geckoview-config.yaml + +env: + MOZ_LOG: nsHttp:5 + + +prefs: + network.proxy.type: 1 + # network.proxy.socks: "127.0.0.1" + # network.proxy.socks_port: 9050 + network.proxy.socks_version: 5 + network.proxy.socks_remote_dns: true + permissions.default.image: 1 + browser.display.show_image_placeholders: true + browser.cache.disk.enable: false + browser.cache.memory.enable: true + browser.cache.disk.capacity: 0 + privacy.resistFingerprinting: true + privacy.donottrackheader.enabled: false + privacy.donottrackheader.value: 1 + network.http.sendRefererHeader: 0 + security.checkloaduri: false + security.mixed_content.block_active_content: false + security.mixed_content.block_display_content: false + media.peerconnection.enabled: false //webrtc disabled + browser.cache.disk_cache_ssl: true + signon.formlessCapture.enabled: true + signon.storeWhenAutocompleteOff: true + dom.event.contextmenu.enabled: true + layout.css.visited_links_enabled: true + security.ssl3.ecdhe_rsa_aes_128_sha: true + security.ssl3.ecdhe_ecdsa_aes_128_sha: true + security.ssl3.dhe_rsa_aes_128_sha: true + security.ssl3.rsa_des_ede3_sha: true + security.ssl3.dhe_rsa_aes_256_sha: true + browser.safebrowsing.blockedURIs.enabled: false + media.gmp-provider.enabled: false + browser.send_pings.require_same_host: false + webgl.disabled: false + pdfjs.enableWebGL: false + browser.safebrowsing.malware.enabled: false + security.csp.experimentalEnabled: false + network.http.referer.spoofSource: false + security.OCSP.require: false + security.ssl.require_safe_negotiation: false + privacy.clearOnShutdown.cache: true + privacy.clearOnShutdown.downloads: true + privacy.clearOnShutdown.formdata: true + privacy.clearOnShutdown.history: true + privacy.clearOnShutdown.offlineApps: true + privacy.clearOnShutdown.passwords: true + privacy.clearOnShutdown.sessions: true + privacy.clearOnShutdown.siteSettings: true + + + diff --git a/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/geckoClients.java b/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/geckoClients.java index be05039e..edc54a59 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/geckoClients.java +++ b/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/geckoClients.java @@ -37,7 +37,6 @@ import static org.mozilla.geckoview.StorageController.ClearFlags.PERMISSIONS; import static org.mozilla.geckoview.StorageController.ClearFlags.SITE_DATA; import static org.mozilla.geckoview.StorageController.ClearFlags.SITE_SETTINGS; import org.json.JSONObject; -//import org.mozilla.gecko.PrefsHelper; import org.mozilla.geckoview.ContentBlocking; import org.mozilla.geckoview.GeckoRuntime; import org.mozilla.geckoview.GeckoRuntimeSettings; @@ -64,25 +63,32 @@ public class geckoClients { this.event = event; mSessionID = helperMethod.createRandomID(); - initRuntimeSettings(context); + //initRuntimeSettings(context); if(!isForced && geckoView.getSession()!=null && geckoView.getSession().isOpen()){ mSession = (geckoSession) geckoView.getSession(); } else { if(geckoView.getSession()!=null){ - geckoView.releaseSession(); + //geckoView.releaseSession(); } mSession = new geckoSession(new geckoViewClientCallback(),mSessionID,context, geckoView); - mSession.open(mRuntime); + //mSession.open(mRuntime); mSession.getSettings().setUseTrackingProtection(status.sStatusDoNotTrack); mSession.getSettings().setFullAccessibilityTree(true); mSession.getSettings().setUserAgentMode(USER_AGENT_MODE_MOBILE); mSession.getSettings().setAllowJavascript(status.sSettingJavaStatus); - geckoView.setSession(mSession); + //geckoView.setSession(mSession); } mSession.onSetInitializeFromStartup(); + //onUpdateFont(); + } + + public void postInitRuntime(GeckoView geckoView, AppCompatActivity context){ + initRuntimeSettings(context); + mSession.open(mRuntime); + geckoView.setSession(mSession); onUpdateFont(); } @@ -174,6 +180,19 @@ public class geckoClients } catch (IOException e) { e.printStackTrace(); } + + String mYAML = helperMethod.readFromFile(cacheFile.getPath()); + mYAML = mYAML.replace("# network.proxy.socks: \"127.0.0.1\"","network.proxy.socks: \"127.0.0.1\""); + mYAML = mYAML.replace("# network.proxy.socks_port: 9050","network.proxy.socks_port: 9050"); + mYAML = mYAML.replace("network.proxy.socks: \"127.0.0.1\"","network.proxy.socks: \"127.0.0.1\""); + + StringBuilder buf = new StringBuilder(mYAML); + int portIndex = mYAML.indexOf("network.proxy.socks_port"); + int breakIndex = mYAML.indexOf("\n",portIndex); + mYAML = buf.replace(portIndex, breakIndex,"network.proxy.socks_port: "+ orbotLocalConstants.mSOCKSPort).toString(); + helperMethod.writeToFile(cacheFile.getPath(), mYAML); + + return cacheFile.getAbsolutePath(); } @@ -262,15 +281,6 @@ public class geckoClients } mSettings.build(); - /*PrefsHelper.setPref("browser.cache.disk.enable",true); - PrefsHelper.setPref("browser.cache.memory.enable",true); - PrefsHelper.setPref("browser.cache.disk.capacity",1000); - PrefsHelper.setPref(keys.PROXY_TYPE, 1); - PrefsHelper.setPref(keys.PROXY_SOCKS,"127.0.0.1"); - PrefsHelper.setPref(keys.PROXY_SOCKS_PORT, orbotLocalConstants.mSOCKSPort); - PrefsHelper.setPref(keys.PROXY_SOCKS_VERSION,5); - PrefsHelper.setPref(keys.PROXY_SOCKS_REMOTE_DNS,true);*/ - mRuntime = GeckoRuntime.create(context, mSettings.build()); mRuntime.getSettings().setRemoteDebuggingEnabled(true); installExtension(); @@ -312,7 +322,7 @@ public class geckoClients } @SuppressLint("WrongConstant") - public void updateSetting(NestedGeckoView mNestedGeckoView, AppCompatActivity pcontext){ + public void updateSetting(NestedGeckoView mNestedGeckoView,AppCompatActivity pcontext){ GeckoRuntimeSettings.Builder mSettings = new GeckoRuntimeSettings.Builder(); if(status.sShowImages == 2){ mSettings.configFilePath(getAssetsCacheFile(pcontext, "geckoview-config-noimage.yaml")); @@ -320,7 +330,7 @@ public class geckoClients mSettings.configFilePath(getAssetsCacheFile(pcontext, "geckoview-config.yaml")); } mSettings.build(); - + mRuntime.getSettings().setRemoteDebuggingEnabled(true); mRuntime.getSettings().setRemoteDebuggingEnabled(true); mRuntime.getSettings().setWebFontsEnabled(status.sShowWebFonts); diff --git a/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/geckoDownloadManager.java b/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/geckoDownloadManager.java index ada4701a..20482696 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/geckoDownloadManager.java +++ b/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/geckoDownloadManager.java @@ -28,9 +28,7 @@ class geckoDownloadManager } void downloadFile(WebResponse response, geckoSession session, AppCompatActivity context, eventObserver.eventListener event) { - session - .getUserAgent() - .accept(userAgent -> downloadFile(response, userAgent,context,session,event), + session.getUserAgent().accept(userAgent -> downloadFile(response, userAgent,context,session,event), exception -> { throw new IllegalStateException("Could not get UserAgent string."); }); diff --git a/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/geckoSession.java b/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/geckoSession.java index 0bc60b35..467d55ab 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/geckoSession.java +++ b/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/geckoManager/geckoSession.java @@ -30,7 +30,6 @@ import androidx.core.app.NotificationCompat; import androidx.core.content.FileProvider; import com.hiddenservices.onionservices.constants.constants; import com.hiddenservices.onionservices.constants.enums; -import com.hiddenservices.onionservices.constants.keys; import com.hiddenservices.onionservices.constants.status; import com.hiddenservices.onionservices.constants.strings; import com.hiddenservices.onionservices.dataManager.dataEnums; @@ -388,13 +387,12 @@ geckoSession extends GeckoSession implements MediaSession.Delegate,GeckoSession. PrefsHelper.setPref(keys.PROXY_SOCKS_REMOTE_DNS,true);*/ if(mIsLoaded){ - if(!var2.equals("about:blank") && helperMethod.getHost(var2).endsWith(".onion")){ + if(!mCurrentURL.equals("about:config") && !var2.equals("about:blank") && helperMethod.getHost(var2).endsWith(".onion")){ var2 = var2.replace("www.",""); } mCurrentURL = var2; - - if(!mCurrentURL.equals("about:blank")){ + if(!mCurrentURL.equals("about:config") && !mCurrentURL.equals("about:blank")){ event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID,mCurrentTitle, m_current_url_id, mTheme, this), enums.etype.ON_UPDATE_SEARCH_BAR); mContext.get().runOnUiThread(() -> event.invokeObserver(Arrays.asList(5,mSessionID), enums.etype.progress_update)); } @@ -404,7 +402,7 @@ geckoSession extends GeckoSession implements MediaSession.Delegate,GeckoSession. mThemeChanged = false; } isPageLoading = true; - if(!mCurrentURL.equals("about:blank") && !mCurrentTitle.equals("loading")){ + if(!mCurrentURL.equals("about:config") && !mCurrentURL.equals("about:blank") && !mCurrentTitle.equals("loading")){ mProgress = 5; mContext.get().runOnUiThread(() -> event.invokeObserver(Arrays.asList(5,mSessionID), enums.etype.progress_update)); mThemeChanged = false; @@ -500,7 +498,7 @@ geckoSession extends GeckoSession implements MediaSession.Delegate,GeckoSession. } public void onProgressStart(){ - if(!getCurrentURL().equals("about:blank") && !getCurrentURL().contains("trcip42ymcgvv5hsa7nxpwdnott46ebomnn5pm5lovg5hpszyo4n35yd.onion") && !wasPreviousErrorPage() && !getCurrentURL().startsWith(CONST_GENESIS_URL_CACHED) && !getCurrentURL().startsWith(CONST_GENESIS_URL_CACHED_DARK) && !getCurrentURL().startsWith(CONST_GENESIS_HELP_URL_CACHE) && !getCurrentURL().startsWith(CONST_GENESIS_HELP_URL_CACHE_DARK)){ + if(!getCurrentURL().equals("about:config") && !getCurrentURL().equals("about:blank") && !getCurrentURL().contains("trcip42ymcgvv5hsa7nxpwdnott46ebomnn5pm5lovg5hpszyo4n35yd.onion") && !wasPreviousErrorPage() && !getCurrentURL().startsWith(CONST_GENESIS_URL_CACHED) && !getCurrentURL().startsWith(CONST_GENESIS_URL_CACHED_DARK) && !getCurrentURL().startsWith(CONST_GENESIS_HELP_URL_CACHE) && !getCurrentURL().startsWith(CONST_GENESIS_HELP_URL_CACHE_DARK)){ mContext.get().runOnUiThread(() -> event.invokeObserver(Arrays.asList(5,mSessionID), enums.etype.progress_update)); } } @@ -682,7 +680,7 @@ geckoSession extends GeckoSession implements MediaSession.Delegate,GeckoSession. event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID,mCurrentTitle, m_current_url_id, mTheme, this), enums.etype.ON_UPDATE_SEARCH_BAR); - if(!mCurrentURL.contains("trcip42ymcgvv5hsa7nxpwdnott46ebomnn5pm5lovg5hpszyo4n35yd.onion")){ + if(!m_url.equals("about:config") && !mCurrentURL.contains("trcip42ymcgvv5hsa7nxpwdnott46ebomnn5pm5lovg5hpszyo4n35yd.onion")){ mProgress = 5; onProgressStart(); } @@ -786,11 +784,6 @@ geckoSession extends GeckoSession implements MediaSession.Delegate,GeckoSession. } } - @UiThread - public void onExternalResponse(@NonNull GeckoSession session, @NonNull GeckoSession.WebResponseInfo response){ - - } - @UiThread public void onFirstContentfulPaint(@NonNull GeckoSession var1) { @@ -981,7 +974,7 @@ geckoSession extends GeckoSession implements MediaSession.Delegate,GeckoSession. { if(mDownloadManager.getDownloadURL()!=null && mDownloadManager.getDownloadFile()!=null){ if(!createAndSaveFileFromBase64Url(mDownloadManager.getDownloadURL().toString())){ - pluginController.getInstance().onDownloadInvoke(Arrays.asList(mDownloadManager.getDownloadURL()+"__"+mDownloadManager.getDownloadFile(), Environment.DIRECTORY_DOWNLOADS), pluginEnums.eDownloadManager.M_START_SERVICE); + pluginController.getInstance().onDownloadInvoke(Arrays.asList(mDownloadManager.getDownloadURL(), mDownloadManager.getDownloadFile()), pluginEnums.eDownloadManager.M_WEB_DOWNLOAD_REQUEST); } } } @@ -990,7 +983,7 @@ geckoSession extends GeckoSession implements MediaSession.Delegate,GeckoSession. { if(downloadURL!=null && downloadFile!=null){ if(!createAndSaveFileFromBase64Url(downloadURL.toString())){ - pluginController.getInstance().onDownloadInvoke(Arrays.asList(downloadURL + "__" + downloadFile, Environment.DIRECTORY_DOWNLOADS), pluginEnums.eDownloadManager.M_START_SERVICE); + pluginController.getInstance().onDownloadInvoke(Arrays.asList(downloadURL, downloadFile), pluginEnums.eDownloadManager.M_WEB_DOWNLOAD_REQUEST); } } } @@ -1038,7 +1031,7 @@ geckoSession extends GeckoSession implements MediaSession.Delegate,GeckoSession. String filename; if(url.startsWith("blob")){ - loadUri((String) pluginController.getInstance().onDownloadInvoke(Collections.singletonList(url), pluginEnums.eDownloadManager.M_DOWNLOAD_BLOB)); + loadUri((String) pluginController.getInstance().onDownloadInvoke(Collections.singletonList(url), pluginEnums.eDownloadManager.M_BLOB_DOWNLOAD_REQUEST)); return true; } diff --git a/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/homeController/homeController.java b/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/homeController/homeController.java index 36ced509..13e460d9 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/homeController/homeController.java +++ b/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/homeController/homeController.java @@ -619,7 +619,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba public void initRuntimeSettings() { - mGeckoClient.updateSetting(mGeckoView, homeController.this); + mGeckoClient.updateSetting(mGeckoView, this); } public void onReDrawGeckoview(){ @@ -1894,7 +1894,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba { pluginController.getInstance().onOrbotInvoke(Collections.singletonList(status.mThemeApplying), pluginEnums.eOrbotManager.M_DESTROY); - finishAffinity(); + finishAndRemoveTask(); overridePendingTransition(R.anim.popup_scale_in, R.anim.popup_scale_out); activityContextManager.getInstance().getHomeController().onResetData(); mGeckoClient.onClearAll(); @@ -2127,6 +2127,9 @@ public class homeController extends AppCompatActivity implements ComponentCallba { initTabCountForced(); } + else if(e_type.equals(enums.etype.M_INIT_RUNTIME_SETTINGS)){ + mGeckoClient.postInitRuntime(mGeckoView, homeController.this); + } else if(e_type.equals(enums.etype.M_IS_ERROR_PAGE)) { if(mGeckoClient==null || mGeckoClient.getSession()==null){ diff --git a/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/homeController/homeViewController.java b/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/homeController/homeViewController.java index 59b3270a..dac01284 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/homeController/homeViewController.java +++ b/app/src/main/java/com/hiddenservices/onionservices/appManager/homeManager/homeController/homeViewController.java @@ -43,6 +43,7 @@ import androidx.fragment.app.FragmentContainerView; import androidx.recyclerview.widget.RecyclerView; import com.applovin.mediation.ads.MaxAdView; +import com.hiddenservices.onionservices.appManager.activityContextManager; import com.hiddenservices.onionservices.constants.*; import com.hiddenservices.onionservices.dataManager.dataController; import com.hiddenservices.onionservices.dataManager.dataEnums; @@ -610,7 +611,7 @@ class homeViewController protected Void doInBackground(Void...arg0) { AppCompatActivity temp_context = mContext; int mCounter = 0; - while (!orbotLocalConstants.mIsTorInitialized || !orbotLocalConstants.mNetworkState){ + while (orbotLocalConstants.mSOCKSPort==-1 && (!orbotLocalConstants.mIsTorInitialized || !orbotLocalConstants.mNetworkState)){ try { boolean mFastConnect = status.sSettingIsAppStarted || !status.sRestoreTabs && status.sAppInstalled && status.sSettingDefaultSearchEngine.equals(constants.CONST_BACKEND_GENESIS_URL) && !status.sBridgeStatus && status.sExternalWebsite.equals(strings.GENERIC_EMPTY_STR); @@ -620,7 +621,9 @@ class homeViewController orbotLocalConstants.mTorLogsStatus = "Starting Genesis | Please Wait ..."; mEvent.invokeObserver(Collections.singletonList(status.sSettingDefaultSearchEngine), enums.etype.recheck_orbot); startPostTask(messages.MESSAGE_UPDATE_LOADING_TEXT); - break; + if (orbotLocalConstants.mSOCKSPort!=-1){ + break; + } }else{ orbotLocalConstants.mTorLogsStatus = "No internet connection"; startPostTask(messages.MESSAGE_UPDATE_LOADING_TEXT); @@ -628,7 +631,7 @@ class homeViewController } sleep(500); - if(mCounter>20){ + if(mCounter>20 && orbotLocalConstants.mSOCKSPort!=-1){ break; }else { mCounter+=1; @@ -648,6 +651,10 @@ class homeViewController e.printStackTrace(); } } + mContext.runOnUiThread(() -> { + mEvent.invokeObserver(null, enums.etype.M_INIT_RUNTIME_SETTINGS); + }); + if(!status.sSettingIsAppStarted){ mContext.runOnUiThread(() -> { onDisableSplashScreen(); @@ -1637,6 +1644,12 @@ class homeViewController } if(status.sFullScreenBrowsing){ + int orientation = mContext.getResources().getConfiguration().orientation; + if (orientation == Configuration.ORIENTATION_LANDSCAPE) { + mWebviewContainer.setPadding(0,0,0,helperMethod.pxFromDp(60 + 60)); + } else { + mWebviewContainer.setPadding(0,0,0,helperMethod.pxFromDp(110)); + } } else { if(mAdvertLoaded!=null && (boolean)mAdvertLoaded){ diff --git a/app/src/main/java/com/hiddenservices/onionservices/constants/constants.java b/app/src/main/java/com/hiddenservices/onionservices/constants/constants.java index 1199c161..6e15a6de 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/constants/constants.java +++ b/app/src/main/java/com/hiddenservices/onionservices/constants/constants.java @@ -12,7 +12,7 @@ public class constants public static final String CONST_PRIVACY_POLICY_URL = "http://trcip42ymcgvv5hsa7nxpwdnott46ebomnn5pm5lovg5hpszyo4n35yd.onion/privacy"; public static final String CONST_REPORT_URL = "http://trcip42ymcgvv5hsa7nxpwdnott46ebomnn5pm5lovg5hpszyo4n35yd.onion/report?url="; public static final String CONST_SITEMAP = "http://trcip42ymcgvv5hsa7nxpwdnott46ebomnn5pm5lovg5hpszyo4n35yd.onion/create"; - public static final String CONST_PACKAGE_NAME = "com.darkweb.genesissearchengine.production"; + public static final String CONST_PACKAGE_NAME = "com.hiddenservices.onionservices"; public static final String CONST_GENESIS_ONION = "genesis.onion"; public static final String CONST_GENESIS_ONION_V2 = "trcip42ymcgvv5hsa7nxpwdnott46ebomnn5pm5lovg5hpszyo4n35yd.onion"; diff --git a/app/src/main/java/com/hiddenservices/onionservices/constants/enums.java b/app/src/main/java/com/hiddenservices/onionservices/constants/enums.java index 8ee7f686..f0fcfe26 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/constants/enums.java +++ b/app/src/main/java/com/hiddenservices/onionservices/constants/enums.java @@ -8,7 +8,7 @@ public class enums on_verify_selected_url_menu,FINDER_RESULT_CALLBACK,M_ADMOB_BANNER_RECHECK,M_OPEN_SESSION,M_DOWNLOAD_FAILURE, M_ADVERT_LOADED, welcome, reload,download_folder, M_UPDATE_THEME,M_ON_BANNER_UPDATE, M_LOAD_HOMEPAGE_GENESIS,M_INIT_TAB_COUNT_FORCED,M_SPLASH_DISABLE,M_NEW_LINK_IN_NEW_TAB, M_NEW_LINK_IN_NEW_TAB_LOAD,M_RESET_SUGGESTION, url_triggered, url_triggered_new_tab,url_clear,fetch_favicon,M_OPEN_BOOKMARK_SETTING, M_COPY_URL,url_clear_at,remove_from_database,is_empty,M_HOME_PAGE,M_PRELOAD_URL,ON_KEYBOARD_CLOSE,M_CLOSE_TAB, M_CLOSE_TAB_BACK, - on_close_sesson,on_long_press, on_full_screen,on_handle_external_intent,on_update_suggestion_url,progress_update,progress_update_forced, ON_EXPAND_TOP_BAR,recheck_orbot,on_url_load,on_playstore_load,back_list_empty,start_proxy, ON_UPDATE_THEME, M_NEW_IDENTITY,M_INDEX_WEBSITE, M_NEW_IDENTITY_MESSAGED, M_INITIALIZE_TAB_SINGLE, M_HOME_BUTTON_PRESSED, M_INITIALIZE_TAB_LINK,on_request_completed, on_update_history,on_update_suggestion,M_WELCOME_MESSAGE,ON_FIRST_PAINT, ON_INVOKE_PARSER, ON_LOAD_TAB_ON_RESUME, ON_SESSION_REINIT,on_page_loaded,on_load_error, M_ORBOT_LOADING,download_file_popup,on_init_ads, M_GET_CURRENT_URL,search_update, open_new_tab,open_new_tab_instant + on_close_sesson,on_long_press, on_full_screen,on_handle_external_intent,on_update_suggestion_url,progress_update,progress_update_forced, ON_EXPAND_TOP_BAR,recheck_orbot,on_url_load,on_playstore_load,back_list_empty,start_proxy, ON_UPDATE_THEME, M_NEW_IDENTITY,M_INDEX_WEBSITE, M_INIT_RUNTIME_SETTINGS, M_NEW_IDENTITY_MESSAGED, M_INITIALIZE_TAB_SINGLE, M_HOME_BUTTON_PRESSED, M_INITIALIZE_TAB_LINK,on_request_completed, on_update_history,on_update_suggestion,M_WELCOME_MESSAGE,ON_FIRST_PAINT, ON_INVOKE_PARSER, ON_LOAD_TAB_ON_RESUME, ON_SESSION_REINIT,on_page_loaded,on_load_error, M_ORBOT_LOADING,download_file_popup,on_init_ads, M_GET_CURRENT_URL,search_update, open_new_tab,open_new_tab_instant } /*General Enums*/ diff --git a/app/src/main/java/com/hiddenservices/onionservices/helperManager/helperMethod.java b/app/src/main/java/com/hiddenservices/onionservices/helperManager/helperMethod.java index a87d6473..9622ffd1 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/helperManager/helperMethod.java +++ b/app/src/main/java/com/hiddenservices/onionservices/helperManager/helperMethod.java @@ -6,6 +6,7 @@ import android.animation.AnimatorListenerAdapter; import android.annotation.SuppressLint; import android.app.ActivityManager; import android.app.DownloadManager; +import android.app.PendingIntent; import android.content.ActivityNotFoundException; import android.content.ClipData; import android.content.ClipboardManager; @@ -60,18 +61,27 @@ import com.hiddenservices.onionservices.constants.strings; import com.hiddenservices.onionservices.pluginManager.pluginController; import com.example.myapplication.R; +import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileOutputStream; +import java.io.FileReader; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.lang.ref.WeakReference; import java.lang.reflect.Field; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import java.net.URLConnection; +import java.nio.charset.StandardCharsets; import java.security.Key; +import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; @@ -98,6 +108,33 @@ public class helperMethod { /*Helper Methods General*/ + public static String getFileSizeBadge(long size) { + if (size <= 0) + return "0"; + + final String[] units = new String[] { "B Downloaded", "KB ⇣", "MB ⇣", "GB ⇣", "TB ⇣" }; + int digitGroups = (int) (Math.log10(size) / Math.log10(1024)); + + return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups]; + } + + @SuppressLint({"UnspecifiedImmutableFlag", "LaunchActivityFromNotification"}) + public static PendingIntent onCreateActionIntent(Context pContext, Class pBroadcastReciever, int pNotificationID, String pTitle, int pCommandID){ + PendingIntent pendingIntent; + Intent pendingIntentTrigger = new Intent(pContext, pBroadcastReciever); + pendingIntentTrigger.setAction(pTitle); + pendingIntentTrigger.putExtra("N_ID", pNotificationID); + pendingIntentTrigger.putExtra("N_COMMAND", pCommandID); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + pendingIntent = PendingIntent.getBroadcast(pContext, pNotificationID, pendingIntentTrigger, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + }else{ + pendingIntent = PendingIntent.getBroadcast(pContext, pNotificationID, pendingIntentTrigger, PendingIntent.FLAG_UPDATE_CURRENT); + } + + return pendingIntent; + } + public static int getResId(String resName, Class c) { try { @@ -129,6 +166,8 @@ public class helperMethod return data; } + + public static Object deserialize(byte[] data) throws IOException, ClassNotFoundException { ByteArrayInputStream in = new ByteArrayInputStream(data); ObjectInputStream is = new ObjectInputStream(in); @@ -192,8 +231,36 @@ public class helperMethod } } + public static void writeToFile(String pFilePath, String content){ + Writer writer; + try { + writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(pFilePath), StandardCharsets.UTF_8)); + writer.write(content); + writer.close(); + } catch (Exception ex) { + } + } + + public static String readFromFile(String pFilePath){ + File file = new File(pFilePath); + StringBuilder text = new StringBuilder(); + try { + BufferedReader br = new BufferedReader(new FileReader(file)); + String line; + while ((line = br.readLine()) != null) { + text.append(line); + text.append('\n'); + } + br.close(); + return text.toString(); + } + catch (IOException e) { + return ""; + } + } + public static String completeURL(String pURL){ - if(pURL.equals("about:blank")){ + if(pURL.equals("about:blank") || pURL.equals("about:config")){ return pURL; } URL weburl; @@ -237,7 +304,7 @@ public class helperMethod return UUID.randomUUID().toString(); } - public static int createNotificationID(){ + public static int createUniqueNotificationID(){ Date now = new Date(); int id = Integer.parseInt(new SimpleDateFormat("ddHHmmss", Locale.US).format(now)); return id; @@ -835,7 +902,7 @@ public class helperMethod if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ try { - Uri uri = FileProvider.getUriForFile(context, "com.hiddenservices.genesissearchengine.production.provider", url); + Uri uri = FileProvider.getUriForFile(context, "com.hiddenservices.onionservices.provider", url); Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url.toString())); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); @@ -846,7 +913,7 @@ public class helperMethod } } else{ try { - Uri uri = FileProvider.getUriForFile(context, "com.hiddenservices.genesissearchengine.production.provider", url); + Uri uri = FileProvider.getUriForFile(context, "com.hiddenservices.onionservices.provider", url); Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url.toString())); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); diff --git a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/adPluginManager/admobManager.java b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/adPluginManager/admobManager.java deleted file mode 100644 index e69de29b..00000000 diff --git a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/adPluginManager/mopubManager.java b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/adPluginManager/appLovinManager.java similarity index 86% rename from app/src/main/java/com/hiddenservices/onionservices/pluginManager/adPluginManager/mopubManager.java rename to app/src/main/java/com/hiddenservices/onionservices/pluginManager/adPluginManager/appLovinManager.java index 04da10bf..4c2fc883 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/adPluginManager/mopubManager.java +++ b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/adPluginManager/appLovinManager.java @@ -12,20 +12,20 @@ import com.hiddenservices.onionservices.eventObserver; import com.hiddenservices.onionservices.pluginManager.pluginEnums; import java.lang.ref.WeakReference; import static com.hiddenservices.onionservices.pluginManager.pluginEnums.eAdManagerCallbacks.M_ON_AD_LOAD; -public class mopubManager implements MaxAdViewAdListener +public class appLovinManager implements MaxAdViewAdListener { /*Private Variables */ private eventObserver.eventListener mEvent; private WeakReference mBannerAds; - private int mRequestCount = 0; + private int mRequestCount = 0; private boolean bannerAdsLoaded = false; private boolean bannerAdRequested = false; /*Initializations*/ - public mopubManager(eventObserver.eventListener pEvent, MaxAdView pBannerAds, Context pContext) { + public appLovinManager(eventObserver.eventListener pEvent, MaxAdView pBannerAds, Context pContext) { this.mEvent = pEvent; this.mBannerAds = new WeakReference(pBannerAds); initializeBannerAds(pContext); @@ -33,10 +33,8 @@ public class mopubManager implements MaxAdViewAdListener private void initializeBannerAds(Context pContext){ AdSettings.setDataProcessingOptions( new String[] {} ); - AppLovinSdk.getInstance( pContext ).setMediationProvider( "max" ); - AppLovinSdk.initializeSdk( pContext, configuration -> { - }); + AppLovinSdk.initializeSdk( pContext, configuration -> {}); } /*Local Helper Methods*/ @@ -53,19 +51,7 @@ public class mopubManager implements MaxAdViewAdListener return bannerAdsLoaded; } - /*External Triggers*/ - - public Object onTrigger(pluginEnums.eAdManager pEventType) { - if(pEventType.equals(pluginEnums.eAdManager.M_INITIALIZE_BANNER_ADS)) - { - // loadAds(); - } - else if(pEventType.equals(pluginEnums.eAdManager.M_IS_ADVERT_LOADED)) - { - return isAdvertLoaded(); - } - return null; - } + /* Overriden Methods */ @Override public void onAdExpanded(MaxAd ad) { @@ -115,5 +101,20 @@ public class mopubManager implements MaxAdViewAdListener public void onAdDisplayFailed(MaxAd ad, MaxError error) { } + + /*External Triggers*/ + + public Object onTrigger(pluginEnums.eAdManager pEventType) { + if(pEventType.equals(pluginEnums.eAdManager.M_INITIALIZE_BANNER_ADS)) + { + loadAds(); + } + else if(pEventType.equals(pluginEnums.eAdManager.M_IS_ADVERT_LOADED)) + { + return isAdvertLoaded(); + } + return null; + } + } diff --git a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/adPluginManager/facebookAdsManager.java b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/adPluginManager/facebookAdsManager.java deleted file mode 100644 index 1a9d1570..00000000 --- a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/adPluginManager/facebookAdsManager.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.hiddenservices.onionservices.pluginManager.adPluginManager; - -import static com.hiddenservices.onionservices.pluginManager.pluginEnums.eAdManagerCallbacks.M_ON_AD_CLICK; -import static com.hiddenservices.onionservices.pluginManager.pluginEnums.eAdManagerCallbacks.M_ON_AD_LOAD; -import android.widget.LinearLayout; -import androidx.appcompat.app.AppCompatActivity; -import com.hiddenservices.onionservices.eventObserver; -import com.hiddenservices.onionservices.pluginManager.pluginEnums; -import com.facebook.ads.*; -import java.lang.ref.WeakReference; - -public class facebookAdsManager implements AdListener { - - /*Private Variables */ - - private eventObserver.eventListener mEvent; - private WeakReference mBannerAds; - private AdView adView; - - private boolean bannerAdsLoaded = false; - - /*Initializations*/ - - public facebookAdsManager(eventObserver.eventListener pEvent, LinearLayout pBannerAds, AppCompatActivity pContext) { - this.mEvent = pEvent; - this.mBannerAds = new WeakReference(pBannerAds); - loadAds(pContext, pBannerAds); - } - - /*Local Overrides*/ - @Override - public void onError(Ad ad, AdError adError) { - } - - @Override - public void onAdLoaded(Ad ad) { - bannerAdsLoaded = true; - mEvent.invokeObserver(null, M_ON_AD_LOAD); - } - - @Override - public void onAdClicked(Ad ad) { - mEvent.invokeObserver(null, M_ON_AD_CLICK); - } - - @Override - public void onLoggingImpression(Ad ad) { - } - - - /*Local Helper Methods*/ - - private void loadAds(AppCompatActivity pContext, LinearLayout pLinearLayout){ - AudienceNetworkAds.initialize(pContext); - adView = new AdView(pContext, "IMG_16_9_APP_INSTALL#YOUR_PLACEMENT_ID", AdSize.BANNER_HEIGHT_50); - pLinearLayout.addView(adView); - adView.loadAd(adView.buildLoadAdConfig().withAdListener(this).build()); - } - - - private boolean isAdvertLoaded(){ - return bannerAdsLoaded; - } - - private void onDestroy(){ - adView.destroy(); - } - - /*External Triggers*/ - - public Object onTrigger(pluginEnums.eAdManager pEventType) { - if(pEventType.equals(pluginEnums.eAdManager.M_INITIALIZE_BANNER_ADS)) - { - } - else if(pEventType.equals(pluginEnums.eAdManager.M_IS_ADVERT_LOADED)) - { - return isAdvertLoaded(); - } - else if(pEventType.equals(pluginEnums.eAdManager.M_DESTROY)) - { - onDestroy(); - } - return null; - } -} diff --git a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/blobDownloader.java b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/blobDownloader.java index 9d5b267f..adf5898a 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/blobDownloader.java +++ b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/blobDownloader.java @@ -16,16 +16,17 @@ import java.util.Date; public class blobDownloader { - private Context context; - private NotificationManager nm; + private Context mContext; + private NotificationManager mNotificationManager; public blobDownloader(Context context) { - this.context = context; + this.mContext = context; } @JavascriptInterface public void getBase64FromBlobData(String base64Data) throws IOException { convertBase64StringToPdfAndStoreIt(base64Data); } + public static String getBase64StringFromBlobUrl(String blobUrl){ if(blobUrl.startsWith("blob")){ return "javascript: var xhr = new XMLHttpRequest();" + @@ -60,18 +61,18 @@ public class blobDownloader { os.flush(); if(dwldsPath.exists()) { - NotificationCompat.Builder b = new NotificationCompat.Builder(context, "MY_DL") + NotificationCompat.Builder b = new NotificationCompat.Builder(mContext, "MY_DL") .setDefaults(NotificationCompat.DEFAULT_ALL) .setWhen(System.currentTimeMillis()) .setSmallIcon(R.xml.ic_download) - .setContentTitle("MY TITLE") - .setContentText("MY TEXT CONTENT"); - nm = (NotificationManager) this.context.getSystemService(Context.NOTIFICATION_SERVICE); - if(nm != null) { - nm.notify(notificationId, b.build()); + .setContentTitle("IMAGE_TITLE") + .setContentText("IMAGE_CONTENT"); + mNotificationManager = (NotificationManager) this.mContext.getSystemService(Context.NOTIFICATION_SERVICE); + if(mNotificationManager != null) { + mNotificationManager.notify(notificationId, b.build()); Handler h = new Handler(); long delayInMilliseconds = 5000; - h.postDelayed(() -> nm.cancel(notificationId), delayInMilliseconds); + h.postDelayed(() -> mNotificationManager.cancel(notificationId), delayInMilliseconds); } } } diff --git a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/downloadManager.java b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/downloadManager.java index f64f1137..39e04ea1 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/downloadManager.java +++ b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/downloadManager.java @@ -3,15 +3,11 @@ package com.hiddenservices.onionservices.pluginManager.downloadPluginManager; import android.app.NotificationManager; import android.content.Context; import android.os.Environment; - import androidx.appcompat.app.AppCompatActivity; - -import com.hiddenservices.onionservices.constants.status; import com.hiddenservices.onionservices.eventObserver; import com.hiddenservices.onionservices.helperManager.helperMethod; import com.hiddenservices.onionservices.pluginManager.pluginEnums; import com.hiddenservices.onionservices.pluginManager.pluginReciever.downloadNotificationReciever; - import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.List; @@ -32,82 +28,62 @@ public class downloadManager public downloadManager(WeakReference pAppContext, eventObserver.eventListener pEvent){ this.mAppContext = pAppContext; this.mEvent = pEvent; - - initialize(); } - private void initialize() - { + private void onStartDownload(String pPath, String pFile) { + int mNotificationID = helperMethod.createUniqueNotificationID(); + downloadReciever mFileDownloader = (downloadReciever)new downloadReciever(mAppContext.get(),pPath, pFile, mNotificationID, mEvent, downloadNotificationReciever.class).execute(pPath); + mDownloads.put(mNotificationID,mFileDownloader); } - private void startDownload(String pPath,String pFile) { - int mID = helperMethod.createNotificationID(); - downloadReciever mFileDownloader = (downloadReciever)new downloadReciever(mAppContext.get().getApplicationContext(),pPath, pFile, mID, mEvent, downloadNotificationReciever.class).execute(pPath); - mDownloads.put(mID,mFileDownloader); - } - - private void cancelDownload(int pID) { + private void onCancelDownload(int pID) { if(mDownloads!=null && mDownloads.containsKey(pID)){ downloadReciever mReciever = mDownloads.get(pID); if(mReciever!=null){ mDownloads.get(pID).onCancel(); }else { - try { - if(!status.sSettingIsAppRunning){ - NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.cancelAll(); - } - }catch (Exception ignored){} + NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.cancelAll(); } } } - private void onSwipeDownload(int pID) { - if(mDownloads!=null && mDownloads.get(pID)!=null){ - mDownloads.get(pID).onCancel(); - } - } - - private void onTriggerDownload(int pID) { + private void onDownloadURLRequest(int pID) { if(mDownloads!=null && mDownloads.get(pID)!=null){ mDownloads.get(pID).onTrigger(); } } - private void onStartSercvice(String mURL, String mPath){ - mAppContext.get().startService(downloadService.getDownloadService(mAppContext.get().getApplicationContext(), mURL + "__" + mPath, Environment.DIRECTORY_DOWNLOADS)); + private void onDownloadWebRequest(String mURL, String mPath){ + mAppContext.get().startService(downloadService.getDownloadService(mAppContext.get().getApplicationContext(), mURL, mPath)); } - private String downloadBlob(String pURL){ + private String onDownloadBlobFile(String pURL){ return blobDownloader.getBase64StringFromBlobUrl(pURL); } /* External Triggers */ public Object onTrigger(List pData, pluginEnums.eDownloadManager pEventType) { - if(pEventType.equals(pluginEnums.eDownloadManager.M_DOWNLOAD_FILE)) + if(pEventType.equals(pluginEnums.eDownloadManager.M_START_DOWNLOAD)) { - startDownload((String) pData.get(0),(String)pData.get(1)); + onStartDownload((String) pData.get(0),(String)pData.get(1)); } - else if(pEventType.equals(pluginEnums.eDownloadManager.M_CANCEL)) + else if(pEventType.equals(pluginEnums.eDownloadManager.M_CANCEL_DOWNLOAD)) { - cancelDownload((int) pData.get(0)); + onCancelDownload((int) pData.get(0)); } - else if(pEventType.equals(pluginEnums.eDownloadManager.M_TRIGGER)) + else if(pEventType.equals(pluginEnums.eDownloadManager.M_URL_DOWNLOAD_REQUEST)) { - onTriggerDownload((int) pData.get(0)); + onDownloadURLRequest((int) pData.get(0)); } - else if(pEventType.equals(pluginEnums.eDownloadManager.M_START_SERVICE)) + else if(pEventType.equals(pluginEnums.eDownloadManager.M_WEB_DOWNLOAD_REQUEST)) { - onStartSercvice((String) pData.get(0), (String) pData.get(1)); + onDownloadWebRequest(pData.get(0).toString(), (String) pData.get(1)); } - else if(pEventType.equals(pluginEnums.eDownloadManager.M_DOWNLOAD_BLOB)) + else if(pEventType.equals(pluginEnums.eDownloadManager.M_BLOB_DOWNLOAD_REQUEST)) { - return downloadBlob((String) pData.get(0)); - } - else if(pEventType.equals(pluginEnums.eDownloadManager.M_SWIPE)) - { - onSwipeDownload((int) pData.get(0)); + return onDownloadBlobFile((String) pData.get(0)); } return null; diff --git a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/downloadReciever.java b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/downloadReciever.java index aed2df4c..52d6b805 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/downloadReciever.java +++ b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/downloadReciever.java @@ -9,7 +9,6 @@ import android.app.PendingIntent; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; -import android.content.Intent; import android.graphics.Color; import android.net.Uri; import android.os.AsyncTask; @@ -18,10 +17,8 @@ import android.os.Environment; import android.os.Handler; import android.os.StrictMode; import android.provider.MediaStore; - import androidx.core.app.NotificationCompat; import androidx.core.content.FileProvider; - import com.hiddenservices.onionservices.appManager.activityContextManager; import com.hiddenservices.onionservices.constants.status; import com.hiddenservices.onionservices.eventObserver; @@ -29,20 +26,19 @@ import com.hiddenservices.onionservices.helperManager.helperMethod; import com.hiddenservices.onionservices.libs.netcipher.client.StrongHttpsClient; import com.example.myapplication.R; import org.orbotproject.android.service.wrapper.orbotLocalConstants; - import java.io.File; import java.io.FileOutputStream; +import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.lang.ref.WeakReference; import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URI; import java.net.URL; import java.net.URLConnection; -import java.text.DecimalFormat; import java.util.Collections; - import ch.boye.httpclientandroidlib.HttpResponse; import ch.boye.httpclientandroidlib.client.methods.HttpGet; @@ -52,70 +48,67 @@ import static java.lang.Thread.sleep; public class downloadReciever extends AsyncTask { - @SuppressLint("StaticFieldLeak") - private Context context; - private NotificationManager mNotifyManager; - private NotificationCompat.Builder build; - private OutputStream output; - private InputStream mStream; - private Boolean mIsCanceled = false; - private String PROXY_ADDRESS = "localhost"; - - private int mID; - private String mFileName; - private float mDownloadByte; - private String mURL; + private WeakReference mContext; private eventObserver.eventListener mEvent; + + private NotificationManager mNotifyManager; + private NotificationCompat.Builder mNotificationBuilder; private Class mBroadcastReciever; - public downloadReciever(Context pContext, String pURL, String pFileName, int pID, eventObserver.eventListener pEvent, Class pBroadcastReciever) { - this.context = pContext; + private int mNotificationID; + private float mDownloadByte; + private String mURL; + private String mFileName; + private Boolean mIsCanceled = false; + + public downloadReciever(Context pContext, String pURL, String pFileName, int pNotificationID, eventObserver.eventListener pEvent, Class pBroadcastReciever) { + this.mContext = new WeakReference(pContext); + this.mEvent = pEvent; + this.mFileName = pFileName; this.mURL = pURL; - this.mID = pID; - this.mEvent = pEvent; + this.mNotificationID = pNotificationID; this.mBroadcastReciever = pBroadcastReciever; StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); - - mFileName = pFileName; } + @SuppressLint("UnspecifiedImmutableFlag") protected void onPreExecute() { super.onPreExecute(); - Intent snoozeIntent = new Intent(context, mBroadcastReciever); - snoozeIntent.setAction("Download_Cancelled"); - snoozeIntent.putExtra("N_ID", mID); - snoozeIntent.putExtra("N_COMMAND", 0); - PendingIntent pendingIntent = PendingIntent.getBroadcast(context, mID, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT); + /* Create Pending Intent */ - mNotifyManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - build = new NotificationCompat.Builder(context); + PendingIntent pendingIntentCancel = helperMethod.onCreateActionIntent(mContext.get(), mBroadcastReciever, mNotificationID, "Download_Cancelled",0); + + /* Create Notification */ if(mFileName.length()>30){ mFileName = "..." + mFileName.substring(mFileName.length()-30); } - build.setContentTitle(mFileName) + + mNotifyManager = (NotificationManager) mContext.get().getSystemService(Context.NOTIFICATION_SERVICE); + mNotificationBuilder = new NotificationCompat.Builder(mContext.get()); + mNotificationBuilder.setContentTitle(mFileName) .setContentText("starting...") - .setChannelId(mID + "") + .setChannelId(mNotificationID + "") .setAutoCancel(false) .setDefaults(0) .setColor(Color.parseColor("#84989f")) .setCategory(Notification.CATEGORY_SERVICE) .setPriority(Notification.PRIORITY_DEFAULT) - .addAction(R.drawable.ic_download, "Cancel",pendingIntent) + .addAction(R.drawable.ic_download, "Cancel",pendingIntentCancel) .setSmallIcon(android.R.drawable.stat_sys_download) - .setDeleteIntent(pendingIntent) + .setDeleteIntent(pendingIntentCancel) .setOngoing(false); + /* Notification Channel for Latest Androids */ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - NotificationChannel channel = new NotificationChannel(mID + "", - "Social Media Downloader", - NotificationManager.IMPORTANCE_HIGH); + NotificationChannel channel = new NotificationChannel(mNotificationID + "", "Social Media Downloader", NotificationManager.IMPORTANCE_HIGH); channel.setDescription("no sound"); channel.setSound(null, null); channel.enableLights(false); @@ -123,100 +116,45 @@ public class downloadReciever extends AsyncTask { channel.enableVibration(false); mNotifyManager.createNotificationChannel(channel); } - build.setProgress(100, 0, false); - mNotifyManager.notify(mID, build.build()); - } - - public static String getFileSize(long size) { - if (size <= 0) - return "0"; - - final String[] units = new String[] { "B Downloaded", "KB ⇣", "MB ⇣", "GB ⇣", "TB ⇣" }; - int digitGroups = (int) (Math.log10(size) / Math.log10(1024)); - - return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups]; + mNotificationBuilder.setProgress(100, 0, false); + mNotifyManager.notify(mNotificationID, mNotificationBuilder.build()); } @Override protected String doInBackground(String... f_url) { - int count; int mRequestCode = 0; - if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - try { + OutputStream mOutputStream; + InputStream mInputStream; + + try { + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { String fURL = f_url[0]; URL url = new URL(fURL); HttpURLConnection conection; Proxy proxy; - if(helperMethod.getDomainName(f_url[0]).contains(".onion")){ - proxy = new Proxy(Proxy.Type.SOCKS, InetSocketAddress.createUnresolved(PROXY_ADDRESS, orbotLocalConstants.mSOCKSPort)); + if(helperMethod.getDomainName(fURL).contains(".onion")){ + proxy = new Proxy(Proxy.Type.SOCKS, InetSocketAddress.createUnresolved("localhost", orbotLocalConstants.mSOCKSPort)); conection = (HttpURLConnection) url.openConnection(proxy); }else { Proxy mProxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", orbotLocalConstants.mHTTPPort)); - URLConnection mURLConnection = new URI(f_url[0]).toURL().openConnection(mProxy); + URLConnection mURLConnection = new URI(fURL).toURL().openConnection(mProxy); conection = (HttpURLConnection) mURLConnection; } conection.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0"); conection.setRequestProperty("Accept","*/*"); - conection.connect(); - int lenghtOfFile = conection.getContentLength(); mRequestCode = conection.getResponseCode(); - mStream = conection.getInputStream(); - // Output stream - output = new FileOutputStream(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()+"/"+mFileName)); - byte[] data = new byte[100000]; + mInputStream = conection.getInputStream(); + mOutputStream = new FileOutputStream(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()+"/"+mFileName); + int lenghtOfFile = conection.getContentLength(); - long total = 0; - - while ((count = mStream.read(data)) != -1) { - if(!status.sSettingIsAppRunning){ - return null; - } - total += count; - int cur = (int) ((total * 100) / lenghtOfFile); - if(lenghtOfFile<0){ - cur = (int)total; - mDownloadByte = cur * -1; - }else { - mDownloadByte = cur; - } - publishProgress(Math.min(cur, 100)); - if (Math.min(cur, 100) > 98) { - sleep(500); - } - - output.write(data, 0, count); - - } - - build.setContentText("saving file"); - build.setSmallIcon(android.R.drawable.stat_sys_download); - mNotifyManager.notify(mID, build.build()); - - output.flush(); - output.close(); - mStream.close(); - - } catch (Exception ex) { - if(mRequestCode!=200){ - String mRequestCodeResponse = String.valueOf(mRequestCode); - if(mRequestCodeResponse == null || mRequestCodeResponse.equals("0")){ - mRequestCodeResponse = "\"Unknown\""; - } - - - mEvent.invokeObserver(Collections.singletonList("Request Error | " + mRequestCodeResponse), M_DOWNLOAD_FAILURE); - onCancel(); - } - } - }else { - try { + readStream(mInputStream, mOutputStream, lenghtOfFile); + }else { String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%"; String urlEncoded = Uri.encode(f_url[0], ALLOWED_URI_CHARS); - - StrongHttpsClient httpclient = new StrongHttpsClient(context); + StrongHttpsClient httpclient = new StrongHttpsClient(mContext.get()); if(helperMethod.getDomainName(f_url[0]).contains(".onion")){ httpclient.useProxy(true, "SOCKS", "127.0.0.1", orbotLocalConstants.mSOCKSPort); @@ -226,120 +164,68 @@ public class downloadReciever extends AsyncTask { HttpGet httpget = new HttpGet(urlEncoded); HttpResponse response = httpclient.execute(httpget); - - - InputStream mStream = response.getEntity().getContent(); - + mInputStream = response.getEntity().getContent(); mRequestCode = response.getStatusLine().getStatusCode(); - output = new FileOutputStream(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()+"/"+mFileName)); - byte[] data = new byte[100000]; - - long total = 0; - + mOutputStream = new FileOutputStream(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()+"/"+mFileName); float lenghtOfFile = response.getEntity().getContentLength(); - int read; - while ((read = mStream.read(data)) != -1) { - if(!status.sSettingIsAppRunning){ - return null; - } - total += read; - int cur = (int) ((total * 100) / response.getEntity().getContentLength()); - mDownloadByte = cur; - if(lenghtOfFile<0){ - cur = (int)total; - mDownloadByte = total * -1; - }else { - mDownloadByte = cur; - } - - publishProgress(Math.min(cur, 100)); - if (Math.min(cur, 100) > 98) { - sleep(500); - } - - output.write(data, 0, read); - } - - build.setContentText("saving file"); - build.setSmallIcon(android.R.drawable.stat_sys_download); - mNotifyManager.notify(mID, build.build()); - - output.flush(); - output.close(); - mStream.close(); - }catch (Exception ex){ - String mRequestCodeResponse = String.valueOf(mRequestCode); - if(mRequestCodeResponse == null || mRequestCodeResponse.equals("0")){ - mRequestCodeResponse = "\"Unknown\""; - } - - mEvent.invokeObserver(Collections.singletonList("Request Error | " + mRequestCodeResponse), M_DOWNLOAD_FAILURE); - onCancel(); + readStream(mInputStream, mOutputStream, lenghtOfFile); } + }catch (Exception ex){ + if(mRequestCode!=200 && android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){ + onBackgroundException(mRequestCode); + } + else if(android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.P) + onBackgroundException(mRequestCode); } + return null; } - protected void onProgressUpdate(Integer... progress) { - int mPercentage = (int)(mDownloadByte); - if(mPercentage<0){ - build.setProgress(100, progress[0], true); - build.setContentText(getFileSize(mPercentage * -1)); - }else { - build.setProgress(100, progress[0], false); - build.setContentText(mPercentage+"%"); - } - mNotifyManager.notify(mID, build.build()); - super.onProgressUpdate(progress); - } - + @SuppressLint({"UnspecifiedImmutableFlag", "LaunchActivityFromNotification"}) @Override protected void onPostExecute(String file_url) { - Intent snoozeIntentPost = new Intent(context, mBroadcastReciever); - snoozeIntentPost.setAction("Download_Open"); - snoozeIntentPost.putExtra("N_ID", mID); - snoozeIntentPost.putExtra("N_COMMAND", 1); - PendingIntent pendingIntent = PendingIntent.getBroadcast(context, mID, snoozeIntentPost, PendingIntent.FLAG_UPDATE_CURRENT); - Intent snoozeIntentPost1 = new Intent(context, mBroadcastReciever); - snoozeIntentPost1.setAction("Download_Cancelled"); - snoozeIntentPost1.putExtra("N_ID", mID); - snoozeIntentPost1.putExtra("N_COMMAND", 2); - PendingIntent pendingIntent1 = PendingIntent.getBroadcast(context, mID, snoozeIntentPost1, PendingIntent.FLAG_UPDATE_CURRENT); + /* Create Pending Intent */ - build.addAction(0, null, null); - build.setContentIntent(pendingIntent); - build.setContentText("Download complete"); - build.setSmallIcon(R.drawable.ic_download_complete); - build.setColor(Color.parseColor("#84989f")); - build.setProgress(0, 0, false); - build.setAutoCancel(true); - build.setOngoing(false); - build.addAction(android.R.drawable.stat_sys_download, "Open",pendingIntent); - build.addAction(R.drawable.ic_download, "Cancel",pendingIntent1); - build.setOngoing(false); - build.setPriority(Notification.PRIORITY_LOW); - mNotifyManager.notify(mID, build.build()); + PendingIntent pendingIntentOpen = helperMethod.onCreateActionIntent(mContext.get(), mBroadcastReciever, mNotificationID, "Download_Open",1); + PendingIntent pendingIntentCancel = helperMethod.onCreateActionIntent(mContext.get(), mBroadcastReciever, mNotificationID, "Download_Cancelled",2); - DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); + /* Create Notification */ + + mNotificationBuilder.addAction(0, null, null); + mNotificationBuilder.setContentIntent(pendingIntentOpen); + mNotificationBuilder.setContentText("Download complete"); + mNotificationBuilder.setSmallIcon(R.drawable.ic_download_complete); + mNotificationBuilder.setColor(Color.parseColor("#84989f")); + mNotificationBuilder.setProgress(0, 0, false); + mNotificationBuilder.setAutoCancel(true); + mNotificationBuilder.setOngoing(false); + mNotificationBuilder.addAction(android.R.drawable.stat_sys_download, "Open",pendingIntentOpen); + mNotificationBuilder.addAction(R.drawable.ic_download, "Cancel",pendingIntentCancel); + mNotificationBuilder.setOngoing(false); + mNotificationBuilder.setPriority(Notification.PRIORITY_LOW); + mNotifyManager.notify(mNotificationID, mNotificationBuilder.build()); + + DownloadManager dm = (DownloadManager) mContext.get().getSystemService(Context.DOWNLOAD_SERVICE); String mPath = (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath() + File.separator + mFileName).replace("File//","content://"); File mFile = new File(mPath); + /* Create Dwonload Complete Destination */ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - Uri uri = FileProvider.getUriForFile(context, "com.hiddenservices.genesissearchengine.production.provider", mFile); + Uri uri = FileProvider.getUriForFile(mContext.get(), "com.hiddenservices.onionservices.provider", mFile); ContentValues contentValues = new ContentValues(); contentValues.put(MediaStore.Downloads.TITLE, mFileName); contentValues.put(MediaStore.Downloads.DISPLAY_NAME, mFileName); contentValues.put(MediaStore.Downloads.SIZE, mDownloadByte); - contentValues.put(MediaStore.Downloads.MIME_TYPE, helperMethod.getMimeType(uri.toString(), context)); + contentValues.put(MediaStore.Downloads.MIME_TYPE, helperMethod.getMimeType(uri.toString(), mContext.get())); contentValues.put(MediaStore.Downloads.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS + File.separator + mFileName + "_" + helperMethod.createRandomID().substring(0,5)); - ContentResolver database = context.getContentResolver(); + ContentResolver database = mContext.get().getContentResolver(); database.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, contentValues); } else { - Uri uri = FileProvider.getUriForFile(context, "com.hiddenservices.genesissearchengine.production.provider", mFile); - String mime = helperMethod.getMimeType(uri.toString(), context); + Uri uri = FileProvider.getUriForFile(mContext.get(), "com.hiddenservices.onionservices.provider", mFile); + String mime = helperMethod.getMimeType(uri.toString(), mContext.get()); if(mime!=null){ dm.addCompletedDownload(mFileName, mURL, false, mime, mFile.getAbsolutePath(), mFile.length(), false); } @@ -347,20 +233,85 @@ public class downloadReciever extends AsyncTask { } + /* UI TRIGGERS*/ + + protected void onProgressUpdate(Integer... progress) { + int mPercentage = (int)(mDownloadByte); + if(mPercentage<0){ + mNotificationBuilder.setProgress(100, progress[0], true); + mNotificationBuilder.setContentText(helperMethod.getFileSizeBadge(mPercentage * -1)); + }else { + mNotificationBuilder.setProgress(100, progress[0], false); + mNotificationBuilder.setContentText(mPercentage+"%"); + } + mNotifyManager.notify(mNotificationID, mNotificationBuilder.build()); + super.onProgressUpdate(progress); + } + public void onCancel(){ mIsCanceled = true; - mNotifyManager.cancel(mID); + mNotifyManager.cancel(mNotificationID); cancel(true); } public void onTrigger(){ if(!mIsCanceled){ - mNotifyManager.cancel(mID); + mNotifyManager.cancel(mNotificationID); String mPath = (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath() + File.separator + mFileName).replace("File//","content://"); File mFile = new File(mPath); - new Handler().postDelayed(() -> helperMethod.openFile(mFile, activityContextManager.getInstance().getHomeController()), 500); } } + + /* Helper Methods*/ + + private boolean readStream(InputStream pInputStream,OutputStream pOutputStream, float pLengthOfFile) throws IOException, InterruptedException { + + byte[] mData = new byte[100000]; + long mTotalReadCount = 0; + int mCurrentReadCount; + + while ((mCurrentReadCount = pInputStream.read(mData)) != -1) { + if(!status.sSettingIsAppRunning){ + return false; + } + mTotalReadCount += mCurrentReadCount; + int cur = (int) ((mTotalReadCount * 100) / pLengthOfFile); + mDownloadByte = cur; + if(pLengthOfFile<0){ + cur = (int)mTotalReadCount; + mDownloadByte = mTotalReadCount * -1; + }else { + mDownloadByte = cur; + } + + publishProgress(Math.min(cur, 100)); + if (Math.min(cur, 100) > 98) { + sleep(500); + } + pOutputStream.write(mData, 0, mCurrentReadCount); + } + + mNotificationBuilder.setContentText("saving file"); + mNotificationBuilder.setSmallIcon(android.R.drawable.stat_sys_download); + mNotifyManager.notify(mNotificationID, mNotificationBuilder.build()); + + pOutputStream.flush(); + pOutputStream.close(); + pInputStream.close(); + return true; + } + + private void onBackgroundException(int pRequestCode){ + String mRequestCodeResponse = String.valueOf(pRequestCode); + if(mRequestCodeResponse == null || mRequestCodeResponse.equals("0")){ + mRequestCodeResponse = "\"Unknown\""; + } + + String finalMRequestCodeResponse = mRequestCodeResponse; + activityContextManager.getInstance().getHomeController().runOnUiThread(() -> mEvent.invokeObserver(Collections.singletonList("Request Error | " + finalMRequestCodeResponse), M_DOWNLOAD_FAILURE)); + onCancel(); + } + } diff --git a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/downloadService.java b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/downloadService.java index 7cecc86e..1e54a43c 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/downloadService.java +++ b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/downloadPluginManager/downloadService.java @@ -1,42 +1,32 @@ package com.hiddenservices.onionservices.pluginManager.downloadPluginManager; -import android.annotation.SuppressLint; import android.app.IntentService; import android.content.Context; import android.content.Intent; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; - import com.hiddenservices.onionservices.pluginManager.pluginController; import com.hiddenservices.onionservices.pluginManager.pluginEnums; - import java.util.Arrays; public class downloadService extends IntentService { - private static final String DOWNLOAD_PATH = "com.spartons.androiddownloadmanager_DownloadSongService_Download_path"; - private static final String DESTINATION_PATH = "com.spartons.androiddownloadmanager_DownloadSongService_Destination_path"; - public downloadService() { - super("DownloadSongService"); + super("DOWNLOAD_SERVICE"); } - @SuppressLint("StaticFieldLeak") - static Context context; public static Intent getDownloadService(final @NonNull Context callingClassContext, final @NonNull String downloadPath, final @NonNull String destinationPath) { - downloadService.context = callingClassContext; - return new Intent(callingClassContext, downloadService.class) - .putExtra(DOWNLOAD_PATH, downloadPath) - .putExtra(DESTINATION_PATH, destinationPath); + Intent mIntent = new Intent(callingClassContext, downloadService.class); + mIntent.putExtra("DOWNLOAD_PATH", downloadPath); + mIntent.putExtra("DESTINATION_PATH", destinationPath); + return mIntent; } + @Override protected void onHandleIntent(@Nullable Intent intent) { - String downloadPath = intent.getStringExtra(DOWNLOAD_PATH); - startDownload(downloadPath); - } - private void startDownload(String downloadPath) { - String []fn = (downloadPath+"__"+"as").split("__"); - pluginController.getInstance().onDownloadInvoke(Arrays.asList(fn[0],fn[1]), pluginEnums.eDownloadManager.M_DOWNLOAD_FILE); + String mDownloadPath = intent.getStringExtra("DOWNLOAD_PATH"); + String mDestinationPath = intent.getStringExtra("DESTINATION_PATH"); + + pluginController.getInstance().onDownloadInvoke(Arrays.asList(mDownloadPath, mDestinationPath), pluginEnums.eDownloadManager.M_START_DOWNLOAD); } } \ No newline at end of file diff --git a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/messagePluginManager/messageManager.java b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/messagePluginManager/messageManager.java index cb4979e2..c406d805 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/messagePluginManager/messageManager.java +++ b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/messagePluginManager/messageManager.java @@ -368,8 +368,9 @@ public class messageManager implements View.OnClickListener, DialogInterface.OnD LinearLayout mPopupURLLongPressCurrentTab = mDialog.findViewById(R.id.pPopupURLLongPressCurrentTab); LinearLayout mPopupURLLongPressClipboard = mDialog.findViewById(R.id.pPopupURLLongPressClipboard); Button mPopupURLLongPressDismiss = mDialog.findViewById(R.id.pPopupURLLongPressDismiss); + String mText = title + mData.get(0); - mPopupURLLongPressHeader.setText((title + mData.get(0))); + mPopupURLLongPressHeader.setText(mText); mEvent.invokeObserver(Arrays.asList(mPopupURLLongPressImage, helperMethod.getDomainName(mData.get(0).toString())), enums.etype.fetch_favicon); mDialog.setOnDismissListener(this); diff --git a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/orbotPluginManager/orbotManager.java b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/orbotPluginManager/orbotManager.java index ae64094f..f45fa18d 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/orbotPluginManager/orbotManager.java +++ b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/orbotPluginManager/orbotManager.java @@ -41,7 +41,7 @@ public class orbotManager this.mAppContext = new WeakReference(pAppContext); this.mLogManger = new orbotLogManager(); - onInitNotificationStatus(pNotificationStatus); + orbotLocalConstants.mNotificationStatus = pNotificationStatus; } private void onInitlizeOrbot(String pBridgeCustomBridge, boolean pBridgeGatewayManual, String pBridgeCustomType, boolean pBridgeStatus, String pBridgesDefault){ @@ -78,10 +78,6 @@ public class orbotManager } - private void onInitNotificationStatus(int status){ - orbotLocalConstants.mNotificationStatus = status; - } - /*Helper Methods*/ public Object onTriggerCommands(List pData, pluginEnums.eOrbotManager pCommands){ diff --git a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/pluginController.java b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/pluginController.java index 1c73d8b9..3d76c682 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/pluginController.java +++ b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/pluginController.java @@ -1,8 +1,15 @@ package com.hiddenservices.onionservices.pluginManager; +import android.annotation.SuppressLint; +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; import android.view.WindowManager; import android.widget.ImageView; import androidx.appcompat.app.AppCompatActivity; + +import com.example.myapplication.R; import com.hiddenservices.onionservices.appManager.activityContextManager; import com.hiddenservices.onionservices.appManager.homeManager.geckoManager.geckoSession; import com.hiddenservices.onionservices.appManager.homeManager.homeController.homeController; @@ -16,7 +23,7 @@ import com.hiddenservices.onionservices.dataManager.dataController; import com.hiddenservices.onionservices.dataManager.dataEnums; import com.hiddenservices.onionservices.eventObserver; import com.hiddenservices.onionservices.helperManager.helperMethod; -import com.hiddenservices.onionservices.pluginManager.adPluginManager.mopubManager; +import com.hiddenservices.onionservices.pluginManager.adPluginManager.appLovinManager; import com.hiddenservices.onionservices.pluginManager.analyticPluginManager.analyticManager; import com.hiddenservices.onionservices.pluginManager.downloadPluginManager.downloadManager; import com.hiddenservices.onionservices.pluginManager.langPluginManager.langManager; @@ -44,7 +51,7 @@ public class pluginController { /*Plugin Instance*/ - private mopubManager mAdManager; + private appLovinManager mAdManager; private analyticManager mAnalyticsManager; private messageManager mMessageManager; private notifictionManager mNotificationManager; @@ -85,7 +92,7 @@ public class pluginController mContextManager = activityContextManager.getInstance(); mNotificationManager = new notifictionManager(mHomeController,new notificationCallback()); - mAdManager = new mopubManager(new admobCallback(), ((homeController)mHomeController.get()).getBannerAd(), mHomeController.get()); + mAdManager = new appLovinManager(new admobCallback(), ((homeController)mHomeController.get()).getBannerAd(), mHomeController.get()); mAnalyticsManager = new analyticManager(mHomeController,new analyticCallback()); mMessageManager = new messageManager(new messageCallback()); mOrbotManager = orbotManager.getInstance(); @@ -168,12 +175,7 @@ public class pluginController { if(event_type.equals(enums.etype.M_DOWNLOAD_FAILURE)) { - mHomeController.get().runOnUiThread(new Runnable() { - @Override - public void run() { - mMessageManager.onTrigger(Arrays.asList(pData.get(0).toString(), mHomeController.get()),M_DOWNLOAD_FAILURE); - } - }); + mMessageManager.onTrigger(Arrays.asList(pData.get(0).toString(), mHomeController.get()),M_DOWNLOAD_FAILURE); } return null; } @@ -346,20 +348,21 @@ public class pluginController mHomeController.get().runOnUiThread(() -> mHomeController.get().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)); } else if(pEventType.equals(M_IMAGE_UPDATE_RESTART)){ - if(pData!=null && pData.get(0)!=null){ - ((AppCompatActivity)pData.get(0)).finish(); - activityContextManager.getInstance().getHomeController().quitApplication(); + Intent mStartActivity = new Intent(mHomeController.get(), homeController.class); + int mPendingIntentId = 123456; + PendingIntent mPendingIntent = null; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { + mPendingIntent = PendingIntent.getActivity(mHomeController.get(), mPendingIntentId, mStartActivity, PendingIntent.FLAG_IMMUTABLE); + }else { + mPendingIntent = PendingIntent.getActivity(mHomeController.get(), mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT); } - new Thread(){ - public void run(){ - try { - sleep(500); - android.os.Process.killProcess(android.os.Process.myPid()); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - }.start(); + AlarmManager mgr = (AlarmManager)mHomeController.get().getSystemService(Context.ALARM_SERVICE); + mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 500, mPendingIntent); + + pluginController.getInstance().onOrbotInvoke(Collections.singletonList(status.mThemeApplying), pluginEnums.eOrbotManager.M_DESTROY); + activityContextManager.getInstance().getHomeController().onResetData(); + status.sSettingIsAppStarted = false; + mHomeController.get().finishAndRemoveTask(); } return null; } diff --git a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/pluginEnums.java b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/pluginEnums.java index c6a3014d..10617257 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/pluginEnums.java +++ b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/pluginEnums.java @@ -6,17 +6,16 @@ public class pluginEnums public enum eAdManager { M_INITIALIZE_BANNER_ADS, M_IS_ADVERT_LOADED, M_DESTROY } + public enum eAdManagerCallbacks { M_ON_AD_CLICK, M_ON_AD_LOAD, M_ON_AD_HIDE } - /*Analytics Manager*/ public enum eAnalyticManager { M_LOG_EVENT } - /*Lanuage Manager*/ public enum eLangManager{ M_SET_LANGUAGE, M_ACTIVITY_CREATED, M_RESUME, M_SUPPORTED_SYSTEM_LANGUAGE_INFO, M_INIT_LOCALE, M_UPDATE_LOCAL @@ -30,13 +29,14 @@ public class pluginEnums public enum eMessageManager{ M_RESET, M_DATA_CLEARED, M_COPY, M_APPLICATION_CRASH, M_DELETE_BOOKMARK, M_UPDATE_BOOKMARK, M_IMAGE_UPDATE,M_OPEN_ACTIVITY_FAILED, M_OPEN_CICADA, M_SECURE_CONNECTION, M_SECURITY_INFO, M_POPUP_BLOCKED, M_PANIC, M_MAX_TAB_REACHED, M_ORBOT_LOADING, M_LOAD_NEW_TAB, M_UNDO,M_DOWNLOAD_SINGLE, M_UPDATE_BRIDGES, M_NEW_IDENTITY, M_NOT_SUPPORTED, M_BRIDGE_MAIL, M_LONG_PRESS_WITH_LINK, M_LONG_PRESS_URL, M_LONG_PRESS_DOWNLOAD, M_START_ORBOT, M_DOWNLOAD_FAILURE, M_DOWNLOAD_FILE, M_RATE_APP, M_REPORT_URL, M_CLEAR_BOOKMARK, M_CLEAR_HISTORY, M_BOOKMARK, M_PANIC_RESET, M_RATE_SUCCESS, M_RATE_FAILURE, M_LANGUAGE_SUPPORT_FAILURE, M_WELCOME } + public enum eMessageManagerCallbacks{ M_CANCEL_WELCOME, M_APP_RATED, M_DOWNLOAD_FILE_MANUAL, M_OPEN_LINK_CURRENT_TAB, M_COPY_LINK, M_REQUEST_BRIDGES, M_SET_BRIDGES, M_OPEN_LINK_NEW_TAB, M_CLEAR_TAB, M_RATE_APPLICATION, M_OPEN_PRIVACY, M_CLEAR_HISTORY, M_CLEAR_BOOKMARK,M_ADJUST_INPUT_RESIZE, M_UNDO_SESSION, M_OPEN_LOGS, M_LOAD_NEW_TAB, M_UNDO_TAB, M_CUSTOM_BRIDGE, M_BRIDGE_TYPE, M_DATA_CLEARED_EXTERNAL, M_IMAGE_UPDATE_RESTART } /*Download Manager*/ public enum eDownloadManager{ - M_DOWNLOAD_FILE, M_CANCEL, M_TRIGGER, M_START_SERVICE, M_DOWNLOAD_BLOB, M_SWIPE + M_START_DOWNLOAD, M_CANCEL_DOWNLOAD, M_URL_DOWNLOAD_REQUEST, M_WEB_DOWNLOAD_REQUEST, M_BLOB_DOWNLOAD_REQUEST, M_SWIPE } /*Notification Manager*/ diff --git a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/pluginReciever/downloadNotificationReciever.java b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/pluginReciever/downloadNotificationReciever.java index 94699252..3152542f 100644 --- a/app/src/main/java/com/hiddenservices/onionservices/pluginManager/pluginReciever/downloadNotificationReciever.java +++ b/app/src/main/java/com/hiddenservices/onionservices/pluginManager/pluginReciever/downloadNotificationReciever.java @@ -1,5 +1,6 @@ package com.hiddenservices.onionservices.pluginManager.pluginReciever; +import static com.hiddenservices.onionservices.constants.constants.*; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -7,17 +8,15 @@ import com.hiddenservices.onionservices.pluginManager.pluginController; import com.hiddenservices.onionservices.pluginManager.pluginEnums; import java.util.Collections; -import static com.hiddenservices.onionservices.constants.constants.*; - public class downloadNotificationReciever extends BroadcastReceiver { public void onReceive (Context context , Intent intent) { int mCommand = intent.getExtras().getInt(CONST_DOWNLOAD_COMMAND); if(mCommand==1){ - pluginController.getInstance().onDownloadInvoke(Collections.singletonList(intent.getExtras().getInt(CONST_DOWNLOAD_INTENT_KEY)), pluginEnums.eDownloadManager.M_TRIGGER); + pluginController.getInstance().onDownloadInvoke(Collections.singletonList(intent.getExtras().getInt(CONST_DOWNLOAD_INTENT_KEY)), pluginEnums.eDownloadManager.M_URL_DOWNLOAD_REQUEST); }else if(mCommand==0 || mCommand==2) { - pluginController.getInstance().onDownloadInvoke(Collections.singletonList(intent.getExtras().getInt(CONST_DOWNLOAD_INTENT_KEY)), pluginEnums.eDownloadManager.M_CANCEL); + pluginController.getInstance().onDownloadInvoke(Collections.singletonList(intent.getExtras().getInt(CONST_DOWNLOAD_INTENT_KEY)), pluginEnums.eDownloadManager.M_CANCEL_DOWNLOAD); }else if(mCommand==3) { - pluginController.getInstance().onDownloadInvoke(Collections.singletonList(intent.getExtras().getInt(CONST_DOWNLOAD_INTENT_KEY)), pluginEnums.eDownloadManager.M_CANCEL); + pluginController.getInstance().onDownloadInvoke(Collections.singletonList(intent.getExtras().getInt(CONST_DOWNLOAD_INTENT_KEY)), pluginEnums.eDownloadManager.M_CANCEL_DOWNLOAD); } } } diff --git a/app/src/main/res/custom-xml/generic/xml/provider_paths.xml b/app/src/main/res/custom-xml/generic/xml/provider_paths.xml index ae45ab61..04a70a41 100644 --- a/app/src/main/res/custom-xml/generic/xml/provider_paths.xml +++ b/app/src/main/res/custom-xml/generic/xml/provider_paths.xml @@ -1,9 +1,6 @@ - \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index e908d98c..45a770d4 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -12,7 +12,7 @@ الحرية الرقمية إعادة تحميل لديك واحدة من المشاكل التالية. قد لا تعمل صÙحة الويب أو موقع الويب. قد يكون اتصالك بالإنترنت معطلاً. ربما كنت تستخدم وكيل. قد يتم حظر موقع الويب بواسطة جدار حماية - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider بي بي سي | هاجمت إسرائيل مرة أخرى diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index ff76254c..94c06601 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -12,7 +12,7 @@ llibertat digital recarregar us trobeu amb el problema següent. pot ser que la pàgina web o el lloc web no funcionin. és possible que la vostra connexió a Internet sigui deficient. és possible que utilitzeu un servidor intermediari. el tallafoc podria bloquejar el lloc web - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC, Israel torna a atacar diff --git a/app/src/main/res/values-ch/strings.xml b/app/src/main/res/values-ch/strings.xml index abb44159..67ad8fd4 100644 --- a/app/src/main/res/values-ch/strings.xml +++ b/app/src/main/res/values-ch/strings.xml @@ -12,7 +12,7 @@ digitální svoboda Znovu naÄíst Äelíte jednomu z následujících problémů. webová stránka nebo web nemusí fungovat. vaÅ¡e pÅ™ipojení k internetu může být Å¡patné. možná používáte proxy. web může být blokován bránou firewall - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC | Izrael znovu udeří diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 253c14cf..c8be4f82 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -12,7 +12,7 @@ digitale Freiheit neu laden Sie stehen vor einem der folgenden Probleme. Webseite oder Website funktioniert möglicherweise nicht. Ihre Internetverbindung ist möglicherweise schlecht. Möglicherweise verwenden Sie einen Proxy. Die Website wird möglicherweise von der Firewall blockiert - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC | Israel schlägt erneut zu diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 0c96c5cf..f34339d6 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -12,7 +12,7 @@ ψηφιακή ελευθεÏία φοÏτώνω πάλι αντιμετωπίζετε ένα από τα ακόλουθα Ï€Ïοβλήματα. η ιστοσελίδα ή ο ιστότοπος ενδέχεται να μην λειτουÏγοÏν. η σÏνδεσή σας στο Διαδίκτυο μποÏεί να είναι κακή. μποÏεί να χÏησιμοποιείτε διακομιστή μεσολάβησης. Ο ιστότοπος ενδέχεται να αποκλειστεί από το τείχος Ï€Ïοστασίας - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC | Το ΙσÏαήλ χτυπά ξανά diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index ec1fb6be..ec7fae98 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -12,7 +12,7 @@ liberté numérique recharger vous êtes confronté à l\'un des problèmes suivants. la page Web ou le site Web peut ne pas fonctionner. votre connexion Internet est peut-être mauvaise. vous utilisez peut-être un proxy. le site Web peut être bloqué par le pare-feu - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC | Israël frappe à nouveau diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 38099fe2..de32f573 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -12,7 +12,7 @@ digitális szabadság újratöltés a következÅ‘ probléma egyikével áll szemben. elÅ‘fordulhat, hogy egy weboldal vagy webhely nem működik. gyenge lehet az internetkapcsolat. lehet, hogy proxyt használ. elÅ‘fordulhat, hogy a webhelyet tűzfal blokkolja - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC | Izrael újra sztrájkol diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index c9e8dbce..411eaa1f 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -12,7 +12,7 @@ libertà digitale ricaricare stai affrontando uno dei seguenti problemi. la pagina web o il sito web potrebbero non funzionare. la tua connessione Internet potrebbe essere scarsa. potresti utilizzare un proxy. il sito Web potrebbe essere bloccato dal firewall - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC | Israele colpisce ancora diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 770417bb..53ac37ab 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -12,7 +12,7 @@ デジタルã®è‡ªç”± リロード 次ã®ã„ãšã‚Œã‹ã®å•é¡ŒãŒç™ºç”Ÿã—ã¦ã„ã¾ã™ã€‚ウェブページã¾ãŸã¯ã‚¦ã‚§ãƒ–サイトãŒæ©Ÿèƒ½ã—ã¦ã„ãªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚インターãƒãƒƒãƒˆæŽ¥ç¶šãŒæ‚ªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚プロキシを使用ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ウェブサイトãŒãƒ•ã‚¡ã‚¤ã‚¢ã‚¦ã‚©ãƒ¼ãƒ«ã«ã‚ˆã£ã¦ãƒ–ロックã•ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC |イスラエルãŒå†ã³ã‚¹ãƒˆãƒ©ã‚¤ã‚­ diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 65a869db..a5f7f937 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -12,7 +12,7 @@ 디지털 ìžìœ  재 장전 ë‹¤ìŒ ë¬¸ì œ 중 í•˜ë‚˜ì— ì§ë©´í•˜ê³  있습니다. 웹 페ì´ì§€ ë˜ëŠ” 웹 사ì´íŠ¸ê°€ ìž‘ë™í•˜ì§€ ì•Šì„ ìˆ˜ 있습니다. ì¸í„°ë„· ì—°ê²° ìƒíƒœê°€ 좋지 ì•Šì„ ìˆ˜ 있습니다. 프ë¡ì‹œë¥¼ ì‚¬ìš©í•˜ê³ ìžˆì„ ìˆ˜ 있습니다. 웹 사ì´íŠ¸ê°€ ë°©í™”ë²½ì— ì˜í•´ 차단 ë  ìˆ˜ ìžˆìŒ - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC | ì´ìŠ¤ë¼ì—˜ì´ 다시 공격하다 diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index d718a326..bdd81395 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -12,7 +12,7 @@ digital freedom recarregar você está enfrentando um dos seguintes problemas. página da Web ou site pode não estar funcionando. sua conexão com a internet pode estar ruim. você pode estar usando um proxy. site pode estar bloqueado por firewall - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC | Israel ataca novamente diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 6ec8c39b..7fa49aee 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -12,7 +12,7 @@ libertatea digitală reîncărcaÈ›i vă confruntaÈ›i cu una dintre următoarele probleme. este posibil ca pagina web sau site-ul web să nu funcÈ›ioneze. conexiunea la internet ar putea fi slabă. s-ar putea să utilizaÈ›i un proxy. site-ul web ar putea fi blocat de firewall - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC | Israelul loveÈ™te din nou diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index e50f4238..fa6c8560 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -12,7 +12,7 @@ Ñ†Ð¸Ñ„Ñ€Ð¾Ð²Ð°Ñ Ñвобода перезагрузить вы ÑтолкнулиÑÑŒ Ñ Ð¾Ð´Ð½Ð¾Ð¹ из Ñледующих проблем. веб-Ñтраница или веб-Ñайт могут не работать. ваше интернет-Ñоединение может быть плохим. вы можете иÑпользовать прокÑи. веб-Ñайт может быть заблокирован брандмауÑром - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC | Израиль Ñнова наноÑит удар diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 3cdff654..c3e7c2fd 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -12,7 +12,7 @@ เสรีภาพดิจิทัล โหลดใหม่ คุณà¸à¸³à¸¥à¸±à¸‡à¸›à¸£à¸°à¸ªà¸šà¸›à¸±à¸à¸«à¸²à¸­à¸¢à¹ˆà¸²à¸‡à¹ƒà¸”อย่างหนึ่งต่อไปนี้ หน้าเว็บหรือเว็บไซต์อาจไม่ทำงาน à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸­à¸´à¸™à¹€à¸—อร์เน็ตของคุณอาจไม่ดี คุณอาจใช้พร็อà¸à¸‹à¸µ เว็บไซต์อาจถูà¸à¸›à¸´à¸”à¸à¸±à¹‰à¸™à¹‚ดยไฟร์วอลล์ - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC | อิสราเอลนัดหยุดงานอีà¸à¸„รั้ง diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 835a7711..663aab43 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -12,7 +12,7 @@ dijital özgürlük Tekrar yükle aÅŸağıdaki problemlerden biriyle karşı karşıyasınız. web sayfası veya web sitesi çalışmıyor olabilir. Ä°nternet baÄŸlantınız zayıf olabilir. bir proxy kullanıyor olabilirsiniz. web sitesi güvenlik duvarı tarafından engelleniyor olabilir - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC | Ä°srail Yeniden Grevde diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index e9e0a145..ed0c661c 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -12,7 +12,7 @@ ڈیجیٹل آزادی Ø¯ÙˆØ¨Ø§Ø±Û Ù„ÙˆÚˆ کریں آپ Ú©Ùˆ Ù…Ù†Ø¯Ø±Ø¬Û Ø°ÛŒÙ„ میں سے ایک Ù…Ø³Ø¦Ù„Û Ø¯Ø±Ù¾ÛŒØ´ ÛÛ’Û” Ûوسکتا ÛÛ’ Ú©Û ÙˆÛŒØ¨ صÙØ­Û ÛŒØ§ ویب سائٹ کام Ù†Ûیں کررÛÛŒ ÛÛ’Û” Ûوسکتا ÛÛ’ Ú©Û Ø¢Ù¾ کا انٹرنیٹ کنیکشن خراب ÛÙˆÛ” آپ شاید ایک پراکسی استعمال کر رÛÛ’ ÛÙˆÚº Ú¯Û’Û” Ûوسکتا ÛÛ’ Ú©Û ÙˆÛŒØ¨ سائٹ Ùائر وال Ú©Û’ ذریعے مسدود کردی جائے - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider بی بی سی | اسرائیل Ù†Û’ ایک بار پھر Ø­Ù…Ù„Û Ú©ÛŒØ§ diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index c5eedcad..ae5df742 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -12,7 +12,7 @@ tá»± do kỹ thuật số tải lại bạn Ä‘ang phải đối mặt vá»›i má»™t trong những vấn Ä‘á» sau. trang web hoặc trang web có thể không hoạt Ä‘á»™ng. kết nối internet của bạn có thể kém. bạn có thể Ä‘ang sá»­ dụng proxy. trang web có thể bị tÆ°á»ng lá»­a chặn - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC | Israel lại tấn công diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 2d14f4b7..178d0e8c 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -12,7 +12,7 @@ 数字自由 é‡è£… 您正é¢ä¸´ä»¥ä¸‹é—®é¢˜ä¹‹ä¸€ã€‚网页或网站å¯èƒ½æ— æ³•æ­£å¸¸å·¥ä½œã€‚您的互è”网连接å¯èƒ½ä¸ä½³ã€‚您å¯èƒ½æ­£åœ¨ä½¿ç”¨ä»£ç†ã€‚网站å¯èƒ½è¢«é˜²ç«å¢™é˜»æ­¢ - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider 英国广播公å¸|以色列å†æ¬¡ç½¢å·¥ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 69138eb7..9d9d7768 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -14,7 +14,7 @@ Online Freedom Reload These might be the problems you are facing \n\n• Webpage or Website might be down \n• Your Internet connection might be poor \n• You might be using a proxy \n• Website might be blocked by firewall - com.hiddenservices.genesissearchengine.production.provider + com.hiddenservices.onionservices.provider BBC | Israel Strikes Again Search the web ... diff --git a/app/variables.gradle b/app/variables.gradle index a78268d5..e1dd6068 100755 --- a/app/variables.gradle +++ b/app/variables.gradle @@ -34,7 +34,7 @@ project.ext.target_sdk_version = 31 project.ext.build_tool_version = '31' project.ext.ndk_version = '21.4.7075529' // project.ext.application_id = "com.hiddenservices.genesissearchengine.production" -project.ext.application_id = "com.darkweb.genesissearchengine.production" +project.ext.application_id = "com.hiddenservices.onionservices" project.ext.debugSymbolLevel = 'FULL' diff --git a/build.gradle b/build.gradle index 5254e8f2..47e07abe 100755 --- a/build.gradle +++ b/build.gradle @@ -8,57 +8,27 @@ buildscript { google() mavenCentral() mavenLocal() - maven { - url "https://maven.mozilla.org/maven2" - } - maven { - url "https://nightly.maven.mozilla.org/maven2" - } + maven { url "https://maven.mozilla.org/maven2" } + maven { url "https://nightly.maven.mozilla.org/maven2" } } dependencies { classpath 'com.android.tools.build:gradle:7.1.2' classpath 'com.google.gms:google-services:4.3.10' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31" - classpath "org.mozilla.components:tooling-glean-gradle:100.0.20220327143103" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10" } } - - allprojects { repositories { google() mavenLocal() mavenCentral() - maven { - url "https://nightly.maven.mozilla.org/maven2" - } - maven { - url "https://maven.mozilla.org/maven2" - } - maven { - url "https://jitpack.io" - credentials { username "48a9b4c06b5dabbc03328ddcdbb7dfd8fab253ae" } - } + maven { url "https://nightly.maven.mozilla.org/maven2" } + maven { url "https://maven.mozilla.org/maven2" } + maven { url "https://jitpack.io" + credentials { username "48a9b4c06b5dabbc03328ddcdbb7dfd8fab253ae" }} maven { url 'https://jitpack.io' } maven { url "https://raw.githubusercontent.com/guardianproject/gpmaven/master" } } } - - - - - - - - - - - - - - - - - diff --git a/docs/GSoC.txt b/docs/GSoC.txt deleted file mode 100644 index d1d851e1..00000000 --- a/docs/GSoC.txt +++ /dev/null @@ -1,45 +0,0 @@ -GSoC Plan -========= - -A tl;dr version ---------------- -I will be improving the Orbot UI/UX, and adding several features such as data statistics and also -implementing the TorCheck API. I plan on extending the ORLib library and also creating an ORLib enabled -app as a sort of primer for other third party apps to follow - -The full version ----------------- - -Orbot UI/UX -=========== -At the moment, the Orbot UI/UX is clustered and not very intuitive. I plan on improving the existing -elements of the UI and also add a variety of new features such as - -* A new Set – up Wizard ( which checks for iptables ) -* Changes to the preferences ( should be made to follow the Android guidelines) - -Orbot Core app work -=================== -At the moment, Orbot displays a successful connection without actually checking the connection. This is a -pressing issue, because the user is not notified if the set-up has failed, unless he/she manually checks -the torcheck web service. This should be made automatic by making using of the TorCheck API. Also, Orbot -should be configured to show more information about the data being transmitted such as - - -* Amount of data transferred -* Quality of the connection -* Number of circuits connected - -ORLib -===== -Currently, ORLib is very minimal at the moment, both in term of features and support/documentation. ORLib -is very critical to the use of Orbot as it provides transparent proxying on non-rooted devices ( A major -chunk of android phones are un-rooted). I intend to - - -* Improve the existing library by adding additional features - * Check for existing of Orbot - * Check status of connection to Tor - * Provide option to start Orbot via intent -* Request hidden service by port, and get return hidden service .onion address -* Create an ORLib enabled “Twitter, Status.net or other micro blogging Client†– A sort of primer for - third-party apps -* Improve the documentation diff --git a/docs/WALKTHROUGH b/docs/WALKTHROUGH deleted file mode 100644 index 55a356b5..00000000 --- a/docs/WALKTHROUGH +++ /dev/null @@ -1,85 +0,0 @@ - -. -└── org - └── torproject - └── android - ├── AppManager.java - //this is what helps us track the app-by-app torification - //and gets the app name, icon, etc for display - we have some problems here - //in normalizing the icon on the list label - //some of this code came originally from DroidWall project (yay open source) - - ├── boot - │ └── OnbootBroadcastReceiver.java - //i think this is a dup now and should be removed - - ├── HiddenServiceManager.java - //empty! but at some point i thought it would be good to aggregate HS functions here - - ├── OnBootReceiver.java - //this is the class registered in AndroidManifest.xml to handle Onboot events - //to start Orbot/Tor when the device boots if the user has elected to do so - what kind of permissions does this require? - // - - ├── OrbotMainActivity.java - //our wonderful main activity! - - ├── ProcessSettingsAsyncTask.java - //this was just added in 1.0.5.x, but it was meant to help stop the UI blocking while processing settings and prefs - //it uses the AsyncTask feature of Android, which seems to work pretty well - //for this type of non-time critical function you just want to happen in the background at some point soon-ish - - ├── SettingsPreferences.java - // Settings activity that loads the res/xml/preferences.xml resource up - // has some custom event handlng, onActivityResult callback result code's as well - // basically meant to tell Orbot activity if critical settings have been modified and whether - // those new settings should be applied (like iptables/transproxy changes) - - ├── TorConstants.java - // globals! well, constants! but yeah, just a place to put values we use a lot - - ├── TorifiedApp.java - // object to store a single app's metadata for display in UI and for transproxy process - - ├── Utils.java - // random methods that can be useful, a.k.a. another place to put stuff - - ├── WizardActivity.java - // our original attempt at wizard activity that didn't get far - - └── WizardHelper.java - // the helper class that manages the dialog based wizard - - ├── service //okay the Service subpackage! - - │ ├── Api.java - //this is more code taken from DroidWall, that needs to be cleaned up and paired down to just what we need it for - //this is related to 1.0.5.x changes with how we bundle and install our C binaries (tor, privoxy and iptables) - - │ ├── ITorService.aidl - // the android remote interface definition file; - // this is the remote interface which the Orbot activity gets a reference to - // and that in the TorService is instantiated as the "binder" - - │ ├── ITorServiceCallback.aidl - // this is the callback interface that the Orbot activity instantiates, and passes - // to the ITorService; reverse of ITorService in a sense - - │ ├── TorBinaryInstaller.java - // this handles installation of binaries; uses Api.java; // tied into Wizard as well - - │ ├── TorServiceConstants.java - // reusable constants for just the Service package - - │ ├── TorService.java - // the main might powerful service class; Orbot and TorService are the front and backends of this whole app - // should run as a remote service, but the manifest doesn't seem to indicate that at the moment - - │ ├── TorServiceUtils.java - //utility methods for the service; specificaly check for root and tools for finding processID of background binaries - - │ └── TorTransProxy.java - // all the code for iptables transproxying management - - - diff --git a/docs/featuregraphic.xcf b/docs/featuregraphic.xcf deleted file mode 100644 index e569cb5854179742ae6658b3b41e1a9277e922ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1316429 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