#!/bin/sh

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

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

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=$?
    if [ $RET = 1 ]; then
        echo "Can't get IP/GW form DHCP Server !"
        logger -t "pptp" "Can't get IP/GW form DHCP Server !"
        exit 1
    fi
	
	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

# Check Server
if [ "$PPTP_PNSSERVER" == "" ]; then 
    logger -t "pptp" "No PPTP server address !" 
    echo "pptp" "No PPTP server address !" 
    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 # Do it at ip-up
route add $PPTP_PNSSERVER gw $IF_GW dev $ETH	

echo $$ > $PIDFILE_START
pptp-connect $PPTP_PNSSERVER > /dev/null 2>&1 &

CNT_FORCE=`rdcsman 0x8001000E u16`
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	

        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

        sl_get_ppp_PID_IFname $PIDFILE_PPPD PPP_PID PPP_IF
        if [ $? = 0 ] ; then		
            sl_get_IP_NM_GW_in_ifconfig $PPP_IF IF_IP IF_NM IF_GW		

            # Don't monitor connection if dial-on-demand
            if [ "$IF_IP" = "10.64.64.64" ] ; then
                route add default gw ${IF_GW}
                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

