Merge pull request #4853 from StevenHessing/noddos
[feed/packages.git] / net / adblock / files / adblock.init
index 822317e16effb7100d56edb65be2dbd18e5f9679..d49c6ea2de38f2ae4baccb7491bfc30a0eb8d09a 100755 (executable)
@@ -1,33 +1,36 @@
 #!/bin/sh /etc/rc.common
 #
 
-START=90
+START=30
 USE_PROCD=1
 
-EXTRA_COMMANDS="suspend resume query"
+EXTRA_COMMANDS="suspend resume query status"
 EXTRA_HELP="   suspend Suspend adblock processing
        resume  Resume adblock processing
-       query   <DOMAIN> Query active blocklists for specific domain"
+       query   <DOMAIN> Query active blocklists for specific domains
+       status  Print runtime information"
 
 adb_init="/etc/init.d/adblock"
 adb_script="/usr/bin/adblock.sh"
 
 boot()
 {
-    local list iface="$(uci -q get adblock.global.adb_iface)"
-
-    for name in ${iface}
-    do
-        list="${list} network.interface.${name}"
-    done
-    ubus -t 60 wait_for network.interface ${list} 2>/dev/null
+    adb_boot=1
     rc_procd start_service
 }
 
 start_service()
 {
-    if [ $("${adb_init}" enabled; printf ${?}) -eq 0 ]
+    if [ $("${adb_init}" enabled; printf "%u" ${?}) -eq 0 ]
     then
+        if [ -n "${adb_boot}" ]
+        then
+            local trigger="$(uci_get adblock.global.adb_trigger)"
+            if [ "${trigger}" != "timed" ]
+            then
+                return 0
+            fi
+        fi
         procd_open_instance "adblock"
         procd_set_param command "${adb_script}" "${@}"
         procd_set_param stdout 1
@@ -36,9 +39,15 @@ start_service()
     fi
 }
 
+reload_service()
+{
+    rc_procd start_service reload
+}
+
 stop_service()
 {
     rc_procd "${adb_script}" stop
+    rc_procd start_service
 }
 
 restart()
@@ -61,13 +70,20 @@ query()
     rc_procd "${adb_script}" query "${1}"
 }
 
+status()
+{
+    rc_procd "${adb_script}" status
+}
+
 service_triggers()
 {
-    local iface="$(uci -q get adblock.global.adb_iface)"
+    local trigger="$(uci_get adblock.global.adb_trigger)"
+    local delay="$(uci_get adblock.global.adb_triggerdelay)"
 
-    for name in ${iface}
-    do
-        procd_add_interface_trigger "interface.*.up" "${name}" "${adb_init}" start
-    done
-    procd_add_config_trigger "config.change" "adblock" "${adb_init}" start
+    if [ "${trigger}" != "none" ] && [ "${trigger}" != "timed" ]
+    then
+        PROCD_RELOAD_DELAY=$((${delay:=1} * 1000))
+        procd_add_interface_trigger "interface.*.up" "${trigger}" "${adb_init}" start
+    fi
+    procd_add_reload_trigger "adblock"
 }