#!/bin/sh

# WRT-45 There may be more than one OpenVPN process running on a router
# Therefore, refuse to startopenvpn again if this script is already running

LOCKFILE=/tmp/.startopenvpn

if [ -f $LOCKFILE ] ; then
  echo "startopenvpn is already running - refusing to start another instance"
  sleep 1
  exit 1
fi

touch $LOCKFILE

case "$1" in
	up)
	        #make sure not up already
	        killall -q openvpn
	        echo "" > /var/log/openvpn.log
	        
		# Start the OpenVPN server
		rdate -s mlogger
		rdate -s router-config.terrasls.com
		var=""
		while [ "$var" = "" ]
		do
			killall -q openvpn
			
			rdate -s mlogger
			rdate -s router-config.terrasls.com
			#try UDP VPN
			echo "Trying to connect to UDP VPN"
			/usr/sbin/openvpn /etc/openvpn/client.udp.conf &
			sleep 30
		
			#break if connected
			var=`grep 'Peer Connection Initiated' /var/log/openvpn.log`
			if [ "$var" ] 
			then
				break;
			fi
			
			#otherwise, kill openvpn and try other conf
			killall -q openvpn
			
			#try TCP VPN
			echo "Trying to connect to TCP VPN"
			/usr/sbin/openvpn /etc/openvpn/client.tcp.conf &
			sleep 30

			var=`grep 'Peer Connection Initiated' /var/log/openvpn.log`
		done
		
		route add -net 10.20.0.0 netmask 255.255.255.0 tap0
	;;
	down)
		# Takes down the VPN
		killall -q openvpn
		route del -net 10.20.0.0 netmask 255.255.255.0 tap0
	
	;;
	*)
		echo "$0 {up | down}"
	;;
	esac

# WRT-45 There may be more than one OpenVPN process running on a router
# Clean up lockfile
rm -f $LOCKFILE
