#!/bin/bash

export ETHDEV=eth0:1

cd /opt/euro-beta

configure_connection()
{

NOT_DHCP=`./systools/get_eurodb_config_val AdslConnectionStaticIP`
if [ -z "$NOT_DHCP" -o "$NOT_DHCP" == 0 ] ; then
  /opt/euro-beta/config_internet_dhcp
else
  IP=`./systools/get_eurodb_config_val AdslConnectionIP`
  GW=`./systools/get_eurodb_config_val AdslConnectionGW`
  DNS=`./systools/get_eurodb_config_val AdslConnectionDNS`
  ifconfig $ETHDEV $IP up
  route del default
  route add default gw $GW
  echo nameserver $DNS >/etc/resolv.conf
fi
}



check_connection()
{

NOT_DHCP=`./systools/get_eurodb_config_val AdslConnectionStaticIP`
ADSL_IP=`./systools/get_eurodb_config_val AdslConnectionIP`
if [ "$NOT_DHCP" == "1" -a `ifconfig | grep "$ADSL_IP" | wc -l` != 1 ]
then
  echo "Indirizzo IP Statico non corrisponde ..."
  return
fi
{
DONE=0
(
#  ping -w2 -c3 -i0.2 -n 8.8.8.8 &
#  ping -w2 -c3 -i0.2 -n intranet.spintec.com &
#  ping -w2 -c3 -i0.2 -n www.google.com &
  ping -c1 -n 8.8.8.8 &
  ping -c1 -n intranet.spintec.com &
  ping -c1 -n www.google.com &
  ( sleep 2.5; echo Network is unreachable ) &
) |
while [ $DONE = 0 ] && read X
do
#  echo got: $X >> /tmp/log.txt
  if  echo $X | grep -q '^64 bytes from'
  then
    DONE=1
    echo OK
    return
  elif echo $X | grep -q 'Network is unreachable'
  then
#	echo returning >>/tmp/log.txt
    return 
  fi
done
#echo done >>/tmp/log.txt
} 2>/dev/null
}


touch -d"now + 120 seconds" /tmp/pending_rem_access_activation
ANSW=`./systools/get_eurodb_config_val UseVPNConnection`
if [ "$ANSW" == 1 ] ; then

  echo "Controllo di connessione ...."
  NOT_DHCP=`./systools/get_eurodb_config_val AdslConnectionStaticIP`
  CONNECTED=`check_connection`
 # echo "returned $CONNECTED" >>/tmp/log.txt
  if [ "$CONNECTED" == "OK" ] ; then
    echo "Gia' configurato"
  else
    echo "$CONNECTED"
    if [ "$NOT_DHCP" == "1" ]
    then
      echo "Configurazione IP statico in corso ....."
    else
      echo "Assegnazione IP in corso ....."
    fi
    configure_connection
    IP=`ifconfig | awk "/$ETHDEV"':? / {e=1} e && /inet / {print $2; exit}' | sed s/addr://`
    if [ ! $IP ]
    then
      if [ "$NOT_DHCP" == "1" ]
      then
        echo "Errore di configurazione del IP statico"
      else
        echo "Errore di assegnazione IP"
      fi
      rm /tmp/pending_rem_access_activation
      exit 1
    fi
    GW=`route -n | awk '/^0\.0\.0\.0/ {print $2}'`
    echo "IP locale e' $IP, gateway $GW"
  fi
 
  PUBLIC_IP=`./systools/whatismyip` 
  echo "IP pubblico e' $PUBLIC_IP" 
   
  VPN_SERVER=`./systools/get_spintec_vpn_addr`
  VPN_IP=`echo $VPN_SERVER | egrep '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' || host $VPN_SERVER | awk '/has address/ {print $4}'`
  if [ ! $VPN_IP ]
  then
    echo "Impossibile trovare l'indirizzo IP del server."
    rm /tmp/pending_rem_access_activation
    exit 1
  fi
  echo "IP del server e' $VPN_IP" 
  echo "Inizializzazione del VPN in corso ....."
  VPN_TCPIP=`./systools/get_eurodb_config_val UseVPN_TCPIP`
  if [ $VPN_TCPIP == 1 ] ; then
    SERVER_IP=10.0.2.1
    if ifconfig | grep -q ' 10.0.2' && nc -w 3  $SERVER_IP 60000 2>&1 | grep -q SpinTec
    then
      echo "Collegamento VPN gia' attivo"
    else
      for ovpn_pid in `ps auxw | grep openvpn | grep "/client.conf" | awk '{ print $2 }'`
      do
	kill $ovpn_pid
      done
      openvpn --config /etc/openvpn/client.conf --proto tcp-client --remote $VPN_IP 5505 --float --daemon
    fi
  else
    SERVER_IP=10.0.1.1
    if ifconfig | grep -q ' 10.0.1' && nc -w 3  $SERVER_IP 60000 2>&1 | grep -q SpinTec
    then
      echo "Collegamento VPN gia' attivo"
    else
      for ovpn_pid in `ps auxw | grep openvpn | grep "/client.conf" | awk '{ print $2 }'`
      do
	kill $ovpn_pid
      done
      openvpn --config /etc/openvpn/client.conf --proto udp --remote $VPN_IP 5502 --float --daemon
    fi
  fi
  sleep 2
  rm -f /tmp/spinkey_nr # SpinKey NR physical read forced
  for ((T=0; T<8; T++))
  do
    echo "Verifica del collegamento VPN in corso ....."
    if ping -q -c5 $SERVER_IP > /dev/null 2>&1 ; then
      LOCAL_VPN_IP=`ifconfig | sed 's/inet \([0-9]\)/inet addr:\1/' | grep '10\.0\.' | cut -d':' -f2 | awk '{ print $1;}'`
      echo "Collegamento VPN stabilito con successo, IP="$LOCAL_VPN_IP
      if [ "A$1" == "Avpn_only" ]
      then
        rm /tmp/pending_rem_access_activation
        exit 0
      else
        ./systools/remote_access ipv6_start
#        echo -n "Verifica del collegamento con SpinTec proxy in corso ....."
        echo "Verifica del collegamento con SpinTec proxy in corso ....."
        ./systools/activate_vps_vpn SETUP
        echo "Attivazione del accesso remoto in corso ....."
        ./systools/remote_access enable
        sleep 1
        if bash -x ./systools/remote_access register >/dev/null 2>&1
        then
          ACCESS_REG_CODE=`./systools/remote_access access_code -h`
          SPINKEY_NR=`./systools/spinkey`
          VPS_DEMO_PORT=`cat /tmp/vps_demo_port`
          if ps auxw | grep -v grep | grep -q setup
          then
	    [ $SPINKEY_NR ] || SPINKEY_NR=0
            if [ $SPINKEY_NR -eq 0  ]
            then
              /opt/euro-beta/sysmsg "Collegamento VPN" "<br>Il codice di autorizzazzione per l'assistenza remota<br><br><big>$ACCESS_REG_CODE</big><br><br><br>SpinTec proxy ID:$VPS_DEMO_PORT" > /dev/null 2>&1 &
            else
              /opt/euro-beta/sysmsg "Collegamento VPN" "<br>Il codice di autorizzazzione per l'assistenza remota<br><br><big>$ACCESS_REG_CODE</big><br>" > /dev/null 2>&1 &
            fi
          fi
          echo "Il codice di autorizzazzione: $ACCESS_REG_CODE"
        else
          echo "Accesso remoto non disponibile"
        fi
        rm /tmp/pending_rem_access_activation
        exit 0
      fi
    fi
  done
  echo "Impossibile stabilire collegamento VPN"
  for ovpn_pid in `ps auxw | grep openvpn | grep " client.conf" | awk '{ print $2 }'`
  do 
    kill $ovpn_pid
  done
#  killall openvpn
  rm /tmp/pending_rem_access_activation
  exit 1

else

trap 'echo HUP' SIGHUP
pppd $1 call spintec

fi

rm /tmp/pending_rem_access_activation
