ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/external/subpack/net/dnscrypt-proxy/files/dnscrypt-proxy.init b/external/subpack/net/dnscrypt-proxy/files/dnscrypt-proxy.init
new file mode 100644
index 0000000..7df6b22
--- /dev/null
+++ b/external/subpack/net/dnscrypt-proxy/files/dnscrypt-proxy.init
@@ -0,0 +1,167 @@
+#!/bin/sh /etc/rc.common
+
+# Startup before dnsmasq
+START=18
+USE_PROCD=1
+PROG=/usr/sbin/dnscrypt-proxy
+CONFIG_DIR=/var/etc
+USER=nobody
+
+boot() {
+    dnscrypt_boot=1
+    rc_procd start_service
+}
+
+dnscrypt_instance() {
+    local config_path="$CONFIG_DIR/dnscrypt-proxy-$1.conf"
+    create_config_file $1 "$config_path"
+
+    procd_open_instance
+    procd_set_param command $PROG "$config_path"
+    procd_close_instance
+}
+
+create_config_file() {
+    local address port resolver resolvers_list ephemeral_keys client_key log_level syslog syslog_prefix local_cache query_log_file block_ipv6 provider_name provider_key resolver_address
+    local config_path="$2"
+    local plugins_support_enabled=$(dnscrypt-proxy --version | grep 'Support for plugins: present' | wc -l)
+
+    [ ! -d "$CONFIG_DIR" ] && mkdir -p "$CONFIG_DIR"
+    [ -f "$config_path" ] && rm "$config_path"
+
+    config_get      address         $1 'address'        '127.0.0.1'
+    config_get      port            $1 'port'           '5353'
+    config_get      resolver        $1 'resolver'       ''
+    config_get      provider_name   $1 'providername'   ''
+    config_get      provider_key    $1 'providerkey'    ''
+    config_get      resolver_address $1 'resolveraddress'    ''
+    config_get      resolvers_list  $1 'resolvers_list' '/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv'
+    config_get      client_key      $1 'client_key'     ''
+    config_get      syslog_prefix   $1 'syslog_prefix'  'dnscrypt-proxy'
+    config_get      query_log_file  $1 'query_log_file' ''
+    config_get      log_level       $1 'log_level'      '6'
+    config_get      blacklist       $1 'blacklist'      ''
+    config_get_bool syslog          $1 'syslog'         '1'
+    config_get_bool ephemeral_keys  $1 'ephemeral_keys' '0'
+    config_get_bool local_cache     $1 'local_cache'    '0'
+    config_get_bool block_ipv6      $1 'block_ipv6'     '0'
+
+    append_param_not_empty  "ResolverName"  "$resolver"         $config_path
+    append_param            "ResolversList" "$resolvers_list"   $config_path
+    append_param_not_empty  "ProviderName"  "$provider_name"    $config_path
+    append_param_not_empty  "ProviderKey"   "$provider_key"     $config_path
+    append_param_not_empty  "ResolverAddress" "$resolver_address" $config_path
+    append_param            "User"          "$USER"             $config_path
+    append_param            "LocalAddress"  "$address:$port"    $config_path
+    append_param_not_empty  "ClientKey"     "$client_key"       $config_path
+    append_on_off           "EphemeralKeys" $ephemeral_keys     $config_path
+    append_param            "LogLevel"      "$log_level"        $config_path
+    append_on_off           "Syslog"        $syslog             $config_path
+    append_param            "SyslogPrefix"  "$syslog_prefix"    $config_path
+    append_on_off           "LocalCache"    $local_cache        $config_path
+    append_param_not_empty  "QueryLogFile"  "$query_log_file"   $config_path
+
+    if [ $plugins_support_enabled -ne 0 ] && [ $block_ipv6 -ne 0 ]
+    then
+        append_yes_no "BlockIPv6" $block_ipv6 $config_path
+    elif [ $block_ipv6 -ne 0 ]
+    then
+        log_ignored_param "block_ipv6"
+    fi
+
+    if [ $plugins_support_enabled -ne 0 ] && [ -n "$blacklist" ]
+    then
+        config_list_foreach $1 'blacklist' append_blacklists $config_path
+    elif [ -n "$blacklist" ]
+    then
+        log_ignored_param "blacklist"
+    fi
+}
+
+log_ignored_param() {
+    local param_name=$1
+    logger -t dnscrypt-proxy -p user.warn "dnscrypt-proxy plugins support not present, ignoring '$param_name' parameter."
+}
+
+append_on_off() {
+    local param_name=$1
+    local param_value=$2
+    local config_path=$3
+    local value
+
+    if [ $param_value -eq 1 ]
+    then
+        value="on"
+    else
+        value="off"
+    fi
+
+    echo "$param_name $value" >> $config_path
+}
+
+append_yes_no() {
+    local param_name=$1
+    local param_value=$2
+    local config_path=$3
+    local value
+
+    if [ $param_value -eq 1 ]
+    then
+        value="yes"
+    else
+        value="no"
+    fi
+
+    echo "$param_name $value" >> $config_path
+}
+
+append_param() {
+    local param_name=$1
+    local param_value=$2
+    local config_path=$3
+	
+    echo "$param_name $param_value" >> $config_path
+}
+
+append_param_not_empty() {
+    local param_name=$1
+    local param_value=$2
+    local config_path=$3
+
+    if [ ! -z "$param_value" -a "$param_value" != " " ]
+    then
+        append_param "$param_name" "$param_value" "$config_path"
+    fi
+}
+
+append_blacklists() {
+    local value="$1"
+    local config_path="$2"
+    append_param_not_empty "BlackList" "$value" $config_path
+}
+
+start_service() {
+    if [ -n "${dnscrypt_boot}" ]
+    then
+        return 0
+    fi
+    config_load dnscrypt-proxy
+    config_foreach dnscrypt_instance dnscrypt-proxy
+}
+
+service_triggers() {
+    local trigger
+    local triggerlist="$(uci_get dnscrypt-proxy.@global[0].procd_trigger)"
+
+    PROCD_RELOAD_DELAY=2000
+    if [ -n "${triggerlist}" ]
+    then
+        for trigger in ${triggerlist}
+        do
+            procd_add_interface_trigger "interface.*.up" "${trigger}" /etc/init.d/dnscrypt-proxy reload
+        done
+    else
+        procd_add_raw_trigger "interface.*.up" 2000 /etc/init.d/dnscrypt-proxy reload
+    fi
+    procd_add_reload_trigger 'dnscrypt-proxy'
+}