#!/bin/sh
# /usr/lib/ddns/luci_dns_helper.sh
#
#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
#
# Written in August 2014 by
#.Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
# This script is used by luci-app-ddns
# - getting registered IP
# - check if possible to get local IP
# - verifing given DNS- or Proxy-Server
#
# variables in small chars are read from /etc/config/ddns as parameter given here
# variables in big chars are defined inside these scripts as gloval vars
# variables in big chars beginning with "__" are local defined inside functions only
# set -vx  	#script debugger

[ $# -lt 2 ] && exit 1

. /usr/lib/ddns/dynamic_dns_functions.sh	# global vars are also defined here

# preset some variables, wrong or not set in dynamic_dns_functions.sh
SECTION_ID="lucihelper"
LOGFILE="$LOGDIR/$SECTION_ID.log"
DATFILE="$RUNDIR/$SECTION_ID.$$.dat"	# save stdout data of WGet and other extern programs called
ERRFILE="$RUNDIR/$SECTION_ID.$$.err"	# save stderr output of WGet and other extern programs called
VERBOSE_MODE=0		# no console logging
# global variables normally set by reading DDNS UCI configuration
use_syslog=0		# no syslog
use_logfile=0		# by default no logfile, can be changed here

__RET=0
case "$1" in
	get_registered_ip)
		local IP
		domain=$2			# Hostname/Domain
		use_ipv6=${3:-"0"}		# Use IPv6 - default IPv4
		force_ipversion=${4:-"0"}	# Force IP Version - default 0 - No
		force_dnstcp=${5:-"0"}		# Force TCP on DNS - default 0 - No
		dns_server=${6:-""}		# DNS server - default No DNS
		write_log 7 "-----> get_registered_ip IP"
		get_registered_ip IP
		__RET=$?
		[ $__RET -ne 0 ] && IP=""
		echo -n "$IP"			# suppress LF
		;;
	verify_dns)
		# $2 : dns-server to verify	# no need for force_dnstcp because
						# verify with nc (netcat) uses tcp anyway
		use_ipv6=${3:-"0"}		# Use IPv6 - default IPv4
		force_ipversion=${4:-"0"}	# Force IP Version - default 0 - No
		write_log 7 "-----> verify_dns '$2'"
		verify_dns "$2"
		__RET=$?
		;;
	verify_proxy)
		# $2 : proxy string to verify
		use_ipv6=${3:-"0"}		# Use IPv6 - default IPv4
		force_ipversion=${4:-"0"}	# Force IP Version - default 0 - No
		write_log 7 "-----> verify_proxy '$2'"
		verify_proxy "$2"
		__RET=$?
		;;
	get_local_ip)
		local IP
		use_ipv6="$2"			# Use IPv6
		ip_source="$3"			# IP source
		ip_network="$4"			# set if source = "network" otherwise "-"
		ip_url="$5"			# set if source = "web" otherwise "-"
		ip_interface="$6"		# set if source = "interface" itherwiase "-"
		ip_script="$7"			# set if source = "script" otherwise "-"
		proxy="$8"			# proxy if set
		force_ipversion="0"		# not needed but must be set
		use_https="0"			# not needed but must be set
		[ -n "$proxy" -a "$ip_source" = "web" ] && {
			# proxy defined, used for ip_source=web
			export HTTP_PROXY="http://$proxy"
			export HTTPS_PROXY="http://$proxy"
			export http_proxy="http://$proxy"
			export https_proxy="http://$proxy"
		}
		# don't need IP only the return code
		[ "$ip_source" = "web" -o  "$ip_source" = "script" ] && {
			# we wait only 3 seconds for an
			# answer from "web" or "script"
			write_log 7 "-----> timeout 3 -- get_local_ip IP"
			timeout 3 -- get_local_ip IP
		} || {
			write_log 7 "-----> get_local_ip IP"
			get_local_ip IP
		}
		__RET=$?
		;;
	*)
		__RET=255
		;;
esac

# remove out and err file
[ -f $DATFILE ] && rm -f $DATFILE
[ -f $ERRFILE ] && rm -f $ERRFILE
return $__RET