#!/bin/sh /etc/rc.common # Copyright 2023-2026 MOSSDeF, Stan Grishin (stangri@melmac.ca) # shellcheck disable=SC2015,SC3043 # shellcheck disable=SC2034 START=20 USE_PROCD=1 LC_ALL=C if type extra_command 1>/dev/null 2>&1; then extra_command 'allow' 'Allows domain in current block-list and config' extra_command 'check' 'Checks if specified domain is found in current block-list' extra_command 'check_tld' 'Checks if any TLDs are found in current block-list' extra_command 'check_leading_dot' 'Checks if leading-dot domains are found in current block-list' extra_command 'check_lists' 'Checks if specified domain is found in enabled block-lists' extra_command 'dl' 'Force-downloads all enabled block-list' extra_command 'killcache' 'Delete all cached files' extra_command 'pause' 'Pauses ad-blocking for specified number of seconds (default: 20)' extra_command 'show_blocklist' 'List currently blocked domains' extra_command 'sizes' 'Displays the file-sizes of configured block-lists' extra_command 'version' 'Show version information' fi readonly packageName='adblock-fast' readonly _ucode="ucode -S -L /lib/${packageName} /lib/${packageName}/cli.uc --" _procd_svc_data= _fw4_restart= # shellcheck disable=SC1091 . "${IPKG_INSTROOT}/lib/functions.sh" # shellcheck disable=SC1091 . "${IPKG_INSTROOT}/lib/functions/network.sh" boot() { rc_procd start_service 'on_boot' && service_started 'on_boot'; } start_service() { local param="${1:-on_start}" _procd_svc_data="$($_ucode start "$param")" } service_data() { [ -n "$_procd_svc_data" ] && eval "$_procd_svc_data"; } stop_service() { eval "$($_ucode stop)"; } reload_service() { rc_procd start_service 'reload'; } restart_service() { rc_procd start_service 'restart'; } status_service() { $_ucode status "$@"; } service_stopped() { [ "$_fw4_restart" = 1 ] && procd_set_config_changed firewall; } service_started() { [ "$_fw4_restart" = 1 ] && procd_set_config_changed firewall; } service_triggers() { local wan wan6 procd_trigger_wan6 i if [ ! -s "/dev/shm/${packageName}" ]; then procd_add_raw_trigger "interface.*.up" 5000 "/etc/init.d/${packageName}" start else network_flush_cache network_find_wan wan wan="${wan:-wan}" procd_trigger_wan6="$(uci -q get "${packageName}.config.procd_trigger_wan6")" if [ "$procd_trigger_wan6" = '1' ]; then network_find_wan6 wan6 wan6="${wan6:-wan6}" fi for i in $wan $wan6; do procd_add_interface_trigger "interface.*" "$i" "/etc/init.d/${packageName}" start "on_${i}" done procd_add_config_trigger "config.change" "$packageName" "/etc/init.d/${packageName}" reload procd_open_validate load_validate_config load_validate_file_url_section procd_close_validate fi } allow() { $_ucode allow "$@"; } check() { $_ucode check "$@"; } check_tld() { $_ucode check_tld "$@"; } check_leading_dot() { $_ucode check_leading_dot "$@"; } check_lists() { $_ucode check_lists "$@"; } dl() { rc_procd start_service 'download' && service_started; } killcache() { $_ucode killcache "$@"; } pause() { $_ucode pause "$@"; } show_blocklist() { $_ucode show_blocklist "$@"; } sizes() { $_ucode sizes "$@"; } version() { $_ucode version "$@"; } # shellcheck disable=SC2120 load_validate_file_url_section() { uci_load_validate "$packageName" 'file_url' "$1" "$2" \ 'enabled:bool:1' \ 'action:or("allow", "block"):block' \ 'size:or(uinteger, "")' \ 'name:string' \ 'url:string' \ ; } # shellcheck disable=SC2120 load_validate_config() { uci_load_validate "$packageName" "$packageName" "$1" "${2}${3:+ ${3}}" \ 'enabled:bool:0' \ 'force_dns:bool:1' \ 'force_dns_interface:list(network):lan' \ 'force_dns_port:list(integer):53,853' \ 'parallel_downloads:bool:1' \ 'debug_init_script:bool:0' \ 'debug_performance:bool:0' \ 'compressed_cache:bool:0' \ 'compressed_cache_dir:directory:/etc' \ 'ipv6_enabled:bool:0' \ 'allow_non_ascii:bool:0' \ 'canary_domains_icloud:bool:0' \ 'canary_domains_mozilla:bool:0' \ 'config_update_enabled:bool:0' \ 'config_update_url:string:https://cdn.jsdelivr.net/gh/openwrt/packages/net/adblock-fast/files/adblock-fast.config.update' \ 'download_timeout:range(1,60):20' \ 'pause_timeout:range(1,600):20' \ 'curl_additional_param:or("", string)' \ 'curl_max_file_size:or("", uinteger)' \ 'curl_retry:range(0,30):3' \ 'verbosity:range(0,2):2' \ 'procd_trigger_wan6:bool:0' \ 'procd_boot_wan_timeout:integer:60' \ 'led:or("", "none", file, device, string)' \ 'dns:or("dnsmasq.addnhosts", "dnsmasq.conf", "dnsmasq.ipset", "dnsmasq.nftset", "dnsmasq.servers", "smartdns.domainset", "smartdns.ipset", "smartdns.nftset", "unbound.adb_list"):dnsmasq.servers' \ 'dnsmasq_instance:list(or("*", "-", uinteger, uci("dhcp", "@dnsmasq"))):*' \ 'smartdns_instance:list(or("*", "-", uinteger, uci("smartdns", "@smartdns"))):*' \ 'heartbeat_domain:or("-", string):heartbeat.melmac.ca' \ 'heartbeat_sleep_timeout:range(1,60):10' \ 'dnsmasq_sanity_check:bool:1' \ 'dnsmasq_validity_check:bool:0' \ 'update_config_sizes:bool:1' \ 'allowed_domain:list(string)' \ 'blocked_domain:list(string)' \ 'dnsmasq_config_file_url:string' \ ; }