#!/bin/sh

CONFIG="/etc/ppp/pptp.conf"
export CONFIG
. $CONFIG
. /usr/bin/scriptlib

PIDFILE_START="$PIDFILE.start"
PIDFILE_CONNECT="$PIDFILE.connect"
PIDFILE_PPPD="/var/run/ppp-pptp.pid"
RESOLV_CONF="/etc/resolv.conf"

# Don't monitor connection if dial-on-demand
CNT_FORCE=`rdcsman 0x8001000E u16`
echo "CNT FORCE = $CNT_FORCE"

pptp_status()
{		
	if [ -r $PIDFILE_PPPD ] ; then
		sl_get_ppp_PID_IFname $PIDFILE_PPPD PPP_PID PPP_IF
		if [ $? = 0 ] ; then		
		    # check the cnt status is CONNECT 
			CNTSTATUS=`rdcsman 0x80050700 u16`
			[ $CNTSTATUS -ne 2 ] && echo "CNTSTATUS=$CNTSTATUS" && return 1
			echo "$0: IF=$PPP_IF  PID=$PPP_PID"
			echo "pptp-status: Link is up and running on interface $PPP_IF"
		    return 0
    	fi
	fi 		
	return 1	
}

#clear last ppp passwd auth fail temp file
rm -rf /var/run/ppp_auth*

# Check for pidfile
if [ -r "$PIDFILE_CONNECT" ] ; then
    PID=`cat "$PIDFILE_CONNECT"`
    # Check if still running
    kill -0 $PID > /dev/null 2>&1
    if [ $? = 0 ] ; then
		echo "$0: There already seems to be a PPTP connection up (PID $PID)" >& 2
		exit 0
    fi
    rm -f "$PIDFILE_CONNECT" "$PIDFILE_START"
fi


if [ "$PPTP_PHASE1_TYPE" = "DYNAMIC" ] ; then
	udhcpc-action stop
	udhcpc-action start
	RET=$?
	
	[ $RET = 1 ] && exit 1
	
	IF_DNS1=`rdcsman 0x80035005 ipv4`
	IF_DNS2=`rdcsman 0x80035006 ipv4`
	[ -n "$IF_DNS1" ] && echo "nameserver $IF_DNS1" > $RESOLV_CONF.phase1
    [ -n "$IF_DNS2" ] && echo "nameserver $IF_DNS2" >> $RESOLV_CONF.phase1	

elif [ "$PPTP_PHASE1_TYPE" = "STATIC" ] ; then 
	
	IF_IP=`rdcsman 0x00050300 ipv4`
	IF_NM=`rdcsman 0x00050400 ipv4`
	IF_GW=`rdcsman 0x00050500 ipv4`
	IF_DNS1=`rdcsman 0x00050700 ipv4`
	IF_DNS2=`rdcsman 0x00050800 ipv4`
	
	ifconfig $ETH $IF_IP netmask $IF_NM
	
	route add default gw $IF_GW dev $ETH
	
	rm -f $RESOLV_CONF
	
	[ -n "$IF_DNS1" ] && echo "nameserver $IF_DNS1" > $RESOLV_CONF
    [ -n "$IF_DNS2" ] && echo "nameserver $IF_DNS2" >> $RESOLV_CONF    
    [ -n "$IF_DNS1" ] && echo "nameserver $IF_DNS1" > $RESOLV_CONF.phase1
    [ -n "$IF_DNS2" ] && echo "nameserver $IF_DNS2" >> $RESOLV_CONF.phase1
fi


# Get the ip of PNSSERVER

# Try 3 Times
for i in 1 2 3
do
	got=0
	CFG=`ping -c1 $PPTP_PNSSERVER`
	if [ $? = 0 ] ; then
		stt=0
		for s in $CFG
		do
			if [ $stt = 1 ] ; then
				PPTP_PNSSERVER=${s%:*}
				got=1
				break		 
			fi
		
			if [ $s = "from" ] ; then
				stt=1
			fi	   
		done
	fi
	
	[ $got = 1 ] && break
	
	sleep 1
done

if [ $got = 0 ] ; then	
	exit 1 
fi

echo "Find the default route"

sl_get_IP_NM_GW_in_ifconfig $ETH IF_IP IF_NM IF_GW
route del default
route add $PPTP_PNSSERVER gw $IF_GW dev $ETH	

echo $$ > $PIDFILE_START

pptp-connect $PPTP_PNSSERVER $CNT_FORCE > /dev/null 2>&1 &
#pptp-connect $PPTP_PNSSERVER $CNT_FORCE &

CONNECT_PID=$!
if [ "$CNT_FORCE" = "1" ] ; then
	echo "PPTP force connect!"
else
	CNTTYPE=`rdcsman 0x00050900 u32`
	if [ "$CNTTYPE" = "0" ] ; then 

		sleep 2 #Important! it must be waited	
	
		sl_get_ppp_PID_IFname $PIDFILE_PPPD PPP_PID PPP_IF

		if [ -f /var/run/ppp_auth_fail ] ; then
			echo "$0: Authentication fail!"
			wrcsman "0x80010007 0x06 &&\
					 0x80050700 0x06"
			# Clean up PIDFILE(s)
			rm -f "$PIDFILE_START" 
			exit 0
		fi
	
		if [ $? = 0 ] ; then		
			sl_get_IP_NM_GW_in_ifconfig $PPP_IF IF_IP IF_NM IF_GW		

			if [ "$IF_IP" = "10.64.64.64" ] ; then
				wrcsman "0x80050200 0x00 && \
						 0x80050300 0x00 && \
						 0x80050400 0x00 && \
						 0x80050700 0x05 && \
						 0x80010002 0x00 && \
						 0x80010003 0x00 && \
						 0x80010004 0x00 && \
						 0x80010007 0x05"
			else
				wrcsman "0x80050200 {$IF_IP} && \
						 0x80050300 {$IF_NM} && \
						 0x80050400 {$IF_GW} && \
						 0x80050700 0x02 && \
						 0x80010002 {$IF_IP} && \
						 0x80010003 {$IF_NM} && \
						 0x80010004 {$IF_GW} && \
						 0x80010007 0x02"
			fi
		
		    exit 0
 	   fi
  	  exit 1
	fi
fi 


# Monitor connection
TIME=0
TIMEOUT=10
while [ true ] ; do
	#pptp_status > /dev/null 2>&1
	pptp_status		
		
	if [ $? = 0 ] ; then
		echo "$0: Connected!"
		# Must wait till executing ip-up completely..
		sleep 1
		exit 0
    fi
    		
	if [ -f /var/run/ppp_auth_fail ] ; then
		echo "$0: Authentication fail!"
		wrcsman "0x80010007 0x06 &&\
				 0x80050700 0x06"
		# Clean up PIDFILE(s)
		rm -f "$PIDFILE_START" 
		exit 0
	fi

    sleep 1
    TIME=$(($TIME+1))
	if [ $TIME -gt $TIMEOUT ] ; then
		break	
	fi	
done	

echo "TIME_OUT" 

# Clean up PIDFILE(s)
rm -f "$PIDFILE_START" 
exit 1

