mirror of
https://github.com/openwrt/packages.git
synced 2025-12-22 01:44:32 +04:00
ddns-scripts: refactor verify_dns()
quote variables coalesce error conditions code reads more cleanly and less 'stabby'. Signed-off-by: Paul Donald <newtwen+github@gmail.com>
This commit is contained in:
committed by
Florian Eckert
parent
b953ed23f7
commit
727cdeff68
@@ -551,37 +551,50 @@ verify_host_port() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# verify given DNS server if connectable
|
# Verify whether a given DNS server is reachable
|
||||||
# $1 DNS server to verify
|
# $1 DNS server to verify
|
||||||
verify_dns() {
|
verify_dns() {
|
||||||
local __ERR=255 # last error buffer
|
local err attempt
|
||||||
local __CNT=0 # error counter
|
err=255 # Last error code
|
||||||
|
attempt=0 # Retry attempt counter
|
||||||
|
|
||||||
[ $# -ne 1 ] && write_log 12 "Error calling 'verify_dns()' - wrong number of parameters"
|
[ "$#" -ne 1 ] && { write_log 12 "Error: 'verify_dns()' requires exactly 1 argument."; return 1; }
|
||||||
write_log 7 "Verify DNS server '$1'"
|
|
||||||
|
|
||||||
while [ $__ERR -ne 0 ]; do
|
local dns_server="$1"
|
||||||
# DNS uses port 53
|
write_log 7 "Verifying DNS server: '$dns_server'"
|
||||||
verify_host_port "$1" "53"
|
|
||||||
__ERR=$?
|
|
||||||
if [ -n "$LUCI_HELPER" ]; then # no retry if called by LuCI helper script
|
|
||||||
return $__ERR
|
|
||||||
elif [ $__ERR -ne 0 -a $VERBOSE -gt 1 ]; then # VERBOSE > 1 then NO retry
|
|
||||||
write_log 4 "Verify DNS server '$1' failed - Verbose Mode: $VERBOSE - NO retry on error"
|
|
||||||
return $__ERR
|
|
||||||
elif [ $__ERR -ne 0 ]; then
|
|
||||||
__CNT=$(( $__CNT + 1 )) # increment error counter
|
|
||||||
# if error count > retry_max_count leave here
|
|
||||||
[ $retry_max_count -gt 0 -a $__CNT -gt $retry_max_count ] && \
|
|
||||||
write_log 14 "Verify DNS server '$1' failed after $retry_max_count retries"
|
|
||||||
|
|
||||||
write_log 4 "Verify DNS server '$1' failed - retry $__CNT/$retry_max_count in $RETRY_SECONDS seconds"
|
while [ "$err" -ne 0 ]; do
|
||||||
sleep $RETRY_SECONDS &
|
# Check connectivity to the DNS server on port 53
|
||||||
PID_SLEEP=$!
|
verify_host_port "$dns_server" "53"
|
||||||
wait $PID_SLEEP # enable trap-handler
|
err=$?
|
||||||
PID_SLEEP=0
|
|
||||||
|
# Exit immediately if called by LuCI helper script
|
||||||
|
[ -n "$LUCI_HELPER" ] && return "$err"
|
||||||
|
|
||||||
|
if [ "$err" -ne 0 ]; then
|
||||||
|
# If in verbose mode and connection fails, do not retry
|
||||||
|
if [ "$VERBOSE" -gt 1 ]; then
|
||||||
|
write_log 4 "Verification failed for DNS server '$dns_server' - Verbose Mode: $VERBOSE - No retries."
|
||||||
|
return "$err"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Increment attempt counter and handle retry
|
||||||
|
attempt=$((attempt + 1))
|
||||||
|
|
||||||
|
# If max retries are exceeded, exit with failure
|
||||||
|
if [ "$retry_max_count" -gt 0 ] && [ "$attempt" -gt "$retry_max_count" ]; then
|
||||||
|
write_log 14 "Verification failed for DNS server '$dns_server' after $retry_max_count retries."
|
||||||
|
return "$err"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Log the retry attempt and wait before retrying
|
||||||
|
write_log 4 "Verification failed for DNS server '$dns_server' - Retry $attempt/$retry_max_count in $RETRY_SECONDS seconds."
|
||||||
|
sleep "$RETRY_SECONDS" &
|
||||||
|
wait $! # Enable trap handler during sleep
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Return success if the loop exits without errors
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user