#! /bin/bash
TOPDOMAIN=allstarlink.org
SUBDOMAINS="nodes1 nodes2 nodes3 nodes4"
FILEPATH=/var/lib/asterisk
WGET=`which wget` 
CP=`which cp`
MV=`which mv`
RM=`which rm`
CHMOD=`which chmod`
GREP=`which grep`
CAT=`which cat`
DATE=`which date`
RSYNC=`which rsync`
TIME=`which time`

# Diagnostics
dry_run=0
verbose=0

downloads=0
retries=0
while [ 1 ] 
do
  for i in $SUBDOMAINS
  do
    res=0
    while [ $res -eq 0 ]
    do
      $TIME $WGET -q -t 2 -T 8 -O /tmp/rpt_extnodes-temp http://$i.$TOPDOMAIN/cgi-bin/nodes.pl >> /tmp/getnode.log
      res=$?
      if [ $res -eq 0 ]
      then
#	echo "rubbish" >/tmp/rpt_extnodes-temp
	$GREP -q extnodes /tmp/rpt_extnodes-temp
	if [ $? -eq 0 ]
	then
		downloads=$((downloads+1))
		retries=0
		if [ $dry_run -eq 0 ]
		then
       		 	$CHMOD 700 /tmp/rpt_extnodes-temp
			$CP /tmp/rpt_extnodes-temp $FILEPATH/rpt_extnodes-temp
      			$MV -f $FILEPATH/rpt_extnodes-temp $FILEPATH/rpt_extnodes
		else
			$CAT /tmp/rpt_extnodes-temp
		fi
		if [ $verbose -ne 0 ]
		then
			echo "Retrieved node list from $i.$TOPDOMAIN"
			$DATE
		fi
		if [ $downloads -gt 100 ]
		then
			downloads=0
			sleep 600
			# use rsync to update the connect messages
                        $RSYNC -av rsync://allstarlink.org/connect-messages /var/lib/asterisk/sounds/rpt/nodenames  
			break; # Don't dwell on one server, Look for a new server
		fi
		if [ $dry_run -eq 0 ]
		then
	        	sleep 600
		else
			sleep 5
		fi
	else
		if [ $verbose -ne 0 ]
		then
			echo "Retreived garbage node list from $i.$TOPDOMAIN"
			echo "Moving to next node server in list..."	
		fi
		$RM -f /tmp/rpt_extnodes-temp			
		downloads=0
		retries=$((retries+1))
                if [ $retries -gt 50 ]
       	        then
               	        sleep 7200 # doze for 2 hrs to lighten network load
               	else
                       	sleep 10
		fi
		break
	fi
      else
	$RM -f /tmp/rpt_extnodes-temp
	if [ $verbose -ne 0 ]
	then
        	echo "Problem retrieving node list from $i.$TOPDOMAIN, trying another server";
		downloads=0
		retries=$((retries+1))
	fi
	if [ $verbose -eq 0 ]
	then
		if [ $retries -gt 50 ]
		then
			sleep 7200 # doze for 2 hrs to lighten network load
		else
			sleep 30
		fi
	else
		sleep 5
	fi
	break
      fi
    done
 done
done

