├── .gitattributes ├── .gitignore ├── 3rd party └── flagkit_flag_icons_license.txt ├── LICENSE ├── README.md ├── app ├── build.gradle ├── libs │ ├── achartengine-1.0.0.jar │ ├── ca.psiphon.aar │ ├── jackson-core-2.2.0.jar │ ├── jackson-core-LICENSE │ ├── jackson-core-README │ ├── jndcrash-release.aar │ └── snakeyaml-1.10-android.jar ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ ├── feedback.html │ └── startpage │ │ ├── bookmarks.png │ │ ├── history.png │ │ ├── linef.png │ │ └── search.png │ ├── ic_launcher-playstore.png │ ├── java │ ├── ca │ │ └── psiphon │ │ │ └── Tun2SocksJniLoader.java │ ├── com │ │ └── psiphon3 │ │ │ ├── FeedbackActivity.java │ │ │ ├── HomeTabFragment.java │ │ │ ├── Location.java │ │ │ ├── LocationPermissionRationaleActivity.java │ │ │ ├── LogsListAdapter.java │ │ │ ├── LogsTabFragment.java │ │ │ ├── MainActivity.java │ │ │ ├── MainActivityViewModel.java │ │ │ ├── NotificationPermissionRationaleActivity.java │ │ │ ├── OptionsTabFragment.java │ │ │ ├── PackageHelper.java │ │ │ ├── PsiphonApplication.java │ │ │ ├── PsiphonBumpHelpActivity.java │ │ │ ├── PsiphonBumpNfcReaderActivity.java │ │ │ ├── PsiphonCrashService.java │ │ │ ├── PsiphonHostApduService.java │ │ │ ├── PsiphonTabLayout.java │ │ │ ├── PsiphonUpdateReceiver.java │ │ │ ├── SafeFileStorage.java │ │ │ ├── StatisticsTabFragment.java │ │ │ ├── TunnelState.java │ │ │ ├── VpnManager.java │ │ │ ├── VpnRulesHelper.java │ │ │ ├── log │ │ │ ├── LogEntry.java │ │ │ ├── LogEntryDao.java │ │ │ ├── LoggingContentProvider.java │ │ │ ├── LogsDataSourceFactory.java │ │ │ ├── LogsLastEntryHelper.java │ │ │ ├── LogsMaintenanceWorker.java │ │ │ └── MyLog.java │ │ │ └── psiphonlibrary │ │ │ ├── .gitignore │ │ │ ├── AppEntry.java │ │ │ ├── AuthenticatedDataPackage.java │ │ │ ├── DataTransferStats.java │ │ │ ├── EmbeddedValues.java.stub │ │ │ ├── FeedbackWorker.java │ │ │ ├── InstalledAppsMultiSelectListPreference.java │ │ │ ├── InstalledAppsRecyclerViewAdapter.java │ │ │ ├── LocaleManager.java │ │ │ ├── LocalizedActivities.java │ │ │ ├── MoreOptionsPreferenceActivity.java │ │ │ ├── ProxyOptionsPreferenceActivity.java │ │ │ ├── PsiphonConstants.java │ │ │ ├── PsiphonPreferenceFragmentCompat.java │ │ │ ├── RadioButtonPreference.java │ │ │ ├── RegionListPreference.java │ │ │ ├── SharedPreferenceUtils.java │ │ │ ├── TunnelManager.java │ │ │ ├── TunnelServiceInteractor.java │ │ │ ├── TunnelVpnService.java │ │ │ ├── UpgradeChecker.java │ │ │ ├── UpgradeManager.java │ │ │ ├── UpstreamProxySettings.java │ │ │ ├── Utils.java │ │ │ ├── VpnAppsUtils.java │ │ │ └── VpnOptionsPreferenceActivity.java │ └── de │ │ └── schildbach │ │ └── wallet │ │ └── util │ │ └── LinuxSecureRandom.java │ ├── jni │ ├── Android.mk │ ├── Application.mk │ └── badvpn │ │ ├── Android.mk │ │ ├── CMakeLists.txt │ │ ├── COPYING │ │ ├── ChangeLog │ │ ├── INSTALL │ │ ├── INSTALL-WINDOWS │ │ ├── arpprobe │ │ ├── BArpProbe.c │ │ ├── BArpProbe.h │ │ └── CMakeLists.txt │ │ ├── badvpn.7 │ │ ├── base │ │ ├── BLog.c │ │ ├── BLog.h │ │ ├── BLog_syslog.c │ │ ├── BLog_syslog.h │ │ ├── BMutex.h │ │ ├── BPending.c │ │ ├── BPending.h │ │ ├── BPending_list.h │ │ ├── CMakeLists.txt │ │ ├── DebugObject.c │ │ └── DebugObject.h │ │ ├── blog_channels.txt │ │ ├── blog_generator │ │ ├── blog.php │ │ └── blog_functions.php │ │ ├── bproto │ │ └── BProto.h │ │ ├── bproto_generator │ │ ├── ProtoParser.lime │ │ ├── ProtoParser.php │ │ ├── bproto.php │ │ └── bproto_functions.php │ │ ├── client │ │ ├── CMakeLists.txt │ │ ├── DPReceive.c │ │ ├── DPReceive.h │ │ ├── DPRelay.c │ │ ├── DPRelay.h │ │ ├── DataProto.c │ │ ├── DataProto.h │ │ ├── DataProtoKeepaliveSource.c │ │ ├── DataProtoKeepaliveSource.h │ │ ├── DatagramPeerIO.c │ │ ├── DatagramPeerIO.h │ │ ├── FragmentProtoAssembler.c │ │ ├── FragmentProtoAssembler.h │ │ ├── FragmentProtoAssembler_tree.h │ │ ├── FragmentProtoDisassembler.c │ │ ├── FragmentProtoDisassembler.h │ │ ├── FrameDecider.c │ │ ├── FrameDecider.h │ │ ├── FrameDecider_groups_tree.h │ │ ├── FrameDecider_macs_tree.h │ │ ├── FrameDecider_multicast_tree.h │ │ ├── PasswordListener.c │ │ ├── PasswordListener.h │ │ ├── PeerChat.c │ │ ├── PeerChat.h │ │ ├── SCOutmsgEncoder.c │ │ ├── SCOutmsgEncoder.h │ │ ├── SPProtoDecoder.c │ │ ├── SPProtoDecoder.h │ │ ├── SPProtoEncoder.c │ │ ├── SPProtoEncoder.h │ │ ├── SimpleStreamBuffer.c │ │ ├── SimpleStreamBuffer.h │ │ ├── SinglePacketSource.c │ │ ├── SinglePacketSource.h │ │ ├── StreamPeerIO.c │ │ ├── StreamPeerIO.h │ │ ├── badvpn-client.8 │ │ ├── client.c │ │ └── client.h │ │ ├── cmake │ │ └── modules │ │ │ ├── COPYING-CMAKE-SCRIPTS │ │ │ ├── FindGLIB2.cmake │ │ │ ├── FindLibraryWithDebug.cmake │ │ │ ├── FindNSPR.cmake │ │ │ ├── FindNSS.cmake │ │ │ └── FindOpenSSL.cmake │ │ ├── compile-tun2sock.sh │ │ ├── dhcpclient │ │ ├── BDHCPClient.c │ │ ├── BDHCPClient.h │ │ ├── BDHCPClientCore.c │ │ ├── BDHCPClientCore.h │ │ ├── CMakeLists.txt │ │ ├── DHCPIpUdpDecoder.c │ │ ├── DHCPIpUdpDecoder.h │ │ ├── DHCPIpUdpEncoder.c │ │ └── DHCPIpUdpEncoder.h │ │ ├── dostest │ │ ├── CMakeLists.txt │ │ ├── StreamBuffer.c │ │ ├── StreamBuffer.h │ │ ├── dostest-attacker.c │ │ └── dostest-server.c │ │ ├── examples │ │ ├── CMakeLists.txt │ │ ├── FastPacketSource.h │ │ ├── RandomPacketSink.h │ │ ├── TimerPacketSink.h │ │ ├── arpprobe_test.c │ │ ├── bavl_test.c │ │ ├── bencryption_bench.c │ │ ├── bprocess_example.c │ │ ├── brandom2_test.c │ │ ├── btimer_example.c │ │ ├── cavl_test.c │ │ ├── cavl_test_tree.h │ │ ├── dhcpclient_test.c │ │ ├── emscripten_test.c │ │ ├── fairqueue_test.c │ │ ├── fairqueue_test2.c │ │ ├── indexedlist_test.c │ │ ├── ipaddr6_test.c │ │ ├── ncd_parser_test.c │ │ ├── ncd_tokenizer_test.c │ │ ├── ncd_value_parser_test.c │ │ ├── ncdinterfacemonitor_test.c │ │ ├── ncdudevmanager_test.c │ │ ├── ncdudevmonitor_test.c │ │ ├── ncdval_test.c │ │ ├── ncdvalcons_test.c │ │ ├── parse_number_test.c │ │ ├── predicate_test.c │ │ ├── savl_test.c │ │ ├── savl_test_tree.h │ │ ├── stdin_input.c │ │ └── substring_test.c │ │ ├── fix_flex.php │ │ ├── flooder │ │ ├── CMakeLists.txt │ │ ├── flooder.c │ │ └── flooder.h │ │ ├── flow │ │ ├── BufferWriter.c │ │ ├── BufferWriter.h │ │ ├── CMakeLists.txt │ │ ├── LineBuffer.c │ │ ├── LineBuffer.h │ │ ├── PacketBuffer.c │ │ ├── PacketBuffer.h │ │ ├── PacketCopier.c │ │ ├── PacketCopier.h │ │ ├── PacketPassConnector.c │ │ ├── PacketPassConnector.h │ │ ├── PacketPassFairQueue.c │ │ ├── PacketPassFairQueue.h │ │ ├── PacketPassFairQueue_tree.h │ │ ├── PacketPassFifoQueue.c │ │ ├── PacketPassFifoQueue.h │ │ ├── PacketPassInterface.c │ │ ├── PacketPassInterface.h │ │ ├── PacketPassNotifier.c │ │ ├── PacketPassNotifier.h │ │ ├── PacketPassPriorityQueue.c │ │ ├── PacketPassPriorityQueue.h │ │ ├── PacketPassPriorityQueue_tree.h │ │ ├── PacketProtoDecoder.c │ │ ├── PacketProtoDecoder.h │ │ ├── PacketProtoEncoder.c │ │ ├── PacketProtoEncoder.h │ │ ├── PacketProtoFlow.c │ │ ├── PacketProtoFlow.h │ │ ├── PacketRecvBlocker.c │ │ ├── PacketRecvBlocker.h │ │ ├── PacketRecvConnector.c │ │ ├── PacketRecvConnector.h │ │ ├── PacketRecvInterface.c │ │ ├── PacketRecvInterface.h │ │ ├── PacketRouter.c │ │ ├── PacketRouter.h │ │ ├── PacketStreamSender.c │ │ ├── PacketStreamSender.h │ │ ├── RouteBuffer.c │ │ ├── RouteBuffer.h │ │ ├── SinglePacketBuffer.c │ │ ├── SinglePacketBuffer.h │ │ ├── SinglePacketSender.c │ │ ├── SinglePacketSender.h │ │ ├── SingleStreamReceiver.c │ │ ├── SingleStreamReceiver.h │ │ ├── SingleStreamSender.c │ │ ├── SingleStreamSender.h │ │ ├── StreamPacketSender.c │ │ ├── StreamPacketSender.h │ │ ├── StreamPassConnector.c │ │ ├── StreamPassConnector.h │ │ ├── StreamPassInterface.c │ │ ├── StreamPassInterface.h │ │ ├── StreamRecvConnector.c │ │ ├── StreamRecvConnector.h │ │ ├── StreamRecvInterface.c │ │ └── StreamRecvInterface.h │ │ ├── flowextra │ │ ├── CMakeLists.txt │ │ ├── KeepaliveIO.c │ │ ├── KeepaliveIO.h │ │ ├── PacketPassInactivityMonitor.c │ │ └── PacketPassInactivityMonitor.h │ │ ├── generate_files │ │ ├── generated │ │ ├── NCDConfigParser_parse.c │ │ ├── NCDConfigParser_parse.h │ │ ├── NCDConfigParser_parse.out │ │ ├── NCDConfigParser_parse.y │ │ ├── NCDValParser_parse.c │ │ ├── NCDValParser_parse.h │ │ ├── NCDValParser_parse.out │ │ ├── NCDValParser_parse.y │ │ ├── bison_BPredicate.c │ │ ├── bison_BPredicate.h │ │ ├── blog_channel_BArpProbe.h │ │ ├── blog_channel_BConnection.h │ │ ├── blog_channel_BDHCPClient.h │ │ ├── blog_channel_BDHCPClientCore.h │ │ ├── blog_channel_BDatagram.h │ │ ├── blog_channel_BEncryption.h │ │ ├── blog_channel_BInputProcess.h │ │ ├── blog_channel_BLockReactor.h │ │ ├── blog_channel_BNetwork.h │ │ ├── blog_channel_BPredicate.h │ │ ├── blog_channel_BProcess.h │ │ ├── blog_channel_BReactor.h │ │ ├── blog_channel_BSSLConnection.h │ │ ├── blog_channel_BSignal.h │ │ ├── blog_channel_BSocksClient.h │ │ ├── blog_channel_BTap.h │ │ ├── blog_channel_BThreadSignal.h │ │ ├── blog_channel_BThreadWork.h │ │ ├── blog_channel_BTime.h │ │ ├── blog_channel_BUnixSignal.h │ │ ├── blog_channel_DPReceive.h │ │ ├── blog_channel_DPRelay.h │ │ ├── blog_channel_DataProto.h │ │ ├── blog_channel_DatagramPeerIO.h │ │ ├── blog_channel_FragmentProtoAssembler.h │ │ ├── blog_channel_FrameDecider.h │ │ ├── blog_channel_LineBuffer.h │ │ ├── blog_channel_Listener.h │ │ ├── blog_channel_NCDBuildProgram.h │ │ ├── blog_channel_NCDConfigParser.h │ │ ├── blog_channel_NCDConfigTokenizer.h │ │ ├── blog_channel_NCDIfConfig.h │ │ ├── blog_channel_NCDInterfaceMonitor.h │ │ ├── blog_channel_NCDModuleIndex.h │ │ ├── blog_channel_NCDModuleProcess.h │ │ ├── blog_channel_NCDPlaceholderDb.h │ │ ├── blog_channel_NCDRequest.h │ │ ├── blog_channel_NCDRequestClient.h │ │ ├── blog_channel_NCDRfkillMonitor.h │ │ ├── blog_channel_NCDUdevCache.h │ │ ├── blog_channel_NCDUdevManager.h │ │ ├── blog_channel_NCDUdevMonitor.h │ │ ├── blog_channel_NCDUdevMonitorParser.h │ │ ├── blog_channel_NCDVal.h │ │ ├── blog_channel_NCDValGenerator.h │ │ ├── blog_channel_NCDValParser.h │ │ ├── blog_channel_PRStreamSink.h │ │ ├── blog_channel_PRStreamSource.h │ │ ├── blog_channel_PacketProtoDecoder.h │ │ ├── blog_channel_PasswordListener.h │ │ ├── blog_channel_PeerChat.h │ │ ├── blog_channel_SPProtoDecoder.h │ │ ├── blog_channel_ServerConnection.h │ │ ├── blog_channel_SocksUdpGwClient.h │ │ ├── blog_channel_StreamPeerIO.h │ │ ├── blog_channel_UdpGwClient.h │ │ ├── blog_channel_addr.h │ │ ├── blog_channel_client.h │ │ ├── blog_channel_dostest_attacker.h │ │ ├── blog_channel_dostest_server.h │ │ ├── blog_channel_flooder.h │ │ ├── blog_channel_lwip.h │ │ ├── blog_channel_ncd.h │ │ ├── blog_channel_ncd_alias.h │ │ ├── blog_channel_ncd_arithmetic.h │ │ ├── blog_channel_ncd_assert.h │ │ ├── blog_channel_ncd_backtrack.h │ │ ├── blog_channel_ncd_blocker.h │ │ ├── blog_channel_ncd_buffer.h │ │ ├── blog_channel_ncd_call2.h │ │ ├── blog_channel_ncd_choose.h │ │ ├── blog_channel_ncd_concat.h │ │ ├── blog_channel_ncd_daemon.h │ │ ├── blog_channel_ncd_depend.h │ │ ├── blog_channel_ncd_depend_scope.h │ │ ├── blog_channel_ncd_dynamic_depend.h │ │ ├── blog_channel_ncd_exit.h │ │ ├── blog_channel_ncd_explode.h │ │ ├── blog_channel_ncd_file.h │ │ ├── blog_channel_ncd_file_open.h │ │ ├── blog_channel_ncd_foreach.h │ │ ├── blog_channel_ncd_from_string.h │ │ ├── blog_channel_ncd_getargs.h │ │ ├── blog_channel_ncd_getenv.h │ │ ├── blog_channel_ncd_if.h │ │ ├── blog_channel_ncd_imperative.h │ │ ├── blog_channel_ncd_implode.h │ │ ├── blog_channel_ncd_index.h │ │ ├── blog_channel_ncd_list.h │ │ ├── blog_channel_ncd_load_module.h │ │ ├── blog_channel_ncd_log.h │ │ ├── blog_channel_ncd_log_msg.h │ │ ├── blog_channel_ncd_logical.h │ │ ├── blog_channel_ncd_multidepend.h │ │ ├── blog_channel_ncd_net_backend_badvpn.h │ │ ├── blog_channel_ncd_net_backend_rfkill.h │ │ ├── blog_channel_ncd_net_backend_waitdevice.h │ │ ├── blog_channel_ncd_net_backend_waitlink.h │ │ ├── blog_channel_ncd_net_backend_wpa_supplicant.h │ │ ├── blog_channel_ncd_net_dns.h │ │ ├── blog_channel_ncd_net_iptables.h │ │ ├── blog_channel_ncd_net_ipv4_addr.h │ │ ├── blog_channel_ncd_net_ipv4_addr_in_network.h │ │ ├── blog_channel_ncd_net_ipv4_arp_probe.h │ │ ├── blog_channel_ncd_net_ipv4_dhcp.h │ │ ├── blog_channel_ncd_net_ipv4_route.h │ │ ├── blog_channel_ncd_net_ipv6_addr.h │ │ ├── blog_channel_ncd_net_ipv6_addr_in_network.h │ │ ├── blog_channel_ncd_net_ipv6_route.h │ │ ├── blog_channel_ncd_net_ipv6_wait_dynamic_addr.h │ │ ├── blog_channel_ncd_net_up.h │ │ ├── blog_channel_ncd_net_watch_interfaces.h │ │ ├── blog_channel_ncd_netmask.h │ │ ├── blog_channel_ncd_ondemand.h │ │ ├── blog_channel_ncd_parse.h │ │ ├── blog_channel_ncd_print.h │ │ ├── blog_channel_ncd_process_manager.h │ │ ├── blog_channel_ncd_reboot.h │ │ ├── blog_channel_ncd_ref.h │ │ ├── blog_channel_ncd_regex_match.h │ │ ├── blog_channel_ncd_request.h │ │ ├── blog_channel_ncd_run.h │ │ ├── blog_channel_ncd_runonce.h │ │ ├── blog_channel_ncd_sleep.h │ │ ├── blog_channel_ncd_socket.h │ │ ├── blog_channel_ncd_spawn.h │ │ ├── blog_channel_ncd_strcmp.h │ │ ├── blog_channel_ncd_substr.h │ │ ├── blog_channel_ncd_sys_evdev.h │ │ ├── blog_channel_ncd_sys_request_client.h │ │ ├── blog_channel_ncd_sys_request_server.h │ │ ├── blog_channel_ncd_sys_start_process.h │ │ ├── blog_channel_ncd_sys_watch_directory.h │ │ ├── blog_channel_ncd_sys_watch_input.h │ │ ├── blog_channel_ncd_sys_watch_usb.h │ │ ├── blog_channel_ncd_timer.h │ │ ├── blog_channel_ncd_to_string.h │ │ ├── blog_channel_ncd_try.h │ │ ├── blog_channel_ncd_value.h │ │ ├── blog_channel_ncd_valuemetic.h │ │ ├── blog_channel_ncd_var.h │ │ ├── blog_channel_nsskey.h │ │ ├── blog_channel_server.h │ │ ├── blog_channel_tun2socks.h │ │ ├── blog_channel_udpgw.h │ │ ├── blog_channels_defines.h │ │ ├── blog_channels_list.h │ │ ├── bproto_addr.h │ │ ├── bproto_bproto_test.h │ │ ├── bproto_msgproto.h │ │ ├── flex_BPredicate.c │ │ └── flex_BPredicate.h │ │ ├── jni │ │ └── ca │ │ │ └── psiphon │ │ │ └── Tun2SocksJniLoader.java │ │ ├── lemon │ │ ├── lemon.c │ │ └── lempar.c │ │ ├── lime │ │ ├── HOWTO │ │ ├── flex_token_stream.php │ │ ├── lemon.c │ │ ├── lime.bootstrap │ │ ├── lime.php │ │ ├── lime_scan_tokens.l │ │ ├── metagrammar │ │ ├── parse_engine.php │ │ └── set.so.php │ │ ├── lwip │ │ ├── CHANGELOG │ │ ├── CMakeLists.txt │ │ ├── COPYING │ │ ├── FILES │ │ ├── README │ │ ├── UPGRADING │ │ ├── custom │ │ │ ├── arch │ │ │ │ ├── cc.h │ │ │ │ └── perf.h │ │ │ ├── lwipopts.h │ │ │ └── sys.c │ │ ├── doc │ │ │ ├── FILES │ │ │ ├── contrib.txt │ │ │ ├── rawapi.txt │ │ │ ├── savannah.txt │ │ │ ├── snmp_agent.txt │ │ │ └── sys_arch.txt │ │ ├── lwip-base-version │ │ ├── src │ │ │ ├── FILES │ │ │ ├── api │ │ │ │ ├── api_lib.c │ │ │ │ ├── api_msg.c │ │ │ │ ├── err.c │ │ │ │ ├── netbuf.c │ │ │ │ ├── netdb.c │ │ │ │ ├── netifapi.c │ │ │ │ ├── sockets.c │ │ │ │ └── tcpip.c │ │ │ ├── core │ │ │ │ ├── def.c │ │ │ │ ├── dhcp.c │ │ │ │ ├── dns.c │ │ │ │ ├── inet_chksum.c │ │ │ │ ├── init.c │ │ │ │ ├── ipv4 │ │ │ │ │ ├── autoip.c │ │ │ │ │ ├── icmp.c │ │ │ │ │ ├── igmp.c │ │ │ │ │ ├── ip4.c │ │ │ │ │ ├── ip4_addr.c │ │ │ │ │ └── ip_frag.c │ │ │ │ ├── ipv6 │ │ │ │ │ ├── README │ │ │ │ │ ├── dhcp6.c │ │ │ │ │ ├── ethip6.c │ │ │ │ │ ├── icmp6.c │ │ │ │ │ ├── inet6.c │ │ │ │ │ ├── ip6.c │ │ │ │ │ ├── ip6_addr.c │ │ │ │ │ ├── ip6_frag.c │ │ │ │ │ ├── mld6.c │ │ │ │ │ └── nd6.c │ │ │ │ ├── mem.c │ │ │ │ ├── memp.c │ │ │ │ ├── netif.c │ │ │ │ ├── pbuf.c │ │ │ │ ├── raw.c │ │ │ │ ├── snmp │ │ │ │ │ ├── asn1_dec.c │ │ │ │ │ ├── asn1_enc.c │ │ │ │ │ ├── mib2.c │ │ │ │ │ ├── mib_structs.c │ │ │ │ │ ├── msg_in.c │ │ │ │ │ └── msg_out.c │ │ │ │ ├── stats.c │ │ │ │ ├── sys.c │ │ │ │ ├── tcp.c │ │ │ │ ├── tcp_in.c │ │ │ │ ├── tcp_out.c │ │ │ │ ├── timers.c │ │ │ │ └── udp.c │ │ │ ├── include │ │ │ │ ├── ipv4 │ │ │ │ │ └── lwip │ │ │ │ │ │ ├── autoip.h │ │ │ │ │ │ ├── icmp.h │ │ │ │ │ │ ├── igmp.h │ │ │ │ │ │ ├── inet.h │ │ │ │ │ │ ├── ip4.h │ │ │ │ │ │ ├── ip4_addr.h │ │ │ │ │ │ └── ip_frag.h │ │ │ │ ├── ipv6 │ │ │ │ │ └── lwip │ │ │ │ │ │ ├── dhcp6.h │ │ │ │ │ │ ├── ethip6.h │ │ │ │ │ │ ├── icmp6.h │ │ │ │ │ │ ├── inet6.h │ │ │ │ │ │ ├── ip6.h │ │ │ │ │ │ ├── ip6_addr.h │ │ │ │ │ │ ├── ip6_frag.h │ │ │ │ │ │ ├── mld6.h │ │ │ │ │ │ └── nd6.h │ │ │ │ ├── lwip │ │ │ │ │ ├── api.h │ │ │ │ │ ├── api_msg.h │ │ │ │ │ ├── arch.h │ │ │ │ │ ├── debug.h │ │ │ │ │ ├── def.h │ │ │ │ │ ├── dhcp.h │ │ │ │ │ ├── dns.h │ │ │ │ │ ├── err.h │ │ │ │ │ ├── inet_chksum.h │ │ │ │ │ ├── init.h │ │ │ │ │ ├── ip.h │ │ │ │ │ ├── ip_addr.h │ │ │ │ │ ├── mem.h │ │ │ │ │ ├── memp.h │ │ │ │ │ ├── memp_std.h │ │ │ │ │ ├── netbuf.h │ │ │ │ │ ├── netdb.h │ │ │ │ │ ├── netif.h │ │ │ │ │ ├── netifapi.h │ │ │ │ │ ├── opt.h │ │ │ │ │ ├── pbuf.h │ │ │ │ │ ├── raw.h │ │ │ │ │ ├── sio.h │ │ │ │ │ ├── snmp.h │ │ │ │ │ ├── snmp_asn1.h │ │ │ │ │ ├── snmp_msg.h │ │ │ │ │ ├── snmp_structs.h │ │ │ │ │ ├── sockets.h │ │ │ │ │ ├── stats.h │ │ │ │ │ ├── sys.h │ │ │ │ │ ├── tcp.h │ │ │ │ │ ├── tcp_impl.h │ │ │ │ │ ├── tcpip.h │ │ │ │ │ ├── timers.h │ │ │ │ │ └── udp.h │ │ │ │ ├── netif │ │ │ │ │ ├── etharp.h │ │ │ │ │ ├── ppp_oe.h │ │ │ │ │ └── slipif.h │ │ │ │ └── posix │ │ │ │ │ ├── netdb.h │ │ │ │ │ └── sys │ │ │ │ │ └── socket.h │ │ │ └── netif │ │ │ │ ├── FILES │ │ │ │ ├── etharp.c │ │ │ │ ├── ethernetif.c │ │ │ │ ├── ppp │ │ │ │ ├── auth.c │ │ │ │ ├── auth.h │ │ │ │ ├── chap.c │ │ │ │ ├── chap.h │ │ │ │ ├── chpms.c │ │ │ │ ├── chpms.h │ │ │ │ ├── fsm.c │ │ │ │ ├── fsm.h │ │ │ │ ├── ipcp.c │ │ │ │ ├── ipcp.h │ │ │ │ ├── lcp.c │ │ │ │ ├── lcp.h │ │ │ │ ├── magic.c │ │ │ │ ├── magic.h │ │ │ │ ├── md5.c │ │ │ │ ├── md5.h │ │ │ │ ├── pap.c │ │ │ │ ├── pap.h │ │ │ │ ├── ppp.c │ │ │ │ ├── ppp.h │ │ │ │ ├── ppp_impl.h │ │ │ │ ├── ppp_oe.c │ │ │ │ ├── pppdebug.h │ │ │ │ ├── randm.c │ │ │ │ ├── randm.h │ │ │ │ ├── readme.txt │ │ │ │ ├── vj.c │ │ │ │ └── vj.h │ │ │ │ └── slipif.c │ │ └── test │ │ │ └── unit │ │ │ ├── core │ │ │ ├── test_mem.c │ │ │ ├── test_mem.h │ │ │ ├── test_pbuf.c │ │ │ └── test_pbuf.h │ │ │ ├── dhcp │ │ │ ├── test_dhcp.c │ │ │ └── test_dhcp.h │ │ │ ├── etharp │ │ │ ├── test_etharp.c │ │ │ └── test_etharp.h │ │ │ ├── lwip_check.h │ │ │ ├── lwip_unittests.c │ │ │ ├── lwipopts.h │ │ │ ├── tcp │ │ │ ├── tcp_helper.c │ │ │ ├── tcp_helper.h │ │ │ ├── test_tcp.c │ │ │ ├── test_tcp.h │ │ │ ├── test_tcp_oos.c │ │ │ └── test_tcp_oos.h │ │ │ └── udp │ │ │ ├── test_udp.c │ │ │ └── test_udp.h │ │ ├── misc │ │ ├── BRefTarget.h │ │ ├── Utf16Decoder.h │ │ ├── Utf16Encoder.h │ │ ├── Utf8Decoder.h │ │ ├── Utf8Encoder.h │ │ ├── arp_proto.h │ │ ├── array_length.h │ │ ├── balign.h │ │ ├── balloc.h │ │ ├── blimits.h │ │ ├── bsize.h │ │ ├── bsort.h │ │ ├── bstring.h │ │ ├── byteorder.h │ │ ├── cmdline.h │ │ ├── compare.h │ │ ├── concat_strings.h │ │ ├── cstring.h │ │ ├── dead.h │ │ ├── debug.h │ │ ├── debugcounter.h │ │ ├── debugerror.h │ │ ├── dhcp_proto.h │ │ ├── ethernet_proto.h │ │ ├── exparray.h │ │ ├── expstring.h │ │ ├── find_char.h │ │ ├── find_program.h │ │ ├── get_iface_info.h │ │ ├── grow_array.h │ │ ├── hashfun.h │ │ ├── igmp_proto.h │ │ ├── ipaddr.h │ │ ├── ipaddr6.h │ │ ├── ipv4_proto.h │ │ ├── ipv6_proto.h │ │ ├── loggers_string.h │ │ ├── loglevel.h │ │ ├── maxalign.h │ │ ├── merge.h │ │ ├── minmax.h │ │ ├── modadd.h │ │ ├── mswsock.h │ │ ├── nonblocking.h │ │ ├── nsskey.h │ │ ├── offset.h │ │ ├── open_standard_streams.h │ │ ├── overflow.h │ │ ├── packed.h │ │ ├── parse_number.h │ │ ├── print_macros.h │ │ ├── read_file.h │ │ ├── read_write_int.h │ │ ├── socks_proto.h │ │ ├── sslsocket.h │ │ ├── stdbuf_cmdline.h │ │ ├── strdup.h │ │ ├── string_begins_with.h │ │ ├── substring.h │ │ ├── udp_proto.h │ │ ├── unicode_funcs.h │ │ ├── version.h │ │ └── write_file.h │ │ ├── ncd-request │ │ ├── CMakeLists.txt │ │ └── ncd-request.c │ │ ├── ncd │ │ ├── CMakeLists.txt │ │ ├── NCDAst.c │ │ ├── NCDAst.h │ │ ├── NCDBuildProgram.c │ │ ├── NCDBuildProgram.h │ │ ├── NCDConfigParser.c │ │ ├── NCDConfigParser.h │ │ ├── NCDConfigParser_parse.y │ │ ├── NCDConfigTokenizer.c │ │ ├── NCDConfigTokenizer.h │ │ ├── NCDInterpProcess.c │ │ ├── NCDInterpProcess.h │ │ ├── NCDInterpProg.c │ │ ├── NCDInterpProg.h │ │ ├── NCDInterpProg_hash.h │ │ ├── NCDInterpreter.c │ │ ├── NCDInterpreter.h │ │ ├── NCDMethodIndex.c │ │ ├── NCDMethodIndex.h │ │ ├── NCDMethodIndex_hash.h │ │ ├── NCDModule.c │ │ ├── NCDModule.h │ │ ├── NCDModuleIndex.c │ │ ├── NCDModuleIndex.h │ │ ├── NCDModuleIndex_mhash.h │ │ ├── NCDObject.c │ │ ├── NCDObject.h │ │ ├── NCDPlaceholderDb.c │ │ ├── NCDPlaceholderDb.h │ │ ├── NCDStringIndex.c │ │ ├── NCDStringIndex.h │ │ ├── NCDStringIndex_hash.h │ │ ├── NCDSugar.c │ │ ├── NCDSugar.h │ │ ├── NCDVal.c │ │ ├── NCDVal.h │ │ ├── NCDValCons.c │ │ ├── NCDValCons.h │ │ ├── NCDValGenerator.c │ │ ├── NCDValGenerator.h │ │ ├── NCDValParser.c │ │ ├── NCDValParser.h │ │ ├── NCDValParser_parse.y │ │ ├── NCDVal_maptree.h │ │ ├── README │ │ ├── emncd.c │ │ ├── emncd.html │ │ ├── examples │ │ │ ├── dbus_start.ncd │ │ │ ├── dhcpd.conf.template │ │ │ ├── directory_updater.ncd │ │ │ ├── events.ncd │ │ │ ├── igmpproxy.conf.template │ │ │ ├── make_dhcp_config.ncd │ │ │ ├── make_igmpproxy_config.ncd │ │ │ ├── network.ncd │ │ │ ├── onoff_server.ncdi │ │ │ ├── onoff_server_test.ncd │ │ │ ├── tcp_echo_client.ncd │ │ │ └── tcp_echo_server.ncd │ │ ├── extra │ │ │ ├── BEventLock.c │ │ │ ├── BEventLock.h │ │ │ ├── NCDBProcessOpts.c │ │ │ ├── NCDBProcessOpts.h │ │ │ ├── NCDBuf.c │ │ │ ├── NCDBuf.h │ │ │ ├── NCDIfConfig.c │ │ │ ├── NCDIfConfig.h │ │ │ ├── NCDInterfaceMonitor.c │ │ │ ├── NCDInterfaceMonitor.h │ │ │ ├── NCDRequestClient.c │ │ │ ├── NCDRequestClient.h │ │ │ ├── NCDRfkillMonitor.c │ │ │ ├── NCDRfkillMonitor.h │ │ │ ├── address_utils.h │ │ │ ├── build_cmdline.c │ │ │ ├── build_cmdline.h │ │ │ ├── make_fast_names.h │ │ │ └── value_utils.h │ │ ├── include_linux_input.c │ │ ├── make_name_indices.h │ │ ├── modules │ │ │ ├── alias.c │ │ │ ├── arithmetic.c │ │ │ ├── assert.c │ │ │ ├── backtrack.c │ │ │ ├── blocker.c │ │ │ ├── buffer.c │ │ │ ├── buffer_chunks_tree.h │ │ │ ├── call2.c │ │ │ ├── choose.c │ │ │ ├── command_template.c │ │ │ ├── command_template.h │ │ │ ├── concat.c │ │ │ ├── daemon.c │ │ │ ├── depend.c │ │ │ ├── depend_scope.c │ │ │ ├── dynamic_depend.c │ │ │ ├── event_template.c │ │ │ ├── event_template.h │ │ │ ├── exit.c │ │ │ ├── explode.c │ │ │ ├── file.c │ │ │ ├── file_open.c │ │ │ ├── foreach.c │ │ │ ├── from_string.c │ │ │ ├── getargs.c │ │ │ ├── getenv.c │ │ │ ├── if.c │ │ │ ├── imperative.c │ │ │ ├── implode.c │ │ │ ├── index.c │ │ │ ├── list.c │ │ │ ├── load_module.c │ │ │ ├── log.c │ │ │ ├── logical.c │ │ │ ├── modules.h │ │ │ ├── multidepend.c │ │ │ ├── net_backend_badvpn.c │ │ │ ├── net_backend_rfkill.c │ │ │ ├── net_backend_waitdevice.c │ │ │ ├── net_backend_waitlink.c │ │ │ ├── net_backend_wpa_supplicant.c │ │ │ ├── net_dns.c │ │ │ ├── net_iptables.c │ │ │ ├── net_ipv4_addr.c │ │ │ ├── net_ipv4_addr_in_network.c │ │ │ ├── net_ipv4_arp_probe.c │ │ │ ├── net_ipv4_dhcp.c │ │ │ ├── net_ipv4_route.c │ │ │ ├── net_ipv6_addr.c │ │ │ ├── net_ipv6_addr_in_network.c │ │ │ ├── net_ipv6_route.c │ │ │ ├── net_ipv6_wait_dynamic_addr.c │ │ │ ├── net_up.c │ │ │ ├── net_watch_interfaces.c │ │ │ ├── netmask.c │ │ │ ├── ondemand.c │ │ │ ├── parse.c │ │ │ ├── print.c │ │ │ ├── process_manager.c │ │ │ ├── reboot.c │ │ │ ├── ref.c │ │ │ ├── regex_match.c │ │ │ ├── run.c │ │ │ ├── runonce.c │ │ │ ├── sleep.c │ │ │ ├── socket.c │ │ │ ├── spawn.c │ │ │ ├── strcmp.c │ │ │ ├── substr.c │ │ │ ├── sys_evdev.c │ │ │ ├── sys_request_client.c │ │ │ ├── sys_request_server.c │ │ │ ├── sys_start_process.c │ │ │ ├── sys_watch_directory.c │ │ │ ├── sys_watch_input.c │ │ │ ├── sys_watch_usb.c │ │ │ ├── timer.c │ │ │ ├── to_string.c │ │ │ ├── try.c │ │ │ ├── value.c │ │ │ ├── value_maptree.h │ │ │ ├── valuemetic.c │ │ │ └── var.c │ │ ├── ncd.c │ │ ├── ncd.h │ │ ├── parse_linux_input.sh │ │ ├── static_strings.h │ │ └── tests │ │ │ ├── addr_in_network.ncd │ │ │ ├── alias.ncd │ │ │ ├── arithmetic.ncd │ │ │ ├── backtracking.ncd │ │ │ ├── buffer.ncd │ │ │ ├── call.ncd │ │ │ ├── concat.ncd │ │ │ ├── depend.ncd │ │ │ ├── depend_scope.ncd │ │ │ ├── escape_and_nulls.ncd │ │ │ ├── explode.ncd │ │ │ ├── foreach.ncd │ │ │ ├── if.ncd │ │ │ ├── implode.ncd │ │ │ ├── include.ncd │ │ │ ├── include_included.ncdi │ │ │ ├── include_included2.ncdi │ │ │ ├── logical.ncd │ │ │ ├── multidepend.ncd │ │ │ ├── netmask.ncd │ │ │ ├── parse.ncd │ │ │ ├── process_manager.ncd │ │ │ ├── regex.ncd │ │ │ ├── run_tests │ │ │ ├── strings.ncd │ │ │ ├── substr.ncd │ │ │ ├── turing.ncd │ │ │ ├── value.ncd │ │ │ └── value_substr.ncd │ │ ├── nspr_support │ │ ├── BSSLConnection.c │ │ ├── BSSLConnection.h │ │ ├── CMakeLists.txt │ │ ├── DummyPRFileDesc.c │ │ └── DummyPRFileDesc.h │ │ ├── predicate │ │ ├── BPredicate.c │ │ ├── BPredicate.h │ │ ├── BPredicate.l │ │ ├── BPredicate.y │ │ ├── BPredicate_internal.h │ │ ├── BPredicate_parser.h │ │ ├── CMakeLists.txt │ │ └── LexMemoryBufferInput.h │ │ ├── protocol │ │ ├── addr.bproto │ │ ├── addr.h │ │ ├── dataproto.h │ │ ├── fragmentproto.h │ │ ├── msgproto.bproto │ │ ├── msgproto.h │ │ ├── packetproto.h │ │ ├── requestproto.h │ │ ├── scproto.h │ │ ├── spproto.h │ │ └── udpgw_proto.h │ │ ├── random │ │ ├── BRandom2.c │ │ ├── BRandom2.h │ │ └── CMakeLists.txt │ │ ├── scripts │ │ ├── cmake │ │ ├── copy_nss │ │ └── toolchain.cmake │ │ ├── security │ │ ├── BEncryption.c │ │ ├── BEncryption.h │ │ ├── BHash.c │ │ ├── BHash.h │ │ ├── BRandom.c │ │ ├── BRandom.h │ │ ├── BSecurity.c │ │ ├── BSecurity.h │ │ ├── CMakeLists.txt │ │ ├── OTPCalculator.c │ │ ├── OTPCalculator.h │ │ ├── OTPChecker.c │ │ ├── OTPChecker.h │ │ ├── OTPGenerator.c │ │ └── OTPGenerator.h │ │ ├── server │ │ ├── CMakeLists.txt │ │ ├── badvpn-server.8 │ │ ├── server.c │ │ └── server.h │ │ ├── server_connection │ │ ├── CMakeLists.txt │ │ ├── SCKeepaliveSource.c │ │ ├── SCKeepaliveSource.h │ │ ├── ServerConnection.c │ │ └── ServerConnection.h │ │ ├── socksclient │ │ ├── BSocksClient.c │ │ ├── BSocksClient.h │ │ └── CMakeLists.txt │ │ ├── stringmap │ │ ├── BStringMap.c │ │ ├── BStringMap.h │ │ └── CMakeLists.txt │ │ ├── structure │ │ ├── BAVL.h │ │ ├── CAvl.h │ │ ├── CAvl_decl.h │ │ ├── CAvl_footer.h │ │ ├── CAvl_header.h │ │ ├── CAvl_impl.h │ │ ├── CHash.h │ │ ├── CHash_decl.h │ │ ├── CHash_footer.h │ │ ├── CHash_header.h │ │ ├── CHash_impl.h │ │ ├── ChunkBuffer2.h │ │ ├── IndexedList.h │ │ ├── IndexedList_tree.h │ │ ├── LinkedList0.h │ │ ├── LinkedList1.h │ │ ├── LinkedList3.h │ │ ├── SAvl.h │ │ ├── SAvl_decl.h │ │ ├── SAvl_footer.h │ │ ├── SAvl_header.h │ │ ├── SAvl_impl.h │ │ ├── SAvl_tree.h │ │ ├── SLinkedList.h │ │ ├── SLinkedList_decl.h │ │ ├── SLinkedList_footer.h │ │ ├── SLinkedList_header.h │ │ └── SLinkedList_impl.h │ │ ├── system │ │ ├── BAddr.h │ │ ├── BConnection.h │ │ ├── BConnectionGeneric.h │ │ ├── BConnection_unix.c │ │ ├── BConnection_unix.h │ │ ├── BConnection_win.c │ │ ├── BConnection_win.h │ │ ├── BDatagram.h │ │ ├── BDatagram_unix.c │ │ ├── BDatagram_unix.h │ │ ├── BDatagram_win.c │ │ ├── BDatagram_win.h │ │ ├── BInputProcess.c │ │ ├── BInputProcess.h │ │ ├── BLockReactor.c │ │ ├── BLockReactor.h │ │ ├── BNetwork.c │ │ ├── BNetwork.h │ │ ├── BProcess.c │ │ ├── BProcess.h │ │ ├── BReactor.h │ │ ├── BReactor_badvpn.c │ │ ├── BReactor_badvpn.h │ │ ├── BReactor_badvpn_timerstree.h │ │ ├── BReactor_emscripten.c │ │ ├── BReactor_emscripten.h │ │ ├── BReactor_glib.c │ │ ├── BReactor_glib.h │ │ ├── BSignal.c │ │ ├── BSignal.h │ │ ├── BThreadSignal.c │ │ ├── BThreadSignal.h │ │ ├── BTime.c │ │ ├── BTime.h │ │ ├── BUnixSignal.c │ │ ├── BUnixSignal.h │ │ └── CMakeLists.txt │ │ ├── tests │ │ ├── CMakeLists.txt │ │ ├── bproto_test.bproto │ │ ├── bproto_test.c │ │ ├── chunkbuffer2_test.c │ │ └── threadwork_test.c │ │ ├── threadwork │ │ ├── BThreadWork.c │ │ ├── BThreadWork.h │ │ └── CMakeLists.txt │ │ ├── tun2socks │ │ ├── CMakeLists.txt │ │ ├── SocksUdpGwClient.c │ │ ├── SocksUdpGwClient.h │ │ ├── badvpn-tun2socks.8 │ │ ├── tun2socks.c │ │ └── tun2socks.h │ │ ├── tunctl │ │ ├── CMakeLists.txt │ │ └── tunctl.c │ │ ├── tuntap │ │ ├── BTap.c │ │ ├── BTap.h │ │ ├── CMakeLists.txt │ │ ├── tapwin32-funcs.c │ │ ├── tapwin32-funcs.h │ │ └── wintap-common.h │ │ ├── udevmonitor │ │ ├── CMakeLists.txt │ │ ├── NCDUdevCache.c │ │ ├── NCDUdevCache.h │ │ ├── NCDUdevManager.c │ │ ├── NCDUdevManager.h │ │ ├── NCDUdevMonitor.c │ │ ├── NCDUdevMonitor.h │ │ ├── NCDUdevMonitorParser.c │ │ └── NCDUdevMonitorParser.h │ │ ├── udpgw │ │ ├── CMakeLists.txt │ │ ├── udpgw.c │ │ └── udpgw.h │ │ └── udpgw_client │ │ ├── CMakeLists.txt │ │ ├── UdpGwClient.c │ │ └── UdpGwClient.h │ └── res │ ├── drawable-hdpi │ ├── baseline_device_hub_white_24.png │ ├── baseline_gpp_maybe_white_24.png │ ├── baseline_info_white_24.png │ ├── baseline_notifications_active_white_24.png │ ├── baseline_place_white_24.png │ ├── baseline_privacy_tip_white_24.png │ ├── baseline_send_white_24.png │ ├── baseline_settings_white_24.png │ ├── baseline_sync_disabled_white_24.png │ ├── baseline_system_update_white_24.png │ ├── baseline_translate_white_24.png │ ├── baseline_vibration_white_24.png │ ├── baseline_vpn_key_white_24.png │ ├── bump_onboarding_1.png │ ├── bump_onboarding_2.png │ ├── bump_onboarding_3.png │ ├── bump_onboarding_4.png │ ├── ic_btn_stop.png │ ├── ic_psiphon_alert_notification.png │ ├── notification_icon_connected.png │ ├── notification_icon_connecting_01.png │ ├── notification_icon_connecting_02.png │ ├── notification_icon_connecting_03.png │ ├── notification_icon_connecting_04.png │ ├── notification_icon_connecting_05.png │ ├── notification_icon_connecting_06.png │ ├── notification_icon_upgrade_available.png │ ├── notification_icon_waiting.png │ ├── status_icon_connected.png │ ├── status_icon_connecting.png │ └── status_icon_disconnected.png │ ├── drawable-mdpi │ ├── baseline_device_hub_white_24.png │ ├── baseline_gpp_maybe_white_24.png │ ├── baseline_info_white_24.png │ ├── baseline_notifications_active_white_24.png │ ├── baseline_place_white_24.png │ ├── baseline_privacy_tip_white_24.png │ ├── baseline_send_white_24.png │ ├── baseline_settings_white_24.png │ ├── baseline_sync_disabled_white_24.png │ ├── baseline_system_update_white_24.png │ ├── baseline_translate_white_24.png │ ├── baseline_vibration_white_24.png │ ├── baseline_vpn_key_white_24.png │ ├── bump_onboarding_1.png │ ├── bump_onboarding_2.png │ ├── bump_onboarding_3.png │ ├── bump_onboarding_4.png │ ├── ic_btn_stop.png │ ├── ic_psiphon_alert_notification.png │ ├── notification_icon_connected.png │ ├── notification_icon_connecting_01.png │ ├── notification_icon_connecting_02.png │ ├── notification_icon_connecting_03.png │ ├── notification_icon_connecting_04.png │ ├── notification_icon_connecting_05.png │ ├── notification_icon_connecting_06.png │ ├── notification_icon_upgrade_available.png │ ├── notification_icon_waiting.png │ ├── status_icon_connected.png │ ├── status_icon_connecting.png │ └── status_icon_disconnected.png │ ├── drawable-v21 │ ├── connection_progress_bar_01.xml │ └── connection_progress_bar_02.xml │ ├── drawable-v24 │ ├── ic_launcher_background.xml │ └── ic_launcher_foreground.xml │ ├── drawable-xhdpi │ ├── baseline_device_hub_white_24.png │ ├── baseline_gpp_maybe_white_24.png │ ├── baseline_info_white_24.png │ ├── baseline_notifications_active_white_24.png │ ├── baseline_place_white_24.png │ ├── baseline_privacy_tip_white_24.png │ ├── baseline_send_white_24.png │ ├── baseline_settings_white_24.png │ ├── baseline_sync_disabled_white_24.png │ ├── baseline_system_update_white_24.png │ ├── baseline_translate_white_24.png │ ├── baseline_vibration_white_24.png │ ├── baseline_vpn_key_white_24.png │ ├── bump_onboarding_1.png │ ├── bump_onboarding_2.png │ ├── bump_onboarding_3.png │ ├── bump_onboarding_4.png │ ├── ic_psiphon_alert_notification.png │ ├── notification_icon_connected.png │ ├── notification_icon_connecting_01.png │ ├── notification_icon_connecting_02.png │ ├── notification_icon_connecting_03.png │ ├── notification_icon_connecting_04.png │ ├── notification_icon_connecting_05.png │ ├── notification_icon_connecting_06.png │ ├── notification_icon_upgrade_available.png │ ├── notification_icon_waiting.png │ ├── status_icon_connected.png │ ├── status_icon_connecting.png │ └── status_icon_disconnected.png │ ├── drawable-xxhdpi │ ├── baseline_device_hub_white_24.png │ ├── baseline_gpp_maybe_white_24.png │ ├── baseline_info_white_24.png │ ├── baseline_notifications_active_white_24.png │ ├── baseline_place_white_24.png │ ├── baseline_privacy_tip_white_24.png │ ├── baseline_send_white_24.png │ ├── baseline_settings_white_24.png │ ├── baseline_sync_disabled_white_24.png │ ├── baseline_system_update_white_24.png │ ├── baseline_translate_white_24.png │ ├── baseline_vibration_white_24.png │ ├── baseline_vpn_key_white_24.png │ ├── bump_onboarding_1.png │ ├── bump_onboarding_2.png │ ├── bump_onboarding_3.png │ ├── bump_onboarding_4.png │ ├── ic_psiphon_alert_notification.png │ ├── notification_icon_connected.png │ ├── notification_icon_connecting_01.png │ ├── notification_icon_connecting_02.png │ ├── notification_icon_connecting_03.png │ ├── notification_icon_connecting_04.png │ ├── notification_icon_connecting_05.png │ ├── notification_icon_connecting_06.png │ ├── notification_icon_upgrade_available.png │ ├── notification_icon_waiting.png │ ├── status_icon_connected.png │ ├── status_icon_connecting.png │ └── status_icon_disconnected.png │ ├── drawable-xxxhdpi │ ├── baseline_device_hub_white_24.png │ ├── baseline_info_white_24.png │ ├── baseline_notifications_active_white_24.png │ ├── baseline_place_white_24.png │ ├── baseline_privacy_tip_white_24.png │ ├── baseline_send_white_24.png │ ├── baseline_settings_white_24.png │ ├── baseline_sync_disabled_white_24.png │ ├── baseline_system_update_white_24.png │ ├── baseline_translate_white_24.png │ ├── baseline_vibration_white_24.png │ ├── baseline_vpn_key_white_24.png │ ├── ic_psiphon_alert_notification.png │ ├── notification_icon_connected.png │ ├── notification_icon_connecting_01.png │ ├── notification_icon_connecting_02.png │ ├── notification_icon_connecting_03.png │ ├── notification_icon_connecting_04.png │ ├── notification_icon_connecting_05.png │ ├── notification_icon_connecting_06.png │ ├── notification_icon_upgrade_available.png │ ├── notification_icon_waiting.png │ ├── status_icon_connected.png │ ├── status_icon_connecting.png │ └── status_icon_disconnected.png │ ├── drawable │ ├── banner.png │ ├── connection_progress_bar_01.xml │ ├── connection_progress_bar_02.xml │ ├── connection_waiting_network_animation_drawable.xml │ ├── flag_ae.xml │ ├── flag_any.xml │ ├── flag_ar.xml │ ├── flag_at.xml │ ├── flag_au.xml │ ├── flag_be.xml │ ├── flag_bg.xml │ ├── flag_br.xml │ ├── flag_ca.xml │ ├── flag_ch.xml │ ├── flag_cl.xml │ ├── flag_co.xml │ ├── flag_cz.xml │ ├── flag_de.xml │ ├── flag_dk.xml │ ├── flag_ee.xml │ ├── flag_es.xml │ ├── flag_fi.xml │ ├── flag_fr.xml │ ├── flag_gb.xml │ ├── flag_gr.xml │ ├── flag_hk.xml │ ├── flag_hr.xml │ ├── flag_hu.xml │ ├── flag_id.xml │ ├── flag_ie.xml │ ├── flag_in.xml │ ├── flag_is.xml │ ├── flag_it.xml │ ├── flag_jp.xml │ ├── flag_ke.xml │ ├── flag_kr.xml │ ├── flag_lt.xml │ ├── flag_lv.xml │ ├── flag_mx.xml │ ├── flag_my.xml │ ├── flag_nl.xml │ ├── flag_no.xml │ ├── flag_nz.xml │ ├── flag_pl.xml │ ├── flag_pt.xml │ ├── flag_ro.xml │ ├── flag_rs.xml │ ├── flag_se.xml │ ├── flag_sg.xml │ ├── flag_sk.xml │ ├── flag_tw.xml │ ├── flag_ua.xml │ ├── flag_us.xml │ ├── flag_za.xml │ ├── home_progressbar.xml │ ├── ic_contactless.xml │ ├── ic_contactless_nfc_disabled.xml │ ├── ic_nfc_help.xml │ ├── notification_icon_connecting_animation.xml │ ├── onboarding_selected_dot_white.xml │ ├── onboarding_unselected_dot_white.xml │ └── tab_selector_dot_white.xml │ ├── layout-ar │ └── message_row.xml │ ├── layout-fa │ └── message_row.xml │ ├── layout │ ├── activity_psiphon_bump_help_layout.xml │ ├── dialog_list_preference.xml │ ├── feedback.xml │ ├── home_tab_layout.xml │ ├── logs_tab_layout.xml │ ├── main_activity.xml │ ├── menu_psiphon_version.xml │ ├── message_row.xml │ ├── permission_rationale.xml │ ├── preference_region_selection_row.xml │ ├── preference_widget_applist_row.xml │ ├── preference_widget_radiobutton.xml │ ├── psiphon_bump_help_fragment.xml │ ├── psiphon_nfc_reader_layout.xml │ ├── region_selector_pref_widget_layout.xml │ ├── statistics.xml │ ├── statistics_tab_layout.xml │ ├── unsafe_traffic_alert_layout.xml │ ├── unsafe_traffic_alert_prompt_layout.xml │ └── vpn_data_collection_disclosure_prompt_layout.xml │ ├── menu │ └── activity_main.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── values-am │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-ar │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-az │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-be │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-bn │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-bo │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-de │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-el │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-es │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-fa-rAF │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-fa │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-fi │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-fr │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-ha │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-hi │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-hr │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-in │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-it │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-kk │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-km │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-kn │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-ko │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-ky │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-ml │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-mr │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-ms │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-my │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-nb │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-nl │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-om │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-pt-rBR │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-pt │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-ru │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-sn │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-sw │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-sw360dp-v13 │ └── values-preference.xml │ ├── values-tg │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-th │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-ti │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-tk │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-tr │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-uk │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-ur │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-uz │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-v35 │ └── styles.xml │ ├── values-vi │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-zh-rTW │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values-zh │ ├── psiphon_android_library_strings.xml │ └── strings.xml │ ├── values │ ├── ids.xml │ ├── psiphon_android_library_strings.xml │ ├── psiphon_android_library_untranslated_strings.xml │ ├── strings.xml │ ├── styles.xml │ └── untranslated_strings.xml │ └── xml │ ├── apduservice.xml │ ├── more_options_preferences.xml │ ├── provider_paths.xml │ ├── proxy_options_preferences.xml │ ├── settings_preferences_screen.xml │ └── vpn_options_preferences.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── i18n ├── .gitignore ├── README.md ├── feedback │ ├── en.yaml │ └── feedback.html.tpl ├── pyproject.toml ├── transifex_pull.py └── uv.lock ├── settings.gradle ├── signing.properties ├── tray ├── .travis.yml ├── LICENSE.txt ├── README.md ├── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── proguard-rules.pro └── src │ ├── androidTest │ ├── AndroidManifest.xml │ └── java │ │ └── net │ │ └── grandcentrix │ │ └── tray │ │ ├── AppPreferencesTest.java │ │ ├── TrayPreferencesTest.java │ │ ├── TrayTest.java │ │ ├── core │ │ ├── AbstractTrayPreferenceTest.java │ │ ├── ItemNotFoundExceptionTest.java │ │ ├── MockSimplePreferences.java │ │ ├── ModularizedAccessorTest.java │ │ ├── PreferenceMigrateTest.java │ │ ├── PreferenceTest.java │ │ ├── SharedPreferencesImportTest.java │ │ ├── TrayLogTest.java │ │ ├── TrayStorageTest.java │ │ └── WrongTypeExceptionTest.java │ │ ├── mock │ │ ├── MockTrayModulePreferences.java │ │ ├── MockTrayStorage.java │ │ └── TestTrayModulePreferences.java │ │ ├── provider │ │ ├── ChangedListenerTest.java │ │ ├── ContentProviderStorageTest.java │ │ ├── MockProvider.java │ │ ├── SqliteHelperTest.java │ │ ├── TrayContractTest.java │ │ ├── TrayDBHelperTest.java │ │ ├── TrayItemTest.java │ │ ├── TrayProviderHelperTest.java │ │ ├── TrayProviderTest.java │ │ ├── TrayProviderTestCase.java │ │ └── TrayUriTest.java │ │ └── publicapi │ │ ├── README.md │ │ ├── ReadDifferentFormat.java │ │ ├── RenamePreference.java │ │ └── SaveNull.java │ └── main │ ├── AndroidManifest.xml │ └── java │ └── net │ └── grandcentrix │ └── tray │ ├── AppPreferences.java │ ├── Tray.java │ ├── TrayAppPreferences.java │ ├── TrayModulePreferences.java │ ├── TrayPreferences.java │ ├── core │ ├── AbstractTrayPreference.java │ ├── ItemNotFoundException.java │ ├── Migration.java │ ├── OnTrayPreferenceChangeListener.java │ ├── PreferenceAccessor.java │ ├── PreferenceStorage.java │ ├── Preferences.java │ ├── SharedPreferencesImport.java │ ├── TrayException.java │ ├── TrayItem.java │ ├── TrayLog.java │ ├── TrayMigration.java │ ├── TrayRuntimeException.java │ ├── TrayStorage.java │ └── WrongTypeException.java │ └── provider │ ├── ContentProviderStorage.java │ ├── SqliteHelper.java │ ├── TrayContentProvider.java │ ├── TrayContract.java │ ├── TrayDBHelper.java │ ├── TrayProviderHelper.java │ └── TrayUri.java └── version.properties /.gitattributes: -------------------------------------------------------------------------------- 1 | app/libs/*.aar filter=lfs diff=lfs merge=lfs -text 2 | app/libs/*.jar filter=lfs diff=lfs merge=lfs -text 3 | -------------------------------------------------------------------------------- /3rd party/flagkit_flag_icons_license.txt: -------------------------------------------------------------------------------- 1 | FlagKit Project https://github.com/madebybowtie/FlagKit 2 | 3 | The MIT License (MIT) 4 | 5 | Copyright (c) 2016 Bowtie AB 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Psiphon for Android 2 | This repository contains code for Psiphon Android client. 3 | -------------------------------------------------------------------------------- /app/libs/achartengine-1.0.0.jar: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:815e880f885330f85e88ae43845123e9327d7a1ecc6603f46e69ca383e9a0fb9 3 | size 109717 4 | -------------------------------------------------------------------------------- /app/libs/ca.psiphon.aar: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:080959a0dfd60304f8a155dbd859ddc5c0c9501efef3d1e1f4ac9f1232c0665a 3 | size 41583818 4 | -------------------------------------------------------------------------------- /app/libs/jackson-core-2.2.0.jar: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:455a768d8127f3391cb40abc208580715d79bc391657b10a242427a1641a4b95 3 | size 191950 4 | -------------------------------------------------------------------------------- /app/libs/jndcrash-release.aar: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:934ac518019483efc2419abcce13a96a91b133ed6da53291dd378c6e11b3fdcb 3 | size 254309 4 | -------------------------------------------------------------------------------- /app/libs/snakeyaml-1.10-android.jar: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:da32778bc900124502353a7e5b7718746e8c4dfbed6b50702e9ebced7b19a81b 3 | size 261029 4 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /opt/android-sdk-linux/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Preserve native methods in Tun2SocksJniLoader 20 | -keep class ca.psiphon.Tun2SocksJniLoader { 21 | native ; 22 | } 23 | 24 | # Keep the logTun2Socks method in VpnManager, as it is called from native code 25 | -keep class com.psiphon3.VpnManager { 26 | public static void logTun2Socks(java.lang.String, java.lang.String, java.lang.String); 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/assets/startpage/bookmarks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/assets/startpage/bookmarks.png -------------------------------------------------------------------------------- /app/src/main/assets/startpage/history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/assets/startpage/history.png -------------------------------------------------------------------------------- /app/src/main/assets/startpage/linef.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/assets/startpage/linef.png -------------------------------------------------------------------------------- /app/src/main/assets/startpage/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/assets/startpage/search.png -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/psiphon3/psiphonlibrary/.gitignore: -------------------------------------------------------------------------------- 1 | EmbeddedValues.java 2 | -------------------------------------------------------------------------------- /app/src/main/java/com/psiphon3/psiphonlibrary/RadioButtonPreference.java: -------------------------------------------------------------------------------- 1 | package com.psiphon3.psiphonlibrary; 2 | 3 | import android.content.Context; 4 | import androidx.preference.CheckBoxPreference; 5 | import android.util.AttributeSet; 6 | 7 | import com.psiphon3.R; 8 | 9 | public class RadioButtonPreference extends CheckBoxPreference { 10 | 11 | public RadioButtonPreference(Context context, AttributeSet attrs, 12 | int defStyle) { 13 | super(context, attrs, defStyle); 14 | setWidgetLayoutResource(R.layout.preference_widget_radiobutton); 15 | } 16 | 17 | public RadioButtonPreference(Context context, AttributeSet attrs) { 18 | super(context, attrs); 19 | setWidgetLayoutResource(R.layout.preference_widget_radiobutton); 20 | } 21 | 22 | public RadioButtonPreference(Context context) { 23 | this(context, null); 24 | } 25 | 26 | @Override 27 | public void onClick() { 28 | if(this.isChecked()) { 29 | return; 30 | } 31 | super.onClick(); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/jni/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH := $(call my-dir) 2 | 3 | BADVPN_PATH := $(LOCAL_PATH)/badvpn 4 | include $(BADVPN_PATH)/Android.mk 5 | -------------------------------------------------------------------------------- /app/src/main/jni/Application.mk: -------------------------------------------------------------------------------- 1 | APP_ABI := all 2 | APP_PLATFORM := android-14 3 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/arpprobe/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(arpprobe BArpProbe.c) 2 | target_link_libraries(arpprobe base system flow) 3 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/base/BPending_list.h: -------------------------------------------------------------------------------- 1 | #define SLINKEDLIST_PARAM_NAME BPending__List 2 | #define SLINKEDLIST_PARAM_FEATURE_LAST 0 3 | #define SLINKEDLIST_PARAM_TYPE_ENTRY struct BSmallPending_s 4 | #define SLINKEDLIST_PARAM_MEMBER_NODE pending_node 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/base/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(BASE_ADDITIONAL_SOURCES) 2 | 3 | if (HAVE_SYSLOG_H) 4 | list(APPEND BASE_ADDITIONAL_SOURCES BLog_syslog.c) 5 | endif () 6 | 7 | set(BASE_SOURCES 8 | DebugObject.c 9 | BLog.c 10 | BPending.c 11 | ${BASE_ADDITIONAL_SOURCES} 12 | ) 13 | badvpn_add_library(base "" "" "${BASE_SOURCES}") 14 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/blog_generator/blog_functions.php: -------------------------------------------------------------------------------- 1 | 0) { 7 | if (preg_match('/^\\/\\/.*/', $str, $matches)) { 8 | $str = substr($str, strlen($matches[0])); 9 | } 10 | else if (preg_match('/^\\s+/', $str, $matches)) { 11 | $str = substr($str, strlen($matches[0])); 12 | } 13 | else if (preg_match('/^[0-9]+/', $str, $matches)) { 14 | $out[] = array('number', $matches[0]); 15 | $str = substr($str, strlen($matches[0])); 16 | } 17 | else if (preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*/', $str, $matches)) { 18 | $out[] = array('name', $matches[0]); 19 | $str = substr($str, strlen($matches[0])); 20 | } 21 | else { 22 | return FALSE; 23 | } 24 | } 25 | 26 | return TRUE; 27 | } 28 | 29 | function fatal_error ($message) 30 | { 31 | fwrite(STDERR, "Fatal error: $message\n"); 32 | 33 | ob_get_clean(); 34 | exit(1); 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/client/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(badvpn-client 2 | client.c 3 | StreamPeerIO.c 4 | DatagramPeerIO.c 5 | PasswordListener.c 6 | DataProto.c 7 | FrameDecider.c 8 | DPRelay.c 9 | DPReceive.c 10 | FragmentProtoDisassembler.c 11 | FragmentProtoAssembler.c 12 | SPProtoEncoder.c 13 | SPProtoDecoder.c 14 | DataProtoKeepaliveSource.c 15 | PeerChat.c 16 | SCOutmsgEncoder.c 17 | SimpleStreamBuffer.c 18 | SinglePacketSource.c 19 | ) 20 | target_link_libraries(badvpn-client system flow flowextra tuntap server_conection security threadwork ${NSPR_LIBRARIES} ${NSS_LIBRARIES}) 21 | 22 | install( 23 | TARGETS badvpn-client 24 | RUNTIME DESTINATION bin 25 | ) 26 | 27 | install( 28 | FILES badvpn-client.8 29 | DESTINATION share/man/man8 30 | ) 31 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/client/FragmentProtoAssembler_tree.h: -------------------------------------------------------------------------------- 1 | #define SAVL_PARAM_NAME FPAFramesTree 2 | #define SAVL_PARAM_FEATURE_COUNTS 0 3 | #define SAVL_PARAM_FEATURE_NOKEYS 0 4 | #define SAVL_PARAM_TYPE_ENTRY struct FragmentProtoAssembler_frame 5 | #define SAVL_PARAM_TYPE_KEY fragmentproto_frameid 6 | #define SAVL_PARAM_TYPE_ARG int 7 | #define SAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) B_COMPARE((entry1)->id, (entry2)->id) 8 | #define SAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, entry2) B_COMPARE((key1), (entry2)->id) 9 | #define SAVL_PARAM_MEMBER_NODE tree_node 10 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/client/FrameDecider_groups_tree.h: -------------------------------------------------------------------------------- 1 | #define SAVL_PARAM_NAME FDGroupsTree 2 | #define SAVL_PARAM_FEATURE_COUNTS 0 3 | #define SAVL_PARAM_FEATURE_NOKEYS 0 4 | #define SAVL_PARAM_TYPE_ENTRY struct _FrameDecider_group_entry 5 | #define SAVL_PARAM_TYPE_KEY uint32_t 6 | #define SAVL_PARAM_TYPE_ARG int 7 | #define SAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) B_COMPARE((entry1)->group, (entry2)->group) 8 | #define SAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, entry2) B_COMPARE((key1), (entry2)->group) 9 | #define SAVL_PARAM_MEMBER_NODE tree_node 10 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/client/FrameDecider_macs_tree.h: -------------------------------------------------------------------------------- 1 | #define SAVL_PARAM_NAME FDMacsTree 2 | #define SAVL_PARAM_FEATURE_COUNTS 0 3 | #define SAVL_PARAM_FEATURE_NOKEYS 0 4 | #define SAVL_PARAM_TYPE_ENTRY struct _FrameDecider_mac_entry 5 | #define SAVL_PARAM_TYPE_KEY FDMacsTree_key 6 | #define SAVL_PARAM_TYPE_ARG int 7 | #define SAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) compare_macs((entry1)->mac, (entry2)->mac) 8 | #define SAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, entry2) compare_macs((key1), (entry2)->mac) 9 | #define SAVL_PARAM_MEMBER_NODE tree_node 10 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/client/FrameDecider_multicast_tree.h: -------------------------------------------------------------------------------- 1 | #define SAVL_PARAM_NAME FDMulticastTree 2 | #define SAVL_PARAM_FEATURE_COUNTS 0 3 | #define SAVL_PARAM_FEATURE_NOKEYS 0 4 | #define SAVL_PARAM_TYPE_ENTRY struct _FrameDecider_group_entry 5 | #define SAVL_PARAM_TYPE_KEY uint32_t 6 | #define SAVL_PARAM_TYPE_ARG int 7 | #define SAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) B_COMPARE((entry1)->master.sig, (entry2)->master.sig) 8 | #define SAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, entry2) B_COMPARE((key1), (entry2)->master.sig) 9 | #define SAVL_PARAM_MEMBER_NODE master.tree_node 10 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/dhcpclient/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(dhcpclientcore 2 | BDHCPClientCore.c 3 | ) 4 | target_link_libraries(dhcpclientcore system flow flowextra badvpn_random) 5 | 6 | if (CMAKE_SYSTEM_NAME STREQUAL "Linux") 7 | add_library(dhcpclient 8 | BDHCPClient.c 9 | DHCPIpUdpEncoder.c 10 | DHCPIpUdpDecoder.c 11 | ) 12 | target_link_libraries(dhcpclient system flow dhcpclientcore) 13 | endif () 14 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/dostest/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(dostest-server 2 | dostest-server.c 3 | StreamBuffer.c 4 | ) 5 | target_link_libraries(dostest-server base system) 6 | 7 | add_executable(dostest-attacker 8 | dostest-attacker.c 9 | ) 10 | target_link_libraries(dostest-attacker base system) 11 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/examples/cavl_test_tree.h: -------------------------------------------------------------------------------- 1 | #define CAVL_PARAM_NAME MyTree 2 | #define CAVL_PARAM_FEATURE_COUNTS USE_COUNTS 3 | #define CAVL_PARAM_FEATURE_KEYS_ARE_INDICES 0 4 | #define CAVL_PARAM_FEATURE_ASSOC USE_ASSOC 5 | #define CAVL_PARAM_TYPE_ENTRY struct entry 6 | #define CAVL_PARAM_TYPE_LINK entry_index 7 | #define CAVL_PARAM_TYPE_KEY entry_key 8 | #define CAVL_PARAM_TYPE_ARG entry_ptr 9 | #define CAVL_PARAM_TYPE_COUNT size_t 10 | #define CAVL_PARAM_TYPE_ASSOC assoc_sum 11 | #define CAVL_PARAM_VALUE_COUNT_MAX SIZE_MAX 12 | #define CAVL_PARAM_VALUE_NULL ((entry_index)-1) 13 | #define CAVL_PARAM_VALUE_ASSOC_ZERO 0 14 | #define CAVL_PARAM_FUN_DEREF(arg, link) (&(arg)[(link)]) 15 | #define CAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) B_COMPARE((entry1).ptr->key, (entry2).ptr->key) 16 | #define CAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, entry2) B_COMPARE((key1), (entry2).ptr->key) 17 | #define CAVL_PARAM_FUN_ASSOC_VALUE(arg, entry) ((entry).ptr->assoc_value) 18 | #define CAVL_PARAM_FUN_ASSOC_OPER(arg, value1, value2) ((value1) + (value2)) 19 | #define CAVL_PARAM_MEMBER_CHILD tree_child 20 | #define CAVL_PARAM_MEMBER_BALANCE tree_balance 21 | #define CAVL_PARAM_MEMBER_PARENT tree_parent 22 | #define CAVL_PARAM_MEMBER_COUNT tree_count 23 | #define CAVL_PARAM_MEMBER_ASSOC assoc_sum 24 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/examples/savl_test_tree.h: -------------------------------------------------------------------------------- 1 | #define SAVL_PARAM_NAME MyTree 2 | #define SAVL_PARAM_FEATURE_COUNTS 1 3 | #define SAVL_PARAM_FEATURE_NOKEYS 1 4 | #define SAVL_PARAM_TYPE_ENTRY struct mynode 5 | #define SAVL_PARAM_TYPE_ARG int 6 | #define SAVL_PARAM_TYPE_COUNT int 7 | #define SAVL_PARAM_VALUE_COUNT_MAX INT_MAX 8 | #define SAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) B_COMPARE((entry1)->num, (entry2)->num) 9 | #define SAVL_PARAM_MEMBER_NODE tree_node 10 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/fix_flex.php: -------------------------------------------------------------------------------- 1 | ", "#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L"); 7 | $replace = array("", "#if 1"); 8 | $contents = str_replace($search, $replace, $contents); 9 | $res = file_put_contents($filename, $contents); 10 | if ($res === FALSE) exit(1); 11 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/flooder/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(badvpn-flooder flooder.c) 2 | target_link_libraries(badvpn-flooder system flow server_conection ${NSPR_LIBRARIES} ${NSS_LIBRARIES}) 3 | 4 | install( 5 | TARGETS badvpn-flooder 6 | RUNTIME DESTINATION bin 7 | ) 8 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/flow/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(FLOW_SOURCES 2 | PacketPassFairQueue.c 3 | PacketPassPriorityQueue.c 4 | PacketPassConnector.c 5 | PacketRecvConnector.c 6 | StreamRecvConnector.c 7 | PacketRecvBlocker.c 8 | PacketPassNotifier.c 9 | PacketBuffer.c 10 | SinglePacketBuffer.c 11 | PacketCopier.c 12 | PacketStreamSender.c 13 | PacketProtoEncoder.c 14 | PacketProtoDecoder.c 15 | PacketProtoFlow.c 16 | SinglePacketSender.c 17 | BufferWriter.c 18 | PacketPassInterface.c 19 | PacketRecvInterface.c 20 | StreamPassInterface.c 21 | StreamRecvInterface.c 22 | RouteBuffer.c 23 | PacketRouter.c 24 | LineBuffer.c 25 | SingleStreamSender.c 26 | SingleStreamReceiver.c 27 | StreamPacketSender.c 28 | StreamPassConnector.c 29 | PacketPassFifoQueue.c 30 | ) 31 | badvpn_add_library(flow "base" "" "${FLOW_SOURCES}") 32 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/flow/PacketPassFairQueue_tree.h: -------------------------------------------------------------------------------- 1 | #define SAVL_PARAM_NAME PacketPassFairQueue__Tree 2 | #define SAVL_PARAM_FEATURE_COUNTS 0 3 | #define SAVL_PARAM_FEATURE_NOKEYS 1 4 | #define SAVL_PARAM_TYPE_ENTRY struct PacketPassFairQueueFlow_s 5 | #define SAVL_PARAM_TYPE_ARG int 6 | #define SAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) compare_flows((entry1), (entry2)) 7 | #define SAVL_PARAM_MEMBER_NODE queued.tree_node 8 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/flow/PacketPassPriorityQueue_tree.h: -------------------------------------------------------------------------------- 1 | #define SAVL_PARAM_NAME PacketPassPriorityQueue__Tree 2 | #define SAVL_PARAM_FEATURE_COUNTS 0 3 | #define SAVL_PARAM_FEATURE_NOKEYS 1 4 | #define SAVL_PARAM_TYPE_ENTRY struct PacketPassPriorityQueueFlow_s 5 | #define SAVL_PARAM_TYPE_ARG int 6 | #define SAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) compare_flows((entry1), (entry2)) 7 | #define SAVL_PARAM_MEMBER_NODE queued.tree_node 8 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/flowextra/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(flowextra 2 | PacketPassInactivityMonitor.c 3 | KeepaliveIO.c 4 | ) 5 | target_link_libraries(flowextra flow system) 6 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/NCDConfigParser_parse.h: -------------------------------------------------------------------------------- 1 | #define INCLUDE 1 2 | #define STRING 2 3 | #define INCLUDE_GUARD 3 4 | #define NAME 4 5 | #define CURLY_OPEN 5 6 | #define CURLY_CLOSE 6 7 | #define ROUND_OPEN 7 8 | #define ROUND_CLOSE 8 9 | #define SEMICOLON 9 10 | #define ARROW 10 11 | #define IF 11 12 | #define FOREACH 12 13 | #define AS 13 14 | #define COLON 14 15 | #define ELIF 15 16 | #define ELSE 16 17 | #define DOT 17 18 | #define COMMA 18 19 | #define BRACKET_OPEN 19 20 | #define BRACKET_CLOSE 20 21 | #define PROCESS 21 22 | #define TEMPLATE 22 23 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/NCDValParser_parse.h: -------------------------------------------------------------------------------- 1 | #define COMMA 1 2 | #define CURLY_OPEN 2 3 | #define CURLY_CLOSE 3 4 | #define COLON 4 5 | #define BRACKET_OPEN 5 6 | #define BRACKET_CLOSE 6 7 | #define STRING 7 8 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BArpProbe.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BArpProbe 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BConnection.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BConnection 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BDHCPClient.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BDHCPClient 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BDHCPClientCore.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BDHCPClientCore 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BDatagram.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BDatagram 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BEncryption.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BEncryption 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BInputProcess.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BInputProcess 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BLockReactor.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BLockReactor 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BNetwork.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BNetwork 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BPredicate.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BPredicate 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BProcess.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BProcess 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BReactor.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BReactor 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BSSLConnection.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BSSLConnection 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BSignal.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BSignal 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BSocksClient.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BSocksClient 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BTap.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BTap 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BThreadSignal.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BThreadSignal 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BThreadWork.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BThreadWork 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BTime.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BTime 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_BUnixSignal.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BUnixSignal 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_DPReceive.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_DPReceive 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_DPRelay.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_DPRelay 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_DataProto.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_DataProto 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_DatagramPeerIO.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_DatagramPeerIO 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_FragmentProtoAssembler.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_FragmentProtoAssembler 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_FrameDecider.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_FrameDecider 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_LineBuffer.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_LineBuffer 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_Listener.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_Listener 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDBuildProgram.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDBuildProgram 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDConfigParser.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDConfigParser 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDConfigTokenizer.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDConfigTokenizer 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDIfConfig.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDIfConfig 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDInterfaceMonitor.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDInterfaceMonitor 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDModuleIndex.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDModuleIndex 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDModuleProcess.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDModuleProcess 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDPlaceholderDb.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDPlaceholderDb 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDRequest.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDRequest 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDRequestClient.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDRequestClient 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDRfkillMonitor.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDRfkillMonitor 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDUdevCache.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDUdevCache 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDUdevManager.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDUdevManager 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDUdevMonitor.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDUdevMonitor 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDUdevMonitorParser.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDUdevMonitorParser 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDVal.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDVal 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDValGenerator.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDValGenerator 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_NCDValParser.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDValParser 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_PRStreamSink.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_PRStreamSink 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_PRStreamSource.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_PRStreamSource 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_PacketProtoDecoder.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_PacketProtoDecoder 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_PasswordListener.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_PasswordListener 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_PeerChat.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_PeerChat 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_SPProtoDecoder.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_SPProtoDecoder 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ServerConnection.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ServerConnection 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_SocksUdpGwClient.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_SocksUdpGwClient 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_StreamPeerIO.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_StreamPeerIO 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_UdpGwClient.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_UdpGwClient 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_addr.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_addr 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_client.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_client 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_dostest_attacker.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_dostest_attacker 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_dostest_server.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_dostest_server 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_flooder.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_flooder 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_lwip.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_lwip 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_alias.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_alias 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_arithmetic.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_arithmetic 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_assert.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_assert 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_backtrack.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_backtrack 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_blocker.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_blocker 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_buffer.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_buffer 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_call2.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_call2 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_choose.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_choose 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_concat.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_concat 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_daemon.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_daemon 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_depend.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_depend 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_depend_scope.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_depend_scope 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_dynamic_depend.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_dynamic_depend 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_exit.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_exit 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_explode.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_explode 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_file.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_file 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_file_open.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_file_open 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_foreach.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_foreach 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_from_string.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_from_string 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_getargs.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_getargs 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_getenv.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_getenv 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_if.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_if 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_imperative.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_imperative 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_implode.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_implode 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_index.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_index 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_list.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_list 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_load_module.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_load_module 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_log.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_log 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_log_msg.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_log_msg 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_logical.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_logical 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_multidepend.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_multidepend 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_backend_badvpn.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_backend_badvpn 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_backend_rfkill.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_backend_rfkill 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_backend_waitdevice.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_backend_waitdevice 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_backend_waitlink.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_backend_waitlink 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_backend_wpa_supplicant.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_backend_wpa_supplicant 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_dns.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_dns 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_iptables.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_iptables 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_ipv4_addr.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv4_addr 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_ipv4_addr_in_network.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv4_addr_in_network 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_ipv4_arp_probe.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv4_arp_probe 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_ipv4_dhcp.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv4_dhcp 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_ipv4_route.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv4_route 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_ipv6_addr.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv6_addr 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_ipv6_addr_in_network.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv6_addr_in_network 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_ipv6_route.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv6_route 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_ipv6_wait_dynamic_addr.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv6_wait_dynamic_addr 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_up.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_up 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_net_watch_interfaces.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_watch_interfaces 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_netmask.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_netmask 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_ondemand.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_ondemand 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_parse.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_parse 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_print.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_print 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_process_manager.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_process_manager 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_reboot.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_reboot 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_ref.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_ref 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_regex_match.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_regex_match 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_request.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_request 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_run.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_run 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_runonce.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_runonce 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_sleep.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sleep 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_socket.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_socket 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_spawn.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_spawn 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_strcmp.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_strcmp 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_substr.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_substr 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_sys_evdev.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sys_evdev 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_sys_request_client.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sys_request_client 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_sys_request_server.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sys_request_server 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_sys_start_process.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sys_start_process 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_sys_watch_directory.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sys_watch_directory 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_sys_watch_input.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sys_watch_input 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_sys_watch_usb.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sys_watch_usb 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_timer.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_timer 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_to_string.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_to_string 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_try.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_try 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_value.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_value 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_valuemetic.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_valuemetic 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_ncd_var.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_var 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_nsskey.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_nsskey 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_server.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_server 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_tun2socks.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_tun2socks 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/generated/blog_channel_udpgw.h: -------------------------------------------------------------------------------- 1 | #ifdef BLOG_CURRENT_CHANNEL 2 | #undef BLOG_CURRENT_CHANNEL 3 | #endif 4 | #define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_udpgw 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lime/flex_token_stream.php: -------------------------------------------------------------------------------- 1 | executable(); 17 | $tokens = explode("\0", `$scanner < "\$PHP_LIME_SCAN_STDIN"`); 18 | array_pop($tokens); 19 | $this->tokens = $tokens; 20 | $this->lineno = 1; 21 | } 22 | function next() { 23 | if (list($key, $token) = each($this->tokens)) { 24 | list($this->lineno, $type, $text) = explode("\1", $token); 25 | return array($type, $text); 26 | } 27 | } 28 | function feed($parser) { 29 | while (list($type, $text) = $this->next()) { 30 | $parser->eat($type, $text); 31 | } 32 | return $parser->eat_eof(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lime/lime.bootstrap: -------------------------------------------------------------------------------- 1 | There is nothing to see here. Go and look at the file called "metagrammar". 2 | 3 | : $$ = new lime(); 4 | grammar pragma toklist stop : $$->pragma($2, $3); 5 | grammar rewrite stop : $2->update($$); 6 | to grammar 7 | : {$$=array();} 8 | toklist sym : $$[] = $2; 9 | toklist lit : $$[] = $2; 10 | to toklist 11 | sym '=' rhs : $$ = new lime_rewrite($1); $$->add_rhs($3); 12 | rewrite '|' rhs : $$->add_rhs($3); 13 | to rewrite 14 | list : $$ = new lime_rhs($1, ''); 15 | list action : $$ = new lime_rhs($1, $2); 16 | to rhs 17 | action : $$ = new lime_action($1, NULL); 18 | action lambda : $$ = new lime_action($1, $2); 19 | sym : $$ = new lime_glyph($1, NULL); 20 | sym lambda : $$ = new lime_glyph($1, $2); 21 | lit : $$ = new lime_glyph($1, NULL); 22 | to slot 23 | : $$ = new lime_rhs(); 24 | rhs slot : $$->add($2); 25 | to rhs 26 | '{' code '}' : $$ = $2; 27 | to action 28 | : 29 | code php : $$.=$2; 30 | code '{' code '}' : $$.='{'.$3.'}'; 31 | to code 32 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lime/set.so.php: -------------------------------------------------------------------------------- 1 | data = array_count_values($list); } 11 | function has($item) { return isset($this->data[$item]); } 12 | function add($item) { $this->data[$item] = true; } 13 | function del($item) { unset($this->data[$item]); return $item;} 14 | function all() { return array_keys($this->data); } 15 | function one() { return key($this->data); } 16 | function count() { return count($this->data); } 17 | function pop() { return $this->del($this->one()); } 18 | function union($that) { 19 | $progress = false; 20 | foreach ($that->all() as $item) if (!$this->has($item)) { 21 | $this->add($item); 22 | $progress = true; 23 | } 24 | return $progress; 25 | } 26 | function text() { 27 | return ' { '.implode(' ', $this->all()).' } '; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/CHANGELOG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/jni/badvpn/lwip/CHANGELOG -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(lwip 2 | src/core/timers.c 3 | src/core/udp.c 4 | src/core/memp.c 5 | src/core/init.c 6 | src/core/pbuf.c 7 | src/core/tcp.c 8 | src/core/tcp_out.c 9 | src/core/sys.c 10 | src/core/netif.c 11 | src/core/def.c 12 | src/core/mem.c 13 | src/core/tcp_in.c 14 | src/core/stats.c 15 | src/core/inet_chksum.c 16 | src/core/ipv4/icmp.c 17 | src/core/ipv4/ip4.c 18 | src/core/ipv4/ip4_addr.c 19 | src/core/ipv4/ip_frag.c 20 | src/core/ipv6/ip6.c 21 | src/core/ipv6/nd6.c 22 | src/core/ipv6/icmp6.c 23 | src/core/ipv6/ip6_addr.c 24 | src/core/ipv6/ip6_frag.c 25 | custom/sys.c 26 | ) 27 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/FILES: -------------------------------------------------------------------------------- 1 | src/ - The source code for the lwIP TCP/IP stack. 2 | doc/ - The documentation for lwIP. 3 | 4 | See also the FILES file in each subdirectory. 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/doc/FILES: -------------------------------------------------------------------------------- 1 | savannah.txt - How to obtain the current development source code. 2 | contrib.txt - How to contribute to lwIP as a developer. 3 | rawapi.txt - The documentation for the core API of lwIP. 4 | Also provides an overview about the other APIs and multithreading. 5 | snmp_agent.txt - The documentation for the lwIP SNMP agent. 6 | sys_arch.txt - The documentation for a system abstraction layer of lwIP. 7 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/lwip-base-version: -------------------------------------------------------------------------------- 1 | 666e84eef281d0059377d0f5029c1c550488f829 2 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/src/FILES: -------------------------------------------------------------------------------- 1 | api/ - The code for the high-level wrapper API. Not needed if 2 | you use the lowel-level call-back/raw API. 3 | 4 | core/ - The core of the TPC/IP stack; protocol implementations, 5 | memory and buffer management, and the low-level raw API. 6 | 7 | include/ - lwIP include files. 8 | 9 | netif/ - Generic network interface device drivers are kept here, 10 | as well as the ARP module. 11 | 12 | For more information on the various subdirectories, check the FILES 13 | file in each directory. 14 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/src/core/ipv6/README: -------------------------------------------------------------------------------- 1 | IPv6 support in lwIP is very experimental. 2 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/test/unit/core/test_mem.h: -------------------------------------------------------------------------------- 1 | #ifndef __TEST_MEM_H__ 2 | #define __TEST_MEM_H__ 3 | 4 | #include "../lwip_check.h" 5 | 6 | Suite *mem_suite(void); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/test/unit/core/test_pbuf.h: -------------------------------------------------------------------------------- 1 | #ifndef __TEST_PBUF_H__ 2 | #define __TEST_PBUF_H__ 3 | 4 | #include "../lwip_check.h" 5 | 6 | Suite *pbuf_suite(void); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/test/unit/dhcp/test_dhcp.h: -------------------------------------------------------------------------------- 1 | #ifndef __TEST_DHCP_H__ 2 | #define __TEST_DHCP_H__ 3 | 4 | #include "../lwip_check.h" 5 | 6 | Suite* dhcp_suite(void); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/test/unit/etharp/test_etharp.h: -------------------------------------------------------------------------------- 1 | #ifndef __TEST_ETHARP_H__ 2 | #define __TEST_ETHARP_H__ 3 | 4 | #include "../lwip_check.h" 5 | 6 | Suite* etharp_suite(void); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/test/unit/lwip_check.h: -------------------------------------------------------------------------------- 1 | #ifndef __LWIP_CHECK_H__ 2 | #define __LWIP_CHECK_H__ 3 | 4 | /* Common header file for lwIP unit tests using the check framework */ 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | #define FAIL_RET() do { fail(); return; } while(0) 11 | #define EXPECT(x) fail_unless(x) 12 | #define EXPECT_RET(x) do { fail_unless(x); if(!(x)) { return; }} while(0) 13 | #define EXPECT_RETX(x, y) do { fail_unless(x); if(!(x)) { return y; }} while(0) 14 | #define EXPECT_RETNULL(x) EXPECT_RETX(x, NULL) 15 | 16 | /** typedef for a function returning a test suite */ 17 | typedef Suite* (suite_getter_fn)(void); 18 | 19 | /** Create a test suite */ 20 | static Suite* create_suite(const char* name, TFun *tests, size_t num_tests, SFun setup, SFun teardown) 21 | { 22 | size_t i; 23 | Suite *s = suite_create(name); 24 | 25 | for(i = 0; i < num_tests; i++) { 26 | /* Core test case */ 27 | TCase *tc_core = tcase_create("Core"); 28 | if ((setup != NULL) || (teardown != NULL)) { 29 | tcase_add_checked_fixture(tc_core, setup, teardown); 30 | } 31 | tcase_add_test(tc_core, tests[i]); 32 | suite_add_tcase(s, tc_core); 33 | } 34 | return s; 35 | } 36 | 37 | #endif /* __LWIP_CHECK_H__ */ 38 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/test/unit/lwip_unittests.c: -------------------------------------------------------------------------------- 1 | #include "lwip_check.h" 2 | 3 | #include "udp/test_udp.h" 4 | #include "tcp/test_tcp.h" 5 | #include "tcp/test_tcp_oos.h" 6 | #include "core/test_mem.h" 7 | #include "core/test_pbuf.h" 8 | #include "etharp/test_etharp.h" 9 | #include "dhcp/test_dhcp.h" 10 | 11 | #include "lwip/init.h" 12 | 13 | 14 | int main() 15 | { 16 | int number_failed; 17 | SRunner *sr; 18 | size_t i; 19 | suite_getter_fn* suites[] = { 20 | udp_suite, 21 | tcp_suite, 22 | tcp_oos_suite, 23 | mem_suite, 24 | pbuf_suite, 25 | etharp_suite, 26 | dhcp_suite 27 | }; 28 | size_t num = sizeof(suites)/sizeof(void*); 29 | LWIP_ASSERT("No suites defined", num > 0); 30 | 31 | lwip_init(); 32 | 33 | sr = srunner_create((suites[0])()); 34 | for(i = 1; i < num; i++) { 35 | srunner_add_suite(sr, ((suite_getter_fn*)suites[i])()); 36 | } 37 | 38 | #ifdef LWIP_UNITTESTS_NOFORK 39 | srunner_set_fork_status(sr, CK_NOFORK); 40 | #endif 41 | #ifdef LWIP_UNITTESTS_FORK 42 | srunner_set_fork_status(sr, CK_FORK); 43 | #endif 44 | 45 | srunner_run_all(sr, CK_NORMAL); 46 | number_failed = srunner_ntests_failed(sr); 47 | srunner_free(sr); 48 | return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/test/unit/tcp/test_tcp.h: -------------------------------------------------------------------------------- 1 | #ifndef __TEST_TCP_H__ 2 | #define __TEST_TCP_H__ 3 | 4 | #include "../lwip_check.h" 5 | 6 | Suite *tcp_suite(void); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/test/unit/tcp/test_tcp_oos.h: -------------------------------------------------------------------------------- 1 | #ifndef __TEST_TCP_OOS_H__ 2 | #define __TEST_TCP_OOS_H__ 3 | 4 | #include "../lwip_check.h" 5 | 6 | Suite *tcp_oos_suite(void); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/lwip/test/unit/udp/test_udp.h: -------------------------------------------------------------------------------- 1 | #ifndef __TEST_UDP_H__ 2 | #define __TEST_UDP_H__ 3 | 4 | #include "../lwip_check.h" 5 | 6 | Suite* udp_suite(void); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd-request/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(badvpn-ncd-request 2 | ncd-request.c 3 | ) 4 | target_link_libraries(badvpn-ncd-request ncdrequest ncdvalgenerator ncdvalparser) 5 | 6 | install( 7 | TARGETS badvpn-ncd-request 8 | RUNTIME DESTINATION bin 9 | ) 10 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/NCDInterpProg_hash.h: -------------------------------------------------------------------------------- 1 | #define CHASH_PARAM_NAME NCDInterpProg__Hash 2 | #define CHASH_PARAM_ENTRY NCDInterpProg__hashentry 3 | #define CHASH_PARAM_LINK int 4 | #define CHASH_PARAM_KEY NCD_string_id_t 5 | #define CHASH_PARAM_ARG NCDInterpProg__hasharg 6 | #define CHASH_PARAM_NULL ((int)-1) 7 | #define CHASH_PARAM_DEREF(arg, link) (&(arg)[(link)]) 8 | #define CHASH_PARAM_ENTRYHASH(arg, entry) ((size_t)(entry).ptr->name) 9 | #define CHASH_PARAM_KEYHASH(arg, key) ((size_t)(key)) 10 | #define CHASH_PARAM_COMPARE_ENTRIES(arg, entry1, entry2) ((entry1).ptr->name == (entry2).ptr->name) 11 | #define CHASH_PARAM_COMPARE_KEY_ENTRY(arg, key1, entry2) ((key1) == (entry2).ptr->name) 12 | #define CHASH_PARAM_ENTRY_NEXT hash_next 13 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/NCDMethodIndex_hash.h: -------------------------------------------------------------------------------- 1 | #define CHASH_PARAM_NAME NCDMethodIndex__Hash 2 | #define CHASH_PARAM_ENTRY NCDMethodIndex__hashentry 3 | #define CHASH_PARAM_LINK int 4 | #define CHASH_PARAM_KEY NCDMethodIndex__hashkey 5 | #define CHASH_PARAM_ARG NCDMethodIndex__hasharg 6 | #define CHASH_PARAM_NULL ((int)-1) 7 | #define CHASH_PARAM_DEREF(arg, link) (&(arg)[(link)]) 8 | #define CHASH_PARAM_ENTRYHASH(arg, entry) (badvpn_djb2_hash((const uint8_t *)(entry).ptr->method_name)) 9 | #define CHASH_PARAM_KEYHASH(arg, key) (badvpn_djb2_hash((const uint8_t *)(key))) 10 | #define CHASH_PARAM_COMPARE_ENTRIES(arg, entry1, entry2) (!strcmp((entry1).ptr->method_name, (entry2).ptr->method_name)) 11 | #define CHASH_PARAM_COMPARE_KEY_ENTRY(arg, key1, entry2) (!strcmp((key1), (entry2).ptr->method_name)) 12 | #define CHASH_PARAM_ENTRY_NEXT hash_next 13 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/NCDModuleIndex_mhash.h: -------------------------------------------------------------------------------- 1 | #define CHASH_PARAM_NAME NCDModuleIndex__MHash 2 | #define CHASH_PARAM_ENTRY struct NCDModuleIndex_module 3 | #define CHASH_PARAM_LINK NCDModuleIndex__mhash_link 4 | #define CHASH_PARAM_KEY NCDModuleIndex__mhash_key 5 | #define CHASH_PARAM_ARG int 6 | #define CHASH_PARAM_NULL ((NCDModuleIndex__mhash_link)NULL) 7 | #define CHASH_PARAM_DEREF(arg, link) (link) 8 | #define CHASH_PARAM_ENTRYHASH(arg, entry) (badvpn_djb2_hash((const uint8_t *)(entry).ptr->imodule.module.type)) 9 | #define CHASH_PARAM_KEYHASH(arg, key) (badvpn_djb2_hash((const uint8_t *)(key))) 10 | #define CHASH_PARAM_COMPARE_ENTRIES(arg, entry1, entry2) (!strcmp((entry1).ptr->imodule.module.type, (entry2).ptr->imodule.module.type)) 11 | #define CHASH_PARAM_COMPARE_KEY_ENTRY(arg, key1, entry2) (!strcmp((key1), (entry2).ptr->imodule.module.type)) 12 | #define CHASH_PARAM_ENTRY_NEXT hash_next 13 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/NCDStringIndex_hash.h: -------------------------------------------------------------------------------- 1 | #define CHASH_PARAM_NAME NCDStringIndex__Hash 2 | #define CHASH_PARAM_ENTRY struct NCDStringIndex__entry 3 | #define CHASH_PARAM_LINK NCD_string_id_t 4 | #define CHASH_PARAM_KEY NCDStringIndex_hash_key 5 | #define CHASH_PARAM_ARG NCDStringIndex_hash_arg 6 | #define CHASH_PARAM_NULL ((NCD_string_id_t)-1) 7 | #define CHASH_PARAM_DEREF(arg, link) (&(arg)[(link)]) 8 | #define CHASH_PARAM_ENTRYHASH(arg, entry) badvpn_djb2_hash_bin((const uint8_t *)(entry).ptr->str, (entry).ptr->str_len) 9 | #define CHASH_PARAM_KEYHASH(arg, key) badvpn_djb2_hash_bin((const uint8_t *)(key).str, (key).len) 10 | #define CHASH_PARAM_ENTRYHASH_IS_CHEAP 0 11 | #define CHASH_PARAM_COMPARE_ENTRIES(arg, entry1, entry2) ((entry1).ptr->str_len == (entry2).ptr->str_len && !memcmp((entry1).ptr->str, (entry2).ptr->str, (entry1).ptr->str_len)) 12 | #define CHASH_PARAM_COMPARE_KEY_ENTRY(arg, key1, entry2) ((key1).len == (entry2).ptr->str_len && !memcmp((key1).str, (entry2).ptr->str, (key1).len)) 13 | #define CHASH_PARAM_ENTRY_NEXT hash_next 14 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/NCDVal_maptree.h: -------------------------------------------------------------------------------- 1 | #define CAVL_PARAM_NAME NCDVal__MapTree 2 | #define CAVL_PARAM_FEATURE_COUNTS 0 3 | #define CAVL_PARAM_FEATURE_KEYS_ARE_INDICES 0 4 | #define CAVL_PARAM_FEATURE_NOKEYS 0 5 | #define CAVL_PARAM_TYPE_ENTRY NCDVal__maptree_entry 6 | #define CAVL_PARAM_TYPE_LINK NCDVal__idx 7 | #define CAVL_PARAM_TYPE_KEY NCDValRef 8 | #define CAVL_PARAM_TYPE_ARG NCDVal__maptree_arg 9 | #define CAVL_PARAM_VALUE_NULL ((NCDVal__idx)-1) 10 | #define CAVL_PARAM_FUN_DEREF(arg, link) ((struct NCDVal__mapelem *)NCDValMem__BufAt((arg), (link))) 11 | #define CAVL_PARAM_FUN_COMPARE_ENTRIES(arg, node1, node2) NCDVal_Compare(NCDVal__Ref((arg), (node1).ptr->key_idx), NCDVal__Ref((arg), (node2).ptr->key_idx)) 12 | #define CAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, node2) NCDVal_Compare((key1), NCDVal__Ref((arg), (node2).ptr->key_idx)) 13 | #define CAVL_PARAM_MEMBER_CHILD tree_child 14 | #define CAVL_PARAM_MEMBER_BALANCE tree_balance 15 | #define CAVL_PARAM_MEMBER_PARENT tree_parent 16 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/examples/dhcpd.conf.template: -------------------------------------------------------------------------------- 1 | default-lease-time 600; 2 | max-lease-time 7200; 3 | log-facility local7; 4 | ddns-update-style none; 5 | local-address ; 6 | 7 | subnet netmask { 8 | range ; 9 | option routers ; 10 | option domain-name-servers ; 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/examples/igmpproxy.conf.template: -------------------------------------------------------------------------------- 1 | quickleave 2 | 3 | phyint upstream ratelimit 0 threshold 1 4 | altnet 89.143.8.0/24 5 | altnet 95.176.0.0/16 6 | 7 | phyint downstream ratelimit 0 threshold 1 8 | 9 | # A lot of these will be appended by make_igmpproxy_config: 10 | # phyint eth0 disabled 11 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/examples/make_dhcp_config.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | call("make_dhcp_config", {"192.168.1.1", "24", "192.168.1.100", "192.168.1.199", {"192.168.1.1"}, {"192.168.1.1", "4.4.4.4"}, "dhcpd.conf.template", "dhcpd.conf"}) config; 3 | exit("0"); 4 | } 5 | 6 | template make_dhcp_config { 7 | alias("_arg0") addr; 8 | alias("_arg1") prefix; 9 | alias("_arg2") range_start; 10 | alias("_arg3") range_end; 11 | alias("_arg4") routers; 12 | alias("_arg5") dns_servers; 13 | alias("_arg6") template_file; 14 | alias("_arg7") output_file; 15 | 16 | ipv4_net_from_addr_and_prefix(addr, prefix) network; 17 | ipv4_prefix_to_mask(prefix) netmask; 18 | implode(", ", routers) routers_str; 19 | implode(", ", dns_servers) dns_servers_str; 20 | 21 | var({"", "", "", "", "", "", ""}) regex; 22 | var({addr, network, netmask, range_start, range_end, routers_str, dns_servers_str}) replace; 23 | 24 | file_read(template_file) template_data; 25 | regex_replace(template_data, regex, replace) replaced_data; 26 | file_write(output_file, replaced_data); 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/examples/onoff_server_test.ncd: -------------------------------------------------------------------------------- 1 | include "onoff_server.ncdi" 2 | 3 | process main { 4 | call("onoff_server_main", {"/home/ambro/onoff.socket"}) onoff_server; 5 | 6 | process_manager() mgr; 7 | mgr->start("service1", {}); 8 | #mgr->start("service2", {}); 9 | } 10 | 11 | template service1 { 12 | alias("_caller") main; 13 | 14 | call("onoff_server_onoff", {"_caller.main.onoff_server", "ServiceId1", "true"}); 15 | 16 | println("service1 up"); 17 | rprintln("service1 down"); 18 | 19 | # Do your stuff. 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/examples/tcp_echo_client.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | getargs() args; 3 | value(args) args; 4 | 5 | num_different(args.length, "2") bad_args; 6 | If (bad_args) { 7 | println("bad arguments"); 8 | exit("1"); 9 | }; 10 | 11 | args->get("0") addr_ip; 12 | args->get("1") addr_port; 13 | 14 | sys.connect({"tcp", {"ipv4", addr_ip, addr_port}}) socket; 15 | If (socket.is_error) { 16 | println("connection error!"); 17 | exit("1"); 18 | }; 19 | 20 | println("connected"); 21 | 22 | socket->write("This echo client is implemented in NCD!\n\n"); 23 | 24 | backtrack_point() recv_point; 25 | 26 | socket->read() data; 27 | If (data.not_eof) { 28 | socket->write(data); 29 | recv_point->go(); 30 | }; 31 | 32 | println("server disconnected"); 33 | 34 | exit("0"); 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/examples/tcp_echo_server.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | getargs() args; 3 | value(args) args; 4 | 5 | num_different(args.length, "2") bad_args; 6 | If (bad_args) { 7 | println("bad arguments"); 8 | exit("1"); 9 | }; 10 | 11 | args->get("0") addr_ip; 12 | args->get("1") addr_port; 13 | 14 | sys.listen({"tcp", {"ipv4", addr_ip, addr_port}}, "client_handler", {}) listener; 15 | If (listener.is_error) { 16 | println("failed to listen"); 17 | exit("1"); 18 | }; 19 | 20 | println("listening"); 21 | } 22 | 23 | template client_handler { 24 | to_string(_socket.client_addr) addr_str; 25 | 26 | println("client ", addr_str, ": connected"); 27 | rprintln("client ", addr_str, ": disconnected"); 28 | 29 | _socket->write("This echo server is implemented in NCD!\n\n"); 30 | 31 | backtrack_point() recv_point; 32 | 33 | _socket->read() data; 34 | If (data.not_eof) { 35 | _socket->write(data); 36 | recv_point->go(); 37 | }; 38 | 39 | _socket->close(); 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/include_linux_input.c: -------------------------------------------------------------------------------- 1 | #include 2 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/modules/buffer_chunks_tree.h: -------------------------------------------------------------------------------- 1 | #define SAVL_PARAM_NAME ChunksTree 2 | #define SAVL_PARAM_FEATURE_COUNTS 0 3 | #define SAVL_PARAM_FEATURE_NOKEYS 0 4 | #define SAVL_PARAM_TYPE_ENTRY struct chunk 5 | #define SAVL_PARAM_TYPE_KEY size_t 6 | #define SAVL_PARAM_TYPE_ARG int 7 | #define SAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) B_COMPARE((entry1)->offset, (entry2)->offset) 8 | #define SAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, entry2) B_COMPARE((key1), (entry2)->offset) 9 | #define SAVL_PARAM_MEMBER_NODE chunks_tree_node 10 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/modules/value_maptree.h: -------------------------------------------------------------------------------- 1 | #define SAVL_PARAM_NAME MapTree 2 | #define SAVL_PARAM_FEATURE_COUNTS 1 3 | #define SAVL_PARAM_FEATURE_NOKEYS 0 4 | #define SAVL_PARAM_TYPE_ENTRY struct value 5 | #define SAVL_PARAM_TYPE_KEY NCDValRef 6 | #define SAVL_PARAM_TYPE_ARG int 7 | #define SAVL_PARAM_TYPE_COUNT size_t 8 | #define SAVL_PARAM_VALUE_COUNT_MAX SIZE_MAX 9 | #define SAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) NCDVal_Compare((entry1)->map_parent.key, (entry2)->map_parent.key) 10 | #define SAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, entry2) NCDVal_Compare((key1), (entry2)->map_parent.key) 11 | #define SAVL_PARAM_MEMBER_NODE map_parent.maptree_node 12 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/alias.ncd: -------------------------------------------------------------------------------- 1 | process foo { 2 | var("hello") x; 3 | alias("x") y; 4 | val_equal(y, "hello") a; 5 | assert(a); 6 | 7 | var("hello") x; 8 | alias("x") y; 9 | y->set("world"); 10 | val_equal(y, "world") a; 11 | assert(a); 12 | 13 | var("hello") x; 14 | alias("x") y; 15 | alias("y") z; 16 | z->set("world"); 17 | val_equal(x, "world") a; 18 | assert(a); 19 | 20 | call("test", {"hello"}) c; 21 | alias("c.x") x; 22 | val_equal(x, "hello") a; 23 | assert(a); 24 | 25 | call("test", {"hello"}) c; 26 | alias("c") x; 27 | alias("x") y; 28 | alias("y.x") z; 29 | c.x->set("world"); 30 | val_equal(z, "world") a; 31 | assert(a); 32 | 33 | var("hello") x; 34 | call("test2", {"_caller.x"}) c; 35 | c.x->set("world"); 36 | val_equal(x, "world") a; 37 | assert(a); 38 | 39 | exit("0"); 40 | } 41 | 42 | template test { 43 | var(_arg0) x; 44 | } 45 | 46 | template test2 { 47 | alias(_arg0) x; 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/backtracking.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | value({}) list; 3 | var("0") i; 4 | backtrack_point() point; 5 | num_lesser(i, "100") do_more; 6 | If (do_more) { 7 | list->insert(i); 8 | num_add(i, "1") new_i; 9 | i->set(new_i); 10 | point->go(); 11 | }; 12 | val_equal(list.length, "100") a; 13 | assert(a); 14 | 15 | value({}) list; 16 | var("0") i; 17 | blocker() blk; 18 | blk->up(); 19 | blk->use(); 20 | num_lesser(i, "100") do_more; 21 | If (do_more) { 22 | list->insert(i); 23 | num_add(i, "1") new_i; 24 | i->set(new_i); 25 | blk->downup(); 26 | }; 27 | val_equal(list.length, "100") a; 28 | assert(a); 29 | 30 | exit("0"); 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/buffer.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | buffer() buf; 3 | val_equal(buf, "") a; 4 | assert(a); 5 | 6 | buf->append("12"); 7 | val_equal(buf, "12") a; 8 | assert(a); 9 | 10 | buf->append("345"); 11 | val_equal(buf, "12345") a; 12 | assert(a); 13 | 14 | buf->consume("1"); 15 | val_equal(buf, "2345") a; 16 | assert(a); 17 | 18 | buf->consume("1"); 19 | val_equal(buf, "345") a; 20 | assert(a); 21 | 22 | buf->consume("3"); 23 | val_equal(buf, "") a; 24 | assert(a); 25 | 26 | buf->append("6"); 27 | val_equal(buf, "6") a; 28 | assert(a); 29 | 30 | buf->append("7890"); 31 | val_equal(buf, "67890") a; 32 | assert(a); 33 | 34 | buf->append(""); 35 | val_equal(buf, "67890") a; 36 | assert(a); 37 | 38 | buf->consume("4"); 39 | val_equal(buf, "0") a; 40 | assert(a); 41 | 42 | buf->append("1234567890"); 43 | val_equal(buf, "01234567890") a; 44 | assert(a); 45 | 46 | val_equal(buf.length, "11") a; 47 | assert(a); 48 | 49 | buffer("hello") buf2; 50 | val_equal(buf2, "hello") a; 51 | assert(a); 52 | 53 | exit("0"); 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/call.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | var("bad_x") x; 3 | var("good_x") y; 4 | call("helper_func", {}) helper; 5 | call_with_caller_target("func1", {}, "helper") c; 6 | val_equal(c.x, "good_x") a; 7 | assert(a); 8 | 9 | exit("0"); 10 | } 11 | 12 | template helper_func { 13 | var(_caller.y) x; 14 | } 15 | 16 | template func1 { 17 | var(_caller.x) x; 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/concat.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | concat("Hello", "", "World") x; 3 | strcmp(x, "HelloWorld") a; 4 | assert(a); 5 | 6 | concat("\x00\x00", "\x00") x; 7 | strcmp(x, "\x00\x00\x00") a; 8 | assert(a); 9 | 10 | concatv({"Hello", "", "World"}) x; 11 | strcmp(x, "HelloWorld") a; 12 | assert(a); 13 | 14 | concatv({"\x00\x00", "\x00"}) x; 15 | strcmp(x, "\x00\x00\x00") a; 16 | assert(a); 17 | 18 | exit("0"); 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/depend.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | var("hello") x; 3 | provide("A"); 4 | depend("A") d; 5 | val_equal(d.x, "hello") a; 6 | assert(a); 7 | d.x->set("world"); 8 | val_equal(d.x, "world") a; 9 | assert(a); 10 | 11 | var("hello") x; 12 | provide("B"); 13 | val_equal(x, "world") a; 14 | assert(a); 15 | 16 | var("hello") x; 17 | provide("C"); 18 | val_equal(x, "hello") a; 19 | assert(a); 20 | depend("C_done"); 21 | val_equal(x, "world") a; 22 | assert(a); 23 | 24 | var("hello") x; 25 | blocker() blk; 26 | provide("D"); 27 | val_equal(x, "hello") a; 28 | assert(a); 29 | blk->up(); 30 | val_equal(x, "0") a; 31 | assert(a); 32 | blk->down(); 33 | blk->up(); 34 | val_equal(x, "1") a; 35 | assert(a); 36 | 37 | exit("0"); 38 | } 39 | 40 | process proc1 { 41 | depend("B") dep; 42 | dep.x->set("world"); 43 | } 44 | 45 | process proc2 { 46 | depend("C") dep; 47 | sleep("0", "0"); 48 | dep.x->set("world"); 49 | provide("C_done"); 50 | } 51 | 52 | process proc3 { 53 | depend("D") dep; 54 | dep.blk->use(); 55 | provide("E"); 56 | } 57 | 58 | process proc4 { 59 | var("0") i; 60 | depend("E") dep; 61 | dep.dep.x->set(i); 62 | num_add(i, "1") j; 63 | i->set(j); 64 | } 65 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/depend_scope.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | depend_scope() scope; 3 | var("0") x; 4 | process_manager() mgr; 5 | 6 | var("false") backtrack_check; 7 | backtrack_point() point; 8 | If (backtrack_check) { 9 | val_equal(x, "2") a; # must not have rebound temporarily to A during backtracking 10 | assert(a); 11 | exit("0"); 12 | }; 13 | 14 | scope->provide("A"); 15 | mgr->start("t1", "t1", {}); 16 | val_equal(x, "1") a; # must have bound to A immediately 17 | assert(a); 18 | 19 | scope->provide("B") mgr; 20 | val_equal(x, "2") a; # must have rebound to B immediately 21 | assert(a); 22 | 23 | backtrack_check->set("true"); 24 | point->go(); 25 | } 26 | 27 | template t1 { 28 | _caller.scope->depend({"B", "A"}) dep; 29 | num_add(dep.x, "1") new_x; 30 | dep.x->set(new_x); 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/escape_and_nulls.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | value("ab\0") str1; 3 | value("ab") str2; 4 | 5 | strcmp(str1.length, "3") a; 6 | assert(a); 7 | 8 | strcmp(str2.length, "2") a; 9 | assert(a); 10 | 11 | strcmp(str1, str2) a; 12 | not(a) a; 13 | assert(a); 14 | 15 | concat(str1, str2) strc; 16 | strcmp(strc, "ab\0ab") a; 17 | assert(a); 18 | 19 | concat(str2, str1) strc; 20 | strcmp(strc, "abab\0") a; 21 | assert(a); 22 | 23 | value("") str1; 24 | value("\x00\x00") str2; 25 | value("\x00\x01") str3; 26 | value("\x01") str4; 27 | 28 | val_lesser(str1, str2) a; 29 | assert(a); 30 | 31 | val_lesser(str2, str3) a; 32 | assert(a); 33 | 34 | val_lesser(str3, str4) a; 35 | assert(a); 36 | 37 | exit("0"); 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/explode.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | explode("FOO", "aaaFOObbbFOOcccFOOddd") l; 3 | val_equal(l, {"aaa", "bbb", "ccc", "ddd"}) a; 4 | assert(a); 5 | 6 | explode("FOO", "FOObbbFOOFOO") l; 7 | val_equal(l, {"", "bbb", "", ""}) a; 8 | assert(a); 9 | 10 | explode("FOO", "foo") l; 11 | val_equal(l, {"foo"}) a; 12 | assert(a); 13 | 14 | explode("FOO", "FOO") l; 15 | val_equal(l, {"", ""}) a; 16 | assert(a); 17 | 18 | explode("participate in parachute", "parachute in participation of participate in parachuteparparticipate in parachute participate in parachut") l; 19 | val_equal(l, {"parachute in participation of ", "par", " participate in parachut"}) a; 20 | assert(a); 21 | 22 | exit("0"); 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/foreach.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | var({"a", "b", "c", "d"}) list; 3 | value(["a":"1", "b":"2", "c":"3", "d":"4"]) map; 4 | 5 | value({}) new; 6 | Foreach (list As value) { 7 | new->insert(new.length, value); 8 | }; 9 | val_equal(new, list) a; 10 | assert(a); 11 | 12 | value({}) new; 13 | Foreach (list As index:value) { 14 | new->insert(index, value); 15 | }; 16 | val_equal(new, list) a; 17 | assert(a); 18 | 19 | value([]) new; 20 | Foreach (map As key) { 21 | map->get(key) value; 22 | new->insert(key, value); 23 | }; 24 | val_equal(new, map) a; 25 | assert(a); 26 | 27 | value([]) new; 28 | Foreach (map As key:value) { 29 | new->insert(key, value); 30 | }; 31 | val_equal(new, map) a; 32 | assert(a); 33 | 34 | exit("0"); 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/if.ncd: -------------------------------------------------------------------------------- 1 | process foo { 2 | If ("true") { 3 | If ("truee") { 4 | var("A1") y; 5 | } else { 6 | If ("true") { 7 | var("A11") q; 8 | } else { 9 | var("A22") q; 10 | } t; 11 | var(t.q) y; 12 | } s; 13 | var(s.y) x; 14 | } elif ("true") { 15 | var("B") x; 16 | } else { 17 | var("C") x; 18 | } ifs; 19 | 20 | val_equal(ifs.x, "A11") a; 21 | assert(a); 22 | 23 | var("a") v; 24 | If ("false") { 25 | v->set("b"); 26 | }; 27 | val_equal(v, "a") a; 28 | assert(a); 29 | 30 | var("a") v; 31 | If ("true") { 32 | v->set("b"); 33 | }; 34 | val_equal(v, "b") a; 35 | assert(a); 36 | 37 | exit("0"); 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/implode.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | implode("X", {"a", "bb", "", "c"}) str; 3 | strcmp(str, "aXbbXXc") a; 4 | assert(a); 5 | 6 | implode("", {"a", "b"}) str; 7 | strcmp(str, "ab") a; 8 | assert(a); 9 | 10 | implode("X", {}) str; 11 | strcmp(str, "") a; 12 | assert(a); 13 | 14 | exit("0"); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/include.ncd: -------------------------------------------------------------------------------- 1 | include "include_included.ncdi" 2 | include "include_included.ncdi" 3 | include "include_included2.ncdi" 4 | include "include_included2.ncdi" 5 | 6 | process main { 7 | call("incl_tmpl", {}) c; 8 | val_equal(c.x, "good") a; 9 | assert(a); 10 | 11 | call("incl_tmpl2", {}) c; 12 | val_equal(c.x, "good2") a; 13 | assert(a); 14 | 15 | exit("0"); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/include_included.ncdi: -------------------------------------------------------------------------------- 1 | include_guard "include_included" 2 | 3 | template incl_tmpl { 4 | var("good") x; 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/include_included2.ncdi: -------------------------------------------------------------------------------- 1 | include_guard "include_included2" 2 | 3 | template incl_tmpl2 { 4 | var("good2") x; 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/logical.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | var("true") t; 3 | var("Faalse") f; 4 | 5 | and(t, f) r; 6 | strcmp(r, "false") a; 7 | assert(a); 8 | 9 | and(f, t) r; 10 | strcmp(r, "false") a; 11 | assert(a); 12 | 13 | and(f, f) r; 14 | strcmp(r, "false") a; 15 | assert(a); 16 | 17 | and(t, t) r; 18 | strcmp(r, "true") a; 19 | assert(a); 20 | 21 | or(t, f) r; 22 | strcmp(r, "true") a; 23 | assert(a); 24 | 25 | or(f, t) r; 26 | strcmp(r, "true") a; 27 | assert(a); 28 | 29 | or(t, t) r; 30 | strcmp(r, "true") a; 31 | assert(a); 32 | 33 | or(f, f) r; 34 | strcmp(r, "false") a; 35 | assert(a); 36 | 37 | not(f) r; 38 | strcmp(r, "true") a; 39 | assert(a); 40 | 41 | not(t) r; 42 | strcmp(r, "false") a; 43 | assert(a); 44 | 45 | exit("0"); 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/multidepend.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | var("0") x; 3 | process_manager() mgr; 4 | 5 | var("false") backtrack_check; 6 | backtrack_point() point; 7 | If (backtrack_check) { 8 | val_equal(x, "2") a; # must not have rebound temporarily to A during backtracking 9 | assert(a); 10 | exit("0"); 11 | }; 12 | 13 | multiprovide("A"); 14 | mgr->start("t1", "t1", {}); 15 | val_equal(x, "1") a; # must have bound to A immediately 16 | assert(a); 17 | 18 | multiprovide("B") mgr; 19 | val_equal(x, "2") a; # must have rebound to B immediately 20 | assert(a); 21 | 22 | backtrack_check->set("true"); 23 | point->go(); 24 | } 25 | 26 | template t1 { 27 | multidepend({"B", "A"}) dep; 28 | num_add(dep.x, "1") new_x; 29 | dep.x->set(new_x); 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/netmask.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | ipv4_prefix_to_mask("16") mask; 3 | strcmp(mask, "255.255.0.0") a; 4 | assert(a); 5 | 6 | ipv4_mask_to_prefix("128.0.0.0") prefix; 7 | strcmp(prefix, "1") a; 8 | assert(a); 9 | 10 | ipv4_net_from_addr_and_prefix("192.168.1.4", "24") net; 11 | strcmp(net, "192.168.1.0") a; 12 | assert(a); 13 | 14 | exit("0"); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/run_tests: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | NCD=$1 4 | USE_VALGRIND=$2 5 | 6 | if [[ -z $NCD ]] || [[ -n $USE_VALGRIND && $USE_VALGRIND != use_valgrind ]]; then 7 | echo "Usage: $0 [use_valgrind]" 8 | exit 1 9 | fi 10 | 11 | if [[ ! -e ./run_tests ]]; then 12 | echo "Must run from the tests directory" 13 | exit 1 14 | fi 15 | 16 | failed=0 17 | 18 | for file in ./*.ncd; do 19 | echo "Running: $file" 20 | if [[ $USE_VALGRIND = use_valgrind ]]; then 21 | valgrind --error-exitcode=1 --leak-check=full "$NCD" --loglevel none --config-file "$file" 22 | else 23 | "$NCD" --loglevel none --config-file "$file" 24 | fi 25 | res=$? 26 | if [[ ! $res -eq 0 ]]; then 27 | echo "FAILED" 28 | let failed+=1 29 | fi 30 | done 31 | 32 | if [[ $failed -gt 0 ]]; then 33 | echo "$failed tests FAILED" 34 | exit 1 35 | fi 36 | 37 | echo "all tests passed" 38 | exit 0 39 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/strings.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | buffer() buf; 3 | buf->append("12"); 4 | buf->append("345"); 5 | buf->append("6"); 6 | num_equal(buf, "123456") a; 7 | assert(a); 8 | 9 | var("false") check; 10 | call("test_func", {}); 11 | assert(check); 12 | 13 | buffer() buf; 14 | buf->append("test_func"); 15 | var("false") check; 16 | call(buf, {}); 17 | assert(check); 18 | 19 | concat("test_func") cnc; 20 | var("false") check; 21 | call(cnc, {}); 22 | assert(check); 23 | 24 | buffer() buf; 25 | buf->append("test_func"); 26 | var("false") check; 27 | process_manager() mgr; 28 | mgr->start(buf, {}); 29 | assert(check); 30 | 31 | buffer() buf; 32 | buf->append("/bin/echo"); 33 | runonce({buf, buf}); 34 | 35 | buffer() buf; 36 | buf->append("12"); 37 | buf->append("345"); 38 | to_string(buf) str; 39 | val_equal(str, "\"12345\"") a; 40 | assert(a); 41 | 42 | exit("0"); 43 | } 44 | 45 | template test_func { 46 | _caller.check->set("true"); 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/substr.ncd: -------------------------------------------------------------------------------- 1 | process main { 2 | var("0123456789") str; 3 | concat(str) external_str; 4 | 5 | call("do_test", {"_caller.str"}); 6 | call("do_test", {"_caller.external_str"}); 7 | 8 | exit("0"); 9 | } 10 | 11 | template do_test { 12 | alias(_arg0) str; 13 | 14 | substr(str, "0") sub; 15 | val_equal(sub, "0123456789") a; 16 | assert(a); 17 | 18 | substr(str, "2") sub; 19 | val_equal(sub, "23456789") a; 20 | assert(a); 21 | 22 | substr(str, "3", "0") sub; 23 | val_equal(sub, "") a; 24 | assert(a); 25 | 26 | substr(str, "3", "6") sub; 27 | val_equal(sub, "345678") a; 28 | assert(a); 29 | 30 | substr(str, "3", "7") sub; 31 | val_equal(sub, "3456789") a; 32 | assert(a); 33 | 34 | substr(str, "3", "8") sub; 35 | val_equal(sub, "3456789") a; 36 | assert(a); 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/ncd/tests/value_substr.ncd: -------------------------------------------------------------------------------- 1 | process foo { 2 | value("0123456789") str; 3 | 4 | str->substr("0") sub; 5 | strcmp(sub, str) a; 6 | assert(a); 7 | 8 | str->substr("1") sub; 9 | strcmp(sub, "123456789") a; 10 | assert(a); 11 | 12 | str->substr("1", "0") sub; 13 | strcmp(sub, "") a; 14 | assert(a); 15 | 16 | str->substr("1", "9") sub; 17 | strcmp(sub, "123456789") a; 18 | assert(a); 19 | 20 | str->substr("1", "8") sub; 21 | strcmp(sub, "12345678") a; 22 | assert(a); 23 | 24 | exit("0"); 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/nspr_support/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(nspr_support 2 | DummyPRFileDesc.c 3 | BSSLConnection.c 4 | ) 5 | target_link_libraries(nspr_support system flow threadwork ${NSPR_LIBRARIES} ${NSS_LIBRARIES}) 6 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/predicate/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(predicate 2 | BPredicate.c 3 | ${PROJECT_SOURCE_DIR}/generated/flex_BPredicate.c 4 | ${PROJECT_SOURCE_DIR}/generated/bison_BPredicate.c 5 | ) 6 | target_link_libraries(predicate system) 7 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/protocol/addr.bproto: -------------------------------------------------------------------------------- 1 | // message for an AddrProto address 2 | message addr { 3 | // address type. from addr.h 4 | required uint8 type = 1; 5 | // for IPv4 and IPv6 addresses, the port (network byte order) 6 | optional data("2") ip_port = 2; 7 | // for IPv4 addresses, the IP address 8 | optional data("4") ipv4_addr = 3; 9 | // for IPv6 addresses, the IP address 10 | optional data("16") ipv6_addr = 4; 11 | }; 12 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/random/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(badvpn_random 2 | BRandom2.c 3 | ) 4 | target_link_libraries(badvpn_random base) 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/scripts/cmake: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | export ROOT="" 4 | export MINGW="/home//mingw/cross_win32" 5 | 6 | export PATH="$MINGW/bin:$PATH" 7 | 8 | exec /usr/bin/cmake -DCMAKE_TOOLCHAIN_FILE="$ROOT/toolchain.cmake" "$@" 9 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/scripts/copy_nss: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | NSSDIST="$1" 4 | DEST="$2" 5 | 6 | if [ -z "${NSSDIST}" ] || [ -z "${DEST}" ]; then 7 | echo "Copies a Windows build of NSS such that it can be found by the BadVPN build system" 8 | echo "Usage: $0 " 9 | exit 1 10 | fi 11 | 12 | NSSOBJ="${NSSDIST}/WINNT5.1_OPT.OBJ" 13 | 14 | set -e 15 | 16 | mkdir -p "${DEST}"/include 17 | cp -r "${NSSOBJ}/include"/* "${DEST}"/include/ 18 | cp -r "${NSSDIST}/public/nss"/* "${DEST}"/include/ 19 | mkdir -p "${DEST}"/lib 20 | cp "${NSSOBJ}/lib"/{libnspr4,libplc4,libplds4,ssl3,smime3,nss3}.lib "${DEST}"/lib/ 21 | mkdir -p "${DEST}"/bin 22 | cp "${NSSOBJ}/lib"/*.dll "${DEST}"/bin/ 23 | cp "${NSSOBJ}/bin"/*.exe "${DEST}"/bin/ 24 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/scripts/toolchain.cmake: -------------------------------------------------------------------------------- 1 | SET(CMAKE_SYSTEM_NAME Windows) 2 | SET(CMAKE_C_COMPILER i686-w64-mingw32-gcc) 3 | SET(CMAKE_FIND_ROOT_PATH $ENV{ROOT}) 4 | SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH) 5 | SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 6 | SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 7 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/security/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(security 2 | BSecurity.c 3 | BEncryption.c 4 | BHash.c 5 | BRandom.c 6 | OTPCalculator.c 7 | OTPChecker.c 8 | OTPGenerator.c 9 | ) 10 | target_link_libraries(security system threadwork ${LIBCRYPTO_LIBRARIES}) 11 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/server/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(badvpn-server server.c) 2 | target_link_libraries(badvpn-server system flow flowextra nspr_support predicate security ${NSPR_LIBRARIES} ${NSS_LIBRARIES}) 3 | 4 | install( 5 | TARGETS badvpn-server 6 | RUNTIME DESTINATION bin 7 | ) 8 | 9 | install( 10 | FILES badvpn-server.8 11 | DESTINATION share/man/man8 12 | ) 13 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/server_connection/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(server_conection 2 | ServerConnection.c 3 | SCKeepaliveSource.c 4 | ) 5 | target_link_libraries(server_conection system flow flowextra nspr_support ${NSPR_LIBRARIES} ${NSS_LIBRARIES}) 6 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/socksclient/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(socksclient 2 | BSocksClient.c 3 | ) 4 | target_link_libraries(socksclient system flow flowextra) 5 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/stringmap/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(stringmap 2 | BStringMap.c 3 | ) 4 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/structure/IndexedList_tree.h: -------------------------------------------------------------------------------- 1 | #define CAVL_PARAM_NAME IndexedList__Tree 2 | #define CAVL_PARAM_FEATURE_COUNTS 1 3 | #define CAVL_PARAM_FEATURE_KEYS_ARE_INDICES 1 4 | #define CAVL_PARAM_FEATURE_NOKEYS 0 5 | #define CAVL_PARAM_TYPE_ENTRY IndexedListNode 6 | #define CAVL_PARAM_TYPE_LINK IndexedList__tree_link 7 | #define CAVL_PARAM_TYPE_ARG int 8 | #define CAVL_PARAM_TYPE_COUNT uint64_t 9 | #define CAVL_PARAM_VALUE_COUNT_MAX UINT64_MAX 10 | #define CAVL_PARAM_VALUE_NULL ((IndexedList__tree_link)NULL) 11 | #define CAVL_PARAM_FUN_DEREF(arg, link) (link) 12 | #define CAVL_PARAM_MEMBER_CHILD tree_child 13 | #define CAVL_PARAM_MEMBER_BALANCE tree_balance 14 | #define CAVL_PARAM_MEMBER_PARENT tree_parent 15 | #define CAVL_PARAM_MEMBER_COUNT tree_count 16 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/structure/SAvl_tree.h: -------------------------------------------------------------------------------- 1 | #define CAVL_PARAM_NAME SAvl__Tree 2 | #define CAVL_PARAM_FEATURE_COUNTS SAVL_PARAM_FEATURE_COUNTS 3 | #define CAVL_PARAM_FEATURE_KEYS_ARE_INDICES 0 4 | #define CAVL_PARAM_FEATURE_NOKEYS SAVL_PARAM_FEATURE_NOKEYS 5 | #define CAVL_PARAM_TYPE_ENTRY SAvlEntry 6 | #define CAVL_PARAM_TYPE_LINK SAvl__TreeLink 7 | #define CAVL_PARAM_TYPE_KEY SAvlKey 8 | #define CAVL_PARAM_TYPE_ARG SAvlArg 9 | #define CAVL_PARAM_TYPE_COUNT SAvlCount 10 | #define CAVL_PARAM_VALUE_COUNT_MAX SAVL_PARAM_VALUE_COUNT_MAX 11 | #define CAVL_PARAM_VALUE_NULL ((SAvl__TreeLink)NULL) 12 | #define CAVL_PARAM_FUN_DEREF(arg, link) (link) 13 | #define CAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) SAVL_PARAM_FUN_COMPARE_ENTRIES((arg), (entry1).link, (entry2).link) 14 | #define CAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, entry2) SAVL_PARAM_FUN_COMPARE_KEY_ENTRY((arg), (key1), (entry2).link) 15 | #define CAVL_PARAM_MEMBER_CHILD SAVL_PARAM_MEMBER_NODE . child 16 | #define CAVL_PARAM_MEMBER_BALANCE SAVL_PARAM_MEMBER_NODE . balance 17 | #define CAVL_PARAM_MEMBER_PARENT SAVL_PARAM_MEMBER_NODE . parent 18 | #define CAVL_PARAM_MEMBER_COUNT SAVL_PARAM_MEMBER_NODE . count 19 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/system/BReactor.h: -------------------------------------------------------------------------------- 1 | #if defined(BADVPN_BREACTOR_BADVPN) + defined(BADVPN_BREACTOR_GLIB) + defined(BADVPN_BREACTOR_EMSCRIPTEN) != 1 2 | #error No reactor backend or too many reactor backens 3 | #endif 4 | 5 | #if defined(BADVPN_BREACTOR_BADVPN) 6 | #include "BReactor_badvpn.h" 7 | #elif defined(BADVPN_BREACTOR_GLIB) 8 | #include "BReactor_glib.h" 9 | #elif defined(BADVPN_BREACTOR_EMSCRIPTEN) 10 | #include "BReactor_emscripten.h" 11 | #endif 12 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/system/BReactor_badvpn_timerstree.h: -------------------------------------------------------------------------------- 1 | #define CAVL_PARAM_NAME BReactor__TimersTree 2 | #define CAVL_PARAM_FEATURE_COUNTS 0 3 | #define CAVL_PARAM_FEATURE_KEYS_ARE_INDICES 0 4 | #define CAVL_PARAM_FEATURE_NOKEYS 1 5 | #define CAVL_PARAM_TYPE_ENTRY struct BSmallTimer_t 6 | #define CAVL_PARAM_TYPE_LINK BReactor_timerstree_link 7 | #define CAVL_PARAM_TYPE_ARG int 8 | #define CAVL_PARAM_VALUE_NULL ((BReactor_timerstree_link)NULL) 9 | #define CAVL_PARAM_FUN_DEREF(arg, link) (link) 10 | #define CAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) compare_timers((entry1).link, (entry2).link) 11 | #define CAVL_PARAM_MEMBER_CHILD u.tree_child 12 | #define CAVL_PARAM_MEMBER_BALANCE tree_balance 13 | #define CAVL_PARAM_MEMBER_PARENT tree_parent 14 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(chunkbuffer2_test chunkbuffer2_test.c) 2 | 3 | add_executable(bproto_test bproto_test.c) 4 | 5 | if (BUILDING_THREADWORK) 6 | add_executable(threadwork_test threadwork_test.c) 7 | target_link_libraries(threadwork_test threadwork) 8 | endif () 9 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/tests/bproto_test.bproto: -------------------------------------------------------------------------------- 1 | message msg1 { 2 | required uint16 a = 5; 3 | optional uint32 b = 6; 4 | required repeated uint64 c = 7; 5 | repeated uint16 d = 8; 6 | required uint8 e = 9; 7 | required data f = 10; 8 | required data("4") g = 11; 9 | }; 10 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/threadwork/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(BADVPN_THREADWORK_EXTRA_LIBS) 2 | if (BADVPN_THREADWORK_USE_PTHREAD) 3 | list(APPEND BADVPN_THREADWORK_EXTRA_LIBS pthread) 4 | endif () 5 | 6 | add_library(threadwork BThreadWork.c) 7 | target_link_libraries(threadwork system ${BADVPN_THREADWORK_EXTRA_LIBS}) 8 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/tun2socks/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(badvpn-tun2socks 2 | tun2socks.c 3 | SocksUdpGwClient.c 4 | ) 5 | target_link_libraries(badvpn-tun2socks system flow tuntap lwip socksclient udpgw_client) 6 | 7 | install( 8 | TARGETS badvpn-tun2socks 9 | RUNTIME DESTINATION bin 10 | ) 11 | 12 | install( 13 | FILES badvpn-tun2socks.8 14 | DESTINATION share/man/man8 15 | ) 16 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/tunctl/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(badvpn-tunctl tunctl.c) 2 | 3 | install( 4 | TARGETS badvpn-tunctl 5 | RUNTIME DESTINATION bin 6 | ) 7 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/tuntap/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(TUNTAP_ADDITIONAL_SOURCES) 2 | if (WIN32) 3 | list(APPEND TUNTAP_ADDITIONAL_SOURCES tapwin32-funcs.c) 4 | endif () 5 | 6 | set(TUNTAP_SOURCES 7 | BTap.c 8 | ${TUNTAP_ADDITIONAL_SOURCES} 9 | ) 10 | badvpn_add_library(tuntap "system;flow" "" "${TUNTAP_SOURCES}") 11 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/udevmonitor/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(udevmonitor 2 | NCDUdevMonitorParser.c 3 | NCDUdevMonitor.c 4 | NCDUdevCache.c 5 | NCDUdevManager.c 6 | ) 7 | target_link_libraries(udevmonitor system flow stringmap) 8 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/udpgw/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(badvpn-udpgw 2 | udpgw.c 3 | ) 4 | target_link_libraries(badvpn-udpgw system flow flowextra) 5 | 6 | install( 7 | TARGETS badvpn-udpgw 8 | RUNTIME DESTINATION bin 9 | ) 10 | -------------------------------------------------------------------------------- /app/src/main/jni/badvpn/udpgw_client/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(udpgw_client UdpGwClient.c) 2 | target_link_libraries(udpgw_client system flow flowextra) 3 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/baseline_device_hub_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/baseline_device_hub_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/baseline_gpp_maybe_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/baseline_gpp_maybe_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/baseline_info_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/baseline_info_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/baseline_notifications_active_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/baseline_notifications_active_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/baseline_place_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/baseline_place_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/baseline_privacy_tip_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/baseline_privacy_tip_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/baseline_send_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/baseline_send_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/baseline_settings_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/baseline_settings_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/baseline_sync_disabled_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/baseline_sync_disabled_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/baseline_system_update_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/baseline_system_update_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/baseline_translate_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/baseline_translate_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/baseline_vibration_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/baseline_vibration_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/baseline_vpn_key_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/baseline_vpn_key_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/bump_onboarding_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/bump_onboarding_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/bump_onboarding_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/bump_onboarding_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/bump_onboarding_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/bump_onboarding_3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/bump_onboarding_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/bump_onboarding_4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_btn_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/ic_btn_stop.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_psiphon_alert_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/ic_psiphon_alert_notification.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/notification_icon_connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/notification_icon_connected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/notification_icon_connecting_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/notification_icon_connecting_01.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/notification_icon_connecting_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/notification_icon_connecting_02.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/notification_icon_connecting_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/notification_icon_connecting_03.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/notification_icon_connecting_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/notification_icon_connecting_04.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/notification_icon_connecting_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/notification_icon_connecting_05.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/notification_icon_connecting_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/notification_icon_connecting_06.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/notification_icon_upgrade_available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/notification_icon_upgrade_available.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/notification_icon_waiting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/notification_icon_waiting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/status_icon_connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/status_icon_connected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/status_icon_connecting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/status_icon_connecting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/status_icon_disconnected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-hdpi/status_icon_disconnected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/baseline_device_hub_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/baseline_device_hub_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/baseline_gpp_maybe_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/baseline_gpp_maybe_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/baseline_info_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/baseline_info_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/baseline_notifications_active_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/baseline_notifications_active_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/baseline_place_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/baseline_place_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/baseline_privacy_tip_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/baseline_privacy_tip_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/baseline_send_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/baseline_send_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/baseline_settings_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/baseline_settings_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/baseline_sync_disabled_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/baseline_sync_disabled_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/baseline_system_update_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/baseline_system_update_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/baseline_translate_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/baseline_translate_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/baseline_vibration_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/baseline_vibration_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/baseline_vpn_key_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/baseline_vpn_key_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/bump_onboarding_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/bump_onboarding_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/bump_onboarding_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/bump_onboarding_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/bump_onboarding_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/bump_onboarding_3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/bump_onboarding_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/bump_onboarding_4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_btn_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/ic_btn_stop.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_psiphon_alert_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/ic_psiphon_alert_notification.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/notification_icon_connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/notification_icon_connected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/notification_icon_connecting_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/notification_icon_connecting_01.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/notification_icon_connecting_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/notification_icon_connecting_02.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/notification_icon_connecting_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/notification_icon_connecting_03.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/notification_icon_connecting_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/notification_icon_connecting_04.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/notification_icon_connecting_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/notification_icon_connecting_05.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/notification_icon_connecting_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/notification_icon_connecting_06.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/notification_icon_upgrade_available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/notification_icon_upgrade_available.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/notification_icon_waiting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/notification_icon_waiting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/status_icon_connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/status_icon_connected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/status_icon_connecting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/status_icon_connecting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/status_icon_disconnected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-mdpi/status_icon_disconnected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 7 | 9 | 14 | 15 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_device_hub_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/baseline_device_hub_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_gpp_maybe_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/baseline_gpp_maybe_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_info_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/baseline_info_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_notifications_active_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/baseline_notifications_active_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_place_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/baseline_place_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_privacy_tip_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/baseline_privacy_tip_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_send_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/baseline_send_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_settings_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/baseline_settings_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_sync_disabled_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/baseline_sync_disabled_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_system_update_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/baseline_system_update_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_translate_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/baseline_translate_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_vibration_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/baseline_vibration_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/baseline_vpn_key_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/baseline_vpn_key_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/bump_onboarding_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/bump_onboarding_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/bump_onboarding_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/bump_onboarding_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/bump_onboarding_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/bump_onboarding_3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/bump_onboarding_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/bump_onboarding_4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_psiphon_alert_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/ic_psiphon_alert_notification.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/notification_icon_connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/notification_icon_connected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/notification_icon_connecting_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/notification_icon_connecting_01.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/notification_icon_connecting_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/notification_icon_connecting_02.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/notification_icon_connecting_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/notification_icon_connecting_03.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/notification_icon_connecting_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/notification_icon_connecting_04.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/notification_icon_connecting_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/notification_icon_connecting_05.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/notification_icon_connecting_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/notification_icon_connecting_06.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/notification_icon_upgrade_available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/notification_icon_upgrade_available.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/notification_icon_waiting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/notification_icon_waiting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/status_icon_connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/status_icon_connected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/status_icon_connecting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/status_icon_connecting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/status_icon_disconnected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xhdpi/status_icon_disconnected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/baseline_device_hub_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/baseline_device_hub_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/baseline_gpp_maybe_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/baseline_gpp_maybe_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/baseline_info_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/baseline_info_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/baseline_notifications_active_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/baseline_notifications_active_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/baseline_place_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/baseline_place_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/baseline_privacy_tip_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/baseline_privacy_tip_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/baseline_send_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/baseline_send_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/baseline_settings_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/baseline_settings_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/baseline_sync_disabled_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/baseline_sync_disabled_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/baseline_system_update_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/baseline_system_update_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/baseline_translate_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/baseline_translate_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/baseline_vibration_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/baseline_vibration_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/baseline_vpn_key_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/baseline_vpn_key_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/bump_onboarding_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/bump_onboarding_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/bump_onboarding_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/bump_onboarding_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/bump_onboarding_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/bump_onboarding_3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/bump_onboarding_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/bump_onboarding_4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_psiphon_alert_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/ic_psiphon_alert_notification.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/notification_icon_connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/notification_icon_connected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/notification_icon_connecting_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/notification_icon_connecting_01.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/notification_icon_connecting_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/notification_icon_connecting_02.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/notification_icon_connecting_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/notification_icon_connecting_03.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/notification_icon_connecting_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/notification_icon_connecting_04.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/notification_icon_connecting_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/notification_icon_connecting_05.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/notification_icon_connecting_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/notification_icon_connecting_06.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/notification_icon_upgrade_available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/notification_icon_upgrade_available.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/notification_icon_waiting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/notification_icon_waiting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/status_icon_connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/status_icon_connected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/status_icon_connecting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/status_icon_connecting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/status_icon_disconnected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxhdpi/status_icon_disconnected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/baseline_device_hub_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/baseline_device_hub_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/baseline_info_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/baseline_info_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/baseline_notifications_active_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/baseline_notifications_active_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/baseline_place_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/baseline_place_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/baseline_privacy_tip_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/baseline_privacy_tip_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/baseline_send_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/baseline_send_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/baseline_settings_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/baseline_settings_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/baseline_sync_disabled_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/baseline_sync_disabled_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/baseline_system_update_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/baseline_system_update_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/baseline_translate_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/baseline_translate_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/baseline_vibration_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/baseline_vibration_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/baseline_vpn_key_white_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/baseline_vpn_key_white_24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_psiphon_alert_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/ic_psiphon_alert_notification.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/notification_icon_connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/notification_icon_connected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/notification_icon_connecting_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/notification_icon_connecting_01.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/notification_icon_connecting_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/notification_icon_connecting_02.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/notification_icon_connecting_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/notification_icon_connecting_03.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/notification_icon_connecting_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/notification_icon_connecting_04.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/notification_icon_connecting_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/notification_icon_connecting_05.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/notification_icon_connecting_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/notification_icon_connecting_06.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/notification_icon_upgrade_available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/notification_icon_upgrade_available.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/notification_icon_waiting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/notification_icon_waiting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/status_icon_connected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/status_icon_connected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/status_icon_connecting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/status_icon_connecting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/status_icon_disconnected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable-xxxhdpi/status_icon_disconnected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/drawable/banner.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/connection_progress_bar_01.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/connection_progress_bar_02.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/connection_waiting_network_animation_drawable.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/flag_any.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/home_progressbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/notification_icon_connecting_animation.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/onboarding_selected_dot_white.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/onboarding_unselected_dot_white.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tab_selector_dot_white.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/feedback.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/layout/logs_tab_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/menu_psiphon_version.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/preference_widget_radiobutton.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 19 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/region_selector_pref_widget_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/statistics_tab_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | 15 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/unsafe_traffic_alert_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 13 | 14 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/unsafe_traffic_alert_prompt_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 13 | 14 | 21 | 22 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/vpn_data_collection_disclosure_prompt_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | 15 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/menu/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values-sw360dp-v13/values-preference.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | false 5 | 0dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values-v35/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values/untranslated_strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Psiphon 4 | Psiphon HCE service 5 | Psiphon NFC AID 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/xml/apduservice.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/xml/provider_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/xml/settings_preferences_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 12 | 16 | 20 | 25 | 26 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Jul 09 17:02:44 EDT 2024 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip 7 | -------------------------------------------------------------------------------- /i18n/.gitignore: -------------------------------------------------------------------------------- 1 | transifex_api_token 2 | -------------------------------------------------------------------------------- /i18n/pyproject.toml: -------------------------------------------------------------------------------- 1 | 2 | [project] 3 | name = "i18n" 4 | version = "0.1.0" 5 | readme = "README.md" 6 | requires-python = ">=3.13" 7 | dependencies = [ 8 | "pyyaml>=6.0.2", 9 | "requests>=2.32.3", 10 | "six>=1.17.0", 11 | "transifexlib", 12 | ] 13 | [tool.uv.sources] 14 | transifexlib = { git = "https://github.com/Psiphon-Inc/transifexlib.git" } 15 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app', ':tray' 2 | -------------------------------------------------------------------------------- /signing.properties: -------------------------------------------------------------------------------- 1 | 2 | STORE_FILE=../../Data/CodeSigning/android.test.keystore 3 | STORE_PASSWORD=password 4 | KEY_ALIAS=psiphon 5 | KEY_PASSWORD=password 6 | -------------------------------------------------------------------------------- /tray/.travis.yml: -------------------------------------------------------------------------------- 1 | language: android 2 | 3 | env: 4 | global: 5 | - ADB_INSTALL_TIMEOUT=20 # minutes (2 minutes by default) 6 | 7 | android: 8 | components: 9 | # Uncomment the lines below if you want to 10 | # use the latest revision of Android SDK Tools 11 | # - platform-tools 12 | # - tools 13 | 14 | # The BuildTools version used by your project 15 | - build-tools-23.0.1 16 | 17 | # The SDK version used to compile your project 18 | - android-23 19 | 20 | # Additional components 21 | - extra-google-google_play_services 22 | - extra-google-m2repository 23 | - extra-android-m2repository 24 | - addon-google_apis-google-23 25 | 26 | # Specify at least one system image, 27 | # if you need to run emulator(s) during your tests 28 | - sys-img-armeabi-v7a-android-21 29 | 30 | 31 | before_script: 32 | 33 | # First assemble the project before launching the emulator 34 | - ./gradlew assemble 35 | 36 | # Emulator Management: Create, Start and Wait 37 | - echo no | android create avd --force -n test -t android-21 --abi armeabi-v7a 38 | - emulator -avd test -no-skin -no-audio -no-window & 39 | - android-wait-for-emulator 40 | - adb shell input keyevent 82 & 41 | 42 | after_success: 43 | - bash <(curl -s https://codecov.io/bash) -------------------------------------------------------------------------------- /tray/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Psiphon-Inc/psiphon-android/e1b52d279e0ba69c42fdfe3d7903571dddec1d9c/tray/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /tray/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sat Feb 07 01:04:08 CET 2015 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip 7 | -------------------------------------------------------------------------------- /tray/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Applications/Android Studio.app/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /tray/src/androidTest/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 20 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /tray/src/androidTest/java/net/grandcentrix/tray/AppPreferencesTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 grandcentrix GmbH 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package net.grandcentrix.tray; 18 | 19 | import net.grandcentrix.tray.provider.TrayProviderTestCase; 20 | 21 | public class AppPreferencesTest extends TrayProviderTestCase { 22 | 23 | public void testInstantiation() throws Exception { 24 | new AppPreferences(getProviderMockContext()); 25 | } 26 | 27 | public void testLegacyInstantiation() throws Exception { 28 | new TrayAppPreferences(getProviderMockContext()); 29 | } 30 | 31 | } -------------------------------------------------------------------------------- /tray/src/androidTest/java/net/grandcentrix/tray/core/ItemNotFoundExceptionTest.java: -------------------------------------------------------------------------------- 1 | package net.grandcentrix.tray.core; 2 | 3 | import junit.framework.TestCase; 4 | 5 | /** 6 | * Created by pascalwelsch on 5/17/15. 7 | */ 8 | public class ItemNotFoundExceptionTest extends TestCase { 9 | 10 | public void testConstructor() throws Exception { 11 | final ItemNotFoundException exception0 = new ItemNotFoundException(); 12 | assertNotNull(exception0); 13 | 14 | assertNotNull(new ItemNotFoundException(exception0)); 15 | 16 | final ItemNotFoundException exception1 = new ItemNotFoundException("something"); 17 | assertNotNull(exception1); 18 | assertEquals("something", exception1.getMessage()); 19 | 20 | final ItemNotFoundException exception2 = new ItemNotFoundException("something %s", "wrong"); 21 | assertNotNull(exception2); 22 | assertEquals("something wrong", exception2.getMessage()); 23 | 24 | final ItemNotFoundException exception3 = new ItemNotFoundException("something", exception0); 25 | assertNotNull(exception3); 26 | assertEquals("something", exception3.getMessage()); 27 | } 28 | } -------------------------------------------------------------------------------- /tray/src/androidTest/java/net/grandcentrix/tray/core/TrayStorageTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 grandcentrix GmbH 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package net.grandcentrix.tray.core; 18 | 19 | import junit.framework.TestCase; 20 | 21 | import net.grandcentrix.tray.mock.MockTrayStorage; 22 | 23 | public class TrayStorageTest extends TestCase { 24 | 25 | public void testGetModule() throws Exception { 26 | final MockTrayStorage storage = new MockTrayStorage("test"); 27 | assertEquals("test", storage.getModuleName()); 28 | } 29 | } -------------------------------------------------------------------------------- /tray/src/androidTest/java/net/grandcentrix/tray/core/WrongTypeExceptionTest.java: -------------------------------------------------------------------------------- 1 | package net.grandcentrix.tray.core; 2 | 3 | import junit.framework.TestCase; 4 | 5 | /** 6 | * Created by pascalwelsch on 5/17/15. 7 | */ 8 | public class WrongTypeExceptionTest extends TestCase { 9 | 10 | public void testConstructor() throws Exception { 11 | final WrongTypeException exception0 = new WrongTypeException(); 12 | assertNotNull(exception0); 13 | 14 | assertNotNull(new WrongTypeException(exception0)); 15 | 16 | final WrongTypeException exception1 = new WrongTypeException("something"); 17 | assertNotNull(exception1); 18 | assertEquals("something", exception1.getMessage()); 19 | 20 | final WrongTypeException exception2 = new WrongTypeException("something %s", "wrong"); 21 | assertNotNull(exception2); 22 | assertEquals("something wrong", exception2.getMessage()); 23 | 24 | final WrongTypeException exception3 = new WrongTypeException("something", exception0); 25 | assertNotNull(exception3); 26 | assertEquals("something", exception3.getMessage()); 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /tray/src/androidTest/java/net/grandcentrix/tray/publicapi/README.md: -------------------------------------------------------------------------------- 1 | # Public API Tests 2 | 3 | Test package which contains tests which work on a very high level and just test the public api only using assertions with public apis -------------------------------------------------------------------------------- /tray/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tray/src/main/java/net/grandcentrix/tray/TrayAppPreferences.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 grandcentrix GmbH 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package net.grandcentrix.tray; 18 | 19 | import android.content.Context; 20 | 21 | /** 22 | * Use {@link AppPreferences} instead. This was only a naming thing. 23 | *

24 | * Will be removed with version 1.0 25 | */ 26 | @Deprecated 27 | public class TrayAppPreferences extends TrayPreferences { 28 | 29 | private static final int VERSION = 1; 30 | 31 | public TrayAppPreferences(final Context context) { 32 | super(context, context.getPackageName(), VERSION); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /tray/src/main/java/net/grandcentrix/tray/TrayModulePreferences.java: -------------------------------------------------------------------------------- 1 | package net.grandcentrix.tray; 2 | 3 | import android.content.Context; 4 | import androidx.annotation.NonNull; 5 | 6 | /** 7 | * use {@link TrayPreferences} instead. Only the name was changed. 8 | *

9 | * Will be removed with version 1.0 10 | *

11 | * Created by pascalwelsch on 6/5/15. 12 | */ 13 | @Deprecated 14 | public class TrayModulePreferences extends TrayPreferences { 15 | 16 | public TrayModulePreferences(@NonNull final Context context, 17 | @NonNull final String module, final int version) { 18 | super(context, module, version); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tray/src/main/java/net/grandcentrix/tray/core/ItemNotFoundException.java: -------------------------------------------------------------------------------- 1 | package net.grandcentrix.tray.core; 2 | 3 | /** 4 | * Thrown when accessing an item but there is no item for the given key 5 | *

6 | * Created by pascalwelsch on 5/13/15. 7 | */ 8 | public class ItemNotFoundException extends TrayException { 9 | 10 | public ItemNotFoundException() { 11 | } 12 | 13 | public ItemNotFoundException(final String detailMessage) { 14 | super(detailMessage); 15 | } 16 | 17 | public ItemNotFoundException(final String detailMessage, final Object... args) { 18 | super(detailMessage, args); 19 | } 20 | 21 | public ItemNotFoundException(final String detailMessage, final Throwable throwable) { 22 | super(detailMessage, throwable); 23 | } 24 | 25 | public ItemNotFoundException(final Throwable throwable) { 26 | super(throwable); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tray/src/main/java/net/grandcentrix/tray/core/OnTrayPreferenceChangeListener.java: -------------------------------------------------------------------------------- 1 | package net.grandcentrix.tray.core; 2 | 3 | import java.util.Collection; 4 | 5 | /** 6 | * Interface definition for a callback to be invoked when a preference is changed. 7 | *

8 | * Created by pascalwelsch on 5/17/15. 9 | */ 10 | public interface OnTrayPreferenceChangeListener { 11 | 12 | /** 13 | * Called when a tray preference is changed, added, or removed. This may be called even if a 14 | * preference is set to its existing value. 15 | *

16 | * This callback will be run the Looper you registered it i.e. the main Looper 17 | * 18 | * @param items The {@link TrayItem}s that received the change. 19 | */ 20 | void onTrayPreferenceChanged(Collection items); 21 | } 22 | -------------------------------------------------------------------------------- /tray/src/main/java/net/grandcentrix/tray/core/TrayException.java: -------------------------------------------------------------------------------- 1 | package net.grandcentrix.tray.core; 2 | 3 | /** 4 | * Generic Exception for the Tray library 5 | *

6 | * Created by pascalwelsch on 5/13/15. 7 | */ 8 | public class TrayException extends Exception { 9 | 10 | public TrayException() { 11 | } 12 | 13 | public TrayException(final String detailMessage) { 14 | super(detailMessage); 15 | } 16 | 17 | public TrayException(final String detailMessage, Object... args) { 18 | super(String.format(detailMessage, args)); 19 | } 20 | 21 | public TrayException(final String detailMessage, final Throwable throwable) { 22 | super(detailMessage, throwable); 23 | } 24 | 25 | public TrayException(final Throwable throwable) { 26 | super(throwable); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tray/src/main/java/net/grandcentrix/tray/core/TrayMigration.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 grandcentrix GmbH 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package net.grandcentrix.tray.core; 18 | 19 | import net.grandcentrix.tray.TrayPreferences; 20 | 21 | /** 22 | * A Migration for {@link TrayItem}s into a preference with {@link 23 | * TrayPreferences#migrate(Migration[])} 24 | *

25 | * Created by pascalwelsch on 3/14/15. 26 | */ 27 | public interface TrayMigration extends Migration { 28 | 29 | } 30 | -------------------------------------------------------------------------------- /tray/src/main/java/net/grandcentrix/tray/core/TrayRuntimeException.java: -------------------------------------------------------------------------------- 1 | package net.grandcentrix.tray.core; 2 | 3 | /** 4 | * Generic RuntimeException for the Tray library 5 | *

6 | * Created by pascalwelsch on 5/13/15. 7 | */ 8 | public class TrayRuntimeException extends RuntimeException { 9 | 10 | public TrayRuntimeException() { 11 | } 12 | 13 | public TrayRuntimeException(final String detailMessage) { 14 | super(detailMessage); 15 | } 16 | 17 | public TrayRuntimeException(final String detailMessage, Object... args) { 18 | super(String.format(detailMessage, args)); 19 | } 20 | 21 | public TrayRuntimeException(final String detailMessage, final Throwable throwable) { 22 | super(detailMessage, throwable); 23 | } 24 | 25 | public TrayRuntimeException(final Throwable throwable) { 26 | super(throwable); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tray/src/main/java/net/grandcentrix/tray/core/WrongTypeException.java: -------------------------------------------------------------------------------- 1 | package net.grandcentrix.tray.core; 2 | 3 | /** 4 | * Accessed values which where saved as a different type 5 | * 6 | * Created by pascalwelsch on 5/13/15. 7 | */ 8 | public class WrongTypeException extends TrayRuntimeException { 9 | 10 | public WrongTypeException() { 11 | } 12 | 13 | public WrongTypeException(final String detailMessage) { 14 | super(detailMessage); 15 | } 16 | 17 | public WrongTypeException(final String detailMessage, final Object... args) { 18 | super(detailMessage, args); 19 | } 20 | 21 | public WrongTypeException(final String detailMessage, final Throwable throwable) { 22 | super(detailMessage, throwable); 23 | } 24 | 25 | public WrongTypeException(final Throwable throwable) { 26 | super(throwable); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /version.properties: -------------------------------------------------------------------------------- 1 | 2 | VERSION_CODE=1 3 | --------------------------------------------------------------------------------