gitextract_d_s45j8t/ ├── .clang-format ├── .clang-tidy ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── feature.md │ │ └── issue.md │ └── workflows/ │ ├── c-cpp.yml │ ├── docker.yml │ └── webui.yml ├── .gitignore ├── Dockerfile ├── LICENSE ├── Makefile ├── ReadMe.md ├── ReadMe_en.md ├── doc/ │ └── architecture.vsdx ├── etc/ │ ├── default/ │ │ └── smartdns │ ├── init.d/ │ │ └── smartdns │ └── smartdns/ │ └── smartdns.conf ├── package/ │ ├── build-pkg.sh │ ├── copy-smartdns.sh │ ├── debian/ │ │ ├── DEBIAN/ │ │ │ ├── changelog │ │ │ ├── compat │ │ │ ├── conffiles │ │ │ ├── control │ │ │ ├── copyright │ │ │ ├── prerm │ │ │ └── rules │ │ └── make.sh │ ├── linux/ │ │ ├── install │ │ └── make.sh │ ├── luci/ │ │ ├── control/ │ │ │ ├── control │ │ │ ├── postinst │ │ │ └── prerm │ │ ├── debian-binary │ │ ├── files/ │ │ │ ├── luci/ │ │ │ │ └── i18n/ │ │ │ │ └── smartdns.zh-cn.po │ │ │ └── root/ │ │ │ ├── usr/ │ │ │ │ └── share/ │ │ │ │ ├── luci/ │ │ │ │ │ └── menu.d/ │ │ │ │ │ └── luci-app-smartdns.json │ │ │ │ └── rpcd/ │ │ │ │ └── acl.d/ │ │ │ │ └── luci-app-smartdns.json │ │ │ └── www/ │ │ │ └── luci-static/ │ │ │ └── resources/ │ │ │ └── view/ │ │ │ └── smartdns/ │ │ │ └── smartdns.js │ │ └── make.sh │ ├── luci-compat/ │ │ ├── control/ │ │ │ ├── control │ │ │ ├── postinst │ │ │ └── prerm │ │ ├── debian-binary │ │ ├── files/ │ │ │ ├── etc/ │ │ │ │ └── uci-defaults/ │ │ │ │ └── 50_luci-smartdns │ │ │ ├── luci/ │ │ │ │ ├── controller/ │ │ │ │ │ └── smartdns.lua │ │ │ │ ├── i18n/ │ │ │ │ │ └── smartdns.zh-cn.po │ │ │ │ ├── model/ │ │ │ │ │ ├── cbi/ │ │ │ │ │ │ └── smartdns/ │ │ │ │ │ │ ├── smartdns.lua │ │ │ │ │ │ └── upstream.lua │ │ │ │ │ └── smartdns.lua │ │ │ │ └── view/ │ │ │ │ └── smartdns/ │ │ │ │ └── smartdns_status.htm │ │ │ └── usr/ │ │ │ └── share/ │ │ │ └── rpcd/ │ │ │ └── acl.d/ │ │ │ └── luci-app-smartdns.json │ │ └── make.sh │ ├── luci-lite/ │ │ ├── control/ │ │ │ ├── conffiles │ │ │ ├── control │ │ │ ├── postinst │ │ │ └── prerm │ │ ├── debian-binary │ │ ├── files/ │ │ │ ├── luci/ │ │ │ │ └── i18n/ │ │ │ │ └── smartdns-lite.zh-cn.po │ │ │ └── root/ │ │ │ ├── etc/ │ │ │ │ ├── config/ │ │ │ │ │ └── smartdns-lite │ │ │ │ └── init.d/ │ │ │ │ └── smartdns-lite │ │ │ ├── usr/ │ │ │ │ └── share/ │ │ │ │ ├── luci/ │ │ │ │ │ └── menu.d/ │ │ │ │ │ └── luci-app-smartdns-lite.json │ │ │ │ └── rpcd/ │ │ │ │ └── acl.d/ │ │ │ │ └── luci-app-smartdns-lite.json │ │ │ └── www/ │ │ │ └── luci-static/ │ │ │ └── resources/ │ │ │ └── view/ │ │ │ └── smartdns-lite/ │ │ │ └── smartdns-lite.js │ │ └── make.sh │ ├── openwrt/ │ │ ├── Makefile │ │ ├── address.conf │ │ ├── blacklist-ip.conf │ │ ├── control/ │ │ │ ├── conffiles │ │ │ ├── control │ │ │ ├── postinst │ │ │ └── prerm │ │ ├── custom.conf │ │ ├── debian-binary │ │ ├── domain-block.list │ │ ├── domain-forwarding.list │ │ ├── files/ │ │ │ └── etc/ │ │ │ ├── config/ │ │ │ │ └── smartdns │ │ │ └── init.d/ │ │ │ └── smartdns │ │ └── make.sh │ ├── optware/ │ │ ├── S50smartdns │ │ ├── control/ │ │ │ ├── conffiles │ │ │ ├── control │ │ │ ├── postinst │ │ │ └── prerm │ │ ├── debian-binary │ │ ├── make.sh │ │ └── smartdns-opt.conf │ ├── redhat/ │ │ └── smartdns.spec │ ├── run-smartdns │ ├── tool/ │ │ └── po2lmo/ │ │ ├── Makefile │ │ └── src/ │ │ ├── po2lmo.c │ │ ├── template_lmo.c │ │ └── template_lmo.h │ └── windows/ │ ├── install.bat │ ├── reload.bat │ ├── uninstall.bat │ └── wsl-run.vbs ├── plugin/ │ ├── demo/ │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── demo.c │ │ └── demo.h │ └── smartdns-ui/ │ ├── .gitignore │ ├── Cargo.toml │ ├── Makefile │ ├── build.rs │ ├── src/ │ │ ├── data_server.rs │ │ ├── data_stats.rs │ │ ├── data_upstream_server.rs │ │ ├── db.rs │ │ ├── http_api_msg.rs │ │ ├── http_error.rs │ │ ├── http_jwt.rs │ │ ├── http_server.rs │ │ ├── http_server_api.rs │ │ ├── http_server_stream.rs │ │ ├── lib.rs │ │ ├── plugin.rs │ │ ├── server_log.rs │ │ ├── smartdns.rs │ │ ├── utils.rs │ │ └── whois.rs │ └── tests/ │ ├── common/ │ │ ├── client.rs │ │ ├── mod.rs │ │ └── server.rs │ ├── httpserver_test.rs │ └── restapi_test.rs ├── src/ │ ├── .gitignore │ ├── Makefile │ ├── dns.c │ ├── dns_cache.c │ ├── dns_client/ │ │ ├── client_http2.c │ │ ├── client_http2.h │ │ ├── client_http3.c │ │ ├── client_http3.h │ │ ├── client_https.c │ │ ├── client_https.h │ │ ├── client_mdns.c │ │ ├── client_mdns.h │ │ ├── client_quic.c │ │ ├── client_quic.h │ │ ├── client_socket.c │ │ ├── client_socket.h │ │ ├── client_tcp.c │ │ ├── client_tcp.h │ │ ├── client_tls.c │ │ ├── client_tls.h │ │ ├── client_udp.c │ │ ├── client_udp.h │ │ ├── conn_stream.c │ │ ├── conn_stream.h │ │ ├── dns_client.c │ │ ├── dns_client.h │ │ ├── ecs.c │ │ ├── ecs.h │ │ ├── group.c │ │ ├── group.h │ │ ├── packet.c │ │ ├── packet.h │ │ ├── pending_server.c │ │ ├── pending_server.h │ │ ├── proxy.c │ │ ├── proxy.h │ │ ├── query.c │ │ ├── query.h │ │ ├── server_info.c │ │ ├── server_info.h │ │ ├── wake_event.c │ │ └── wake_event.h │ ├── dns_conf/ │ │ ├── address.c │ │ ├── address.h │ │ ├── bind.c │ │ ├── bind.h │ │ ├── bootstrap_dns.c │ │ ├── bootstrap_dns.h │ │ ├── client_rule.c │ │ ├── client_rule.h │ │ ├── client_subnet.c │ │ ├── client_subnet.h │ │ ├── cname.c │ │ ├── cname.h │ │ ├── conf_file.c │ │ ├── conf_file.h │ │ ├── ddns_domain.c │ │ ├── ddns_domain.h │ │ ├── dhcp_lease_dnsmasq.c │ │ ├── dhcp_lease_dnsmasq.h │ │ ├── dns64.c │ │ ├── dns64.h │ │ ├── dns_conf.c │ │ ├── dns_conf.h │ │ ├── dns_conf_group.c │ │ ├── dns_conf_group.h │ │ ├── domain_rule.c │ │ ├── domain_rule.h │ │ ├── domain_set.c │ │ ├── domain_set.h │ │ ├── get_domain.c │ │ ├── get_domain.h │ │ ├── group.c │ │ ├── group.h │ │ ├── host_file.c │ │ ├── host_file.h │ │ ├── https_record.c │ │ ├── https_record.h │ │ ├── ip_alias.c │ │ ├── ip_alias.h │ │ ├── ip_rule.c │ │ ├── ip_rule.h │ │ ├── ip_set.c │ │ ├── ip_set.h │ │ ├── ipset.c │ │ ├── ipset.h │ │ ├── local_domain.c │ │ ├── local_domain.h │ │ ├── nameserver.c │ │ ├── nameserver.h │ │ ├── nftset.c │ │ ├── nftset.h │ │ ├── plugin.c │ │ ├── plugin.h │ │ ├── proxy_names.c │ │ ├── proxy_names.h │ │ ├── proxy_server.c │ │ ├── proxy_server.h │ │ ├── ptr.c │ │ ├── ptr.h │ │ ├── qtype_soa.c │ │ ├── qtype_soa.h │ │ ├── server.c │ │ ├── server.h │ │ ├── server_group.c │ │ ├── server_group.h │ │ ├── set_file.c │ │ ├── set_file.h │ │ ├── smartdns_domain.c │ │ ├── smartdns_domain.h │ │ ├── speed_check_mode.c │ │ ├── speed_check_mode.h │ │ ├── srv_record.c │ │ └── srv_record.h │ ├── dns_plugin.c │ ├── dns_server/ │ │ ├── address.c │ │ ├── address.h │ │ ├── answer.c │ │ ├── answer.h │ │ ├── audit.c │ │ ├── audit.h │ │ ├── cache.c │ │ ├── cache.h │ │ ├── client_rule.c │ │ ├── client_rule.h │ │ ├── cname.c │ │ ├── cname.h │ │ ├── connection.c │ │ ├── connection.h │ │ ├── context.c │ │ ├── context.h │ │ ├── ddr.c │ │ ├── ddr.h │ │ ├── dns64.c │ │ ├── dns64.h │ │ ├── dns_server.c │ │ ├── dns_server.h │ │ ├── dualstack.c │ │ ├── dualstack.h │ │ ├── ip_rule.c │ │ ├── ip_rule.h │ │ ├── ipset_nftset.c │ │ ├── ipset_nftset.h │ │ ├── local_addr.c │ │ ├── local_addr.h │ │ ├── mdns.c │ │ ├── mdns.h │ │ ├── neighbor.c │ │ ├── neighbor.h │ │ ├── prefetch.c │ │ ├── prefetch.h │ │ ├── ptr.c │ │ ├── ptr.h │ │ ├── request.c │ │ ├── request.h │ │ ├── request_pending.c │ │ ├── request_pending.h │ │ ├── rules.c │ │ ├── rules.h │ │ ├── server_http2.c │ │ ├── server_http2.h │ │ ├── server_https.c │ │ ├── server_https.h │ │ ├── server_socket.c │ │ ├── server_socket.h │ │ ├── server_tcp.c │ │ ├── server_tcp.h │ │ ├── server_tls.c │ │ ├── server_tls.h │ │ ├── server_udp.c │ │ ├── server_udp.h │ │ ├── soa.c │ │ ├── soa.h │ │ ├── speed_check.c │ │ └── speed_check.h │ ├── dns_stats.c │ ├── fast_ping/ │ │ ├── fast_ping.c │ │ ├── fast_ping.h │ │ ├── notify_event.c │ │ ├── notify_event.h │ │ ├── ping_fake.c │ │ ├── ping_fake.h │ │ ├── ping_host.c │ │ ├── ping_host.h │ │ ├── ping_icmp.c │ │ ├── ping_icmp.h │ │ ├── ping_icmp6.c │ │ ├── ping_icmp6.h │ │ ├── ping_tcp.c │ │ ├── ping_tcp.h │ │ ├── ping_tcp_syn.c │ │ ├── ping_tcp_syn.h │ │ ├── ping_udp.c │ │ ├── ping_udp.h │ │ ├── wakeup_event.c │ │ └── wakeup_event.h │ ├── http_parse/ │ │ ├── hpack.c │ │ ├── hpack.h │ │ ├── http1_parse.c │ │ ├── http1_parse.h │ │ ├── http2.c │ │ ├── http3_parse.c │ │ ├── http3_parse.h │ │ ├── http_parse.c │ │ ├── http_parse.h │ │ ├── qpack.c │ │ └── qpack.h │ ├── lib/ │ │ ├── art.c │ │ ├── bitops.c │ │ ├── conf.c │ │ ├── idna.c │ │ ├── radix.c │ │ ├── rbtree.c │ │ ├── stringutil.c │ │ └── timer_wheel.c │ ├── main.c │ ├── proxy.c │ ├── smartdns.c │ ├── timer.c │ ├── tlog.c │ └── utils/ │ ├── alpn.c │ ├── capbility.c │ ├── daemon.c │ ├── dns_debug.c │ ├── ipset.c │ ├── misc.c │ ├── neighbors.c │ ├── net.c │ ├── nftset.c │ ├── ssl.c │ ├── stack.c │ ├── tls_header_parse.c │ └── url.c ├── systemd/ │ └── smartdns.service.in └── test/ ├── Makefile ├── cases/ │ ├── test-address.cc │ ├── test-audit.cc │ ├── test-bind.cc │ ├── test-bootstrap.cc │ ├── test-cache.cc │ ├── test-client-rule.cc │ ├── test-cname.cc │ ├── test-ddns.cc │ ├── test-ddr.cc │ ├── test-discard-block-ip.cc │ ├── test-dns64.cc │ ├── test-domain-rule.cc │ ├── test-domain-set.cc │ ├── test-dualstack.cc │ ├── test-edns.cc │ ├── test-group.cc │ ├── test-hosts.cc │ ├── test-http.cc │ ├── test-http2.cc │ ├── test-https.cc │ ├── test-idna.cc │ ├── test-ip-alias.cc │ ├── test-ip-rule.cc │ ├── test-lib-http2.cc │ ├── test-local-domain.cc │ ├── test-mdns.cc │ ├── test-mock-server.cc │ ├── test-nameserver.cc │ ├── test-perf.cc │ ├── test-ping.cc │ ├── test-ptr.cc │ ├── test-qtype-soa.cc │ ├── test-rule.cc │ ├── test-same-pending-query.cc │ ├── test-server.cc │ ├── test-speed-check.cc │ ├── test-srv.cc │ ├── test-stress.cc │ └── test-subnet.cc ├── client.cc ├── client.h ├── include/ │ └── utils.h ├── server.cc ├── server.h ├── test.cc └── utils.cc