#!/bin/bash
echo "fe starting $1 $2 $3 $4 " > /tmp/fe_start
# commands

if [ $# -lt 1 ]
then
  cat << EOF
  daemon - start daemon
  wakeup - send invoices NOW
  retry_now - retry to send invoices with access_error now
  get_access_keys partita_iva username
  read_access_keys
  
  send_fat) send_fat \$2 ;;
  check_fat) check_fat \$2 ;;
  check_passive) check passive \$2 ;;
  refresh_status) refresh_status ;;
  access) ACCESS ;;
  get_status) get_status ;;

EOF
  exit 1
fi

#debug="-d debug=1"

PATH=/usr/local/bin:$PATH
XMLLINT=xmllint 
BASE64=base64

BASEDIR=/opt/euro-beta
LOGFILE=$BASEDIR/log/fe_send.log
INVOICEDIR=$BASEDIR/data_export/invoices/fe
PASSIVEDIR=$BASEDIR/data_export/invoices/passive
LAST_PASSIVE_DATE=$PASSIVEDIR/last_passive_date
ENCFILE=$BASEDIR/fecksum.bin
TMP=/tmp/fe.$$
rm -rf $TMP
mkdir $TMP

VPSIP=10.1.0.1
#WS="http://$VPSIP/e3g_services/fatel/ws_jet.php"
WS="http://$VPSIP/e3g_services/fatel/ws.php"
TEST_ONLINE="http://$VPSIP/e3g_services/fatel/test_online.html"
STRING_TEST_ONLINE="SpinTec fatel is online"

CURL_TIMEOUTS="--max-time 60 --connect-timeout 5"
CURL_TIMEOUTS_CHECK_ACCESS="--max-time 60 --connect-timeout 5"

MIN=60
HOUR=3600
DAY=$((24*60*60))

TMPLOG=$TMP/fe_send_tmp$$
TMPFILE=$TMP/fe_invoice$$
NOSLEEP=/tmp/fe_daemon_nosleep
DAEMON_PID=/var/run/fe_daemon
SLEEP=10
CHECK_PERIOD=$((15 * $MIN))
CHECK_PASSIVE_PERIOD=$((60 * $MIN))
CHECK_PASSIVE_PERIOD_WITH_DOWNLOAD=$((15 * $MIN))
MAX_PASSIVE_DOWNLOAD=10
RETRY_ACCESS_ERROR=$((5 * $MIN))
SEND_TIMEOUT_ERROR=$((1 * $DAY))


# if [ "$1" = "-f" ]; then
#  FORCED=1
#fi

LOCKFILE=/var/lock/`basename $0`
TMPLOCK=/tmp/`basename $0`.$$

cd $BASEDIR

function running_on_master()
{
  INIFILE1=customdb.ini
  INIFILE=eurodb.ini
  MYIP=`/sbin/ifconfig eth0 | awk '/inet (addr:)?[0-9]/ { print gensub("^.*inet (addr:)?([0-9.]*) .*","\\\\2",1) }'` 
  HOST=`cat $INIFILE1 $INIFILE 2>/dev/null | awk '/Host=/ {print gensub("^.*Host=","",1); exit 0 }'`

  [ ! "$HOST" -o "$HOST" = 127.0.0.1 -o "$HOST" = localhost -o "$HOST" = "$MYIP" ]
}

running_on_master || exit

function log()
{
  ( date +'%m-%d %H:%M:%S ' | tr -d '\n'; echo -n "$1"; cat - | tr -d '\n'; echo ) >>$LOGFILE
}

function get_text() # xml, tags path
{
  MYXML="$1"
  TAG="$2"
    if [ $# -eq 1 ] 
    then
      echo -n "$MYXML" 
    elif echo "$MYXML" | grep -q "<$TAG>"
    then 
      shift; shift
      MYXML=${MYXML#*<$TAG>}
      MYXML=${MYXML%</$TAG>*}
      get_text "$MYXML" "$@"
  fi
}

function get_text_sqlsafe()
{
  escape_sql "`get_text \"$@\"`"
}

function get_text_from_xmlfile #xmlfile path // funziona solo su ubuntu
{
  php $TMP/xmlparse.php "$1" "$2"
}
echo '<?php
  $xml=simplexml_load_file($argv[1]);
  eval("\$result=\$xml->".$argv[2].";");
  foreach($result as $line) 
    if (!$line->count()) echo $line;
    else echo str_replace("\n","",$line->asXml())."\n";
' >$TMP/xmlparse.php


function tag() # tagname, value
{
  VALUE=`echo "$2" | sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g'`
  echo "    <$1>$VALUE</$1>"
}

function sql() #query
{
  echo "$1" | log
  echo "$1" | mysql -ueuro3g -peuro3g eurotest | ( read X; cat - )
}

function escape_sql
{
  echo "$1" | sed 's/\\/\\\\/g; s/'"'"'/\\'"'"'/g; s/"/\\"/g'
}

function encodeURIComponent() 
{
  awk 'BEGIN {while (y++ < 125) z[sprintf("%c", y)] = y
  while (y = substr(ARGV[1], ++j, 1))
  q = y ~ /[[:alnum:]_.!~*\47()-]/ ? q y : q sprintf("%%%02X", z[y])
  print q}' "$1"
}


function xor()
{
  a="$1"
  b="$2"
  for ((i=0; i < ${#a}; i+=2 )); do
    printf '%02x' $((0x${a:$i:2} ^ 0x${b:$i:2}))
  done
}

function hex2bin()
{
  [ "$1" ] && echo "$1" | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf
}

function eurodbEnc()
{
  a=`systools/get_eurodb_config_val "$1"`
  [ "$a" -a -f $ENCFILE ] || return
  k=`hexdump -s$2 -v -e '1024/1 "%02x"' $ENCFILE`
#  echo "k="$k >&2
  encodeURIComponent "$(xor $a $k)"
}

function eurodb()
{
  encodeURIComponent "`systools/get_eurodb_config_val \"$1\"`"
}

function ACCESS()
{
  echo "user=`eurodb FE_GenesysUsername`&passwordhex=`eurodbEnc FE_GenesysPassword 0`&encK=`eurodbEnc FE_GenesysEncKey 32`&encIV=`eurodbEnc FE_GenesysEncIV 64`&fatenc=`eurodbEnc FE_GenesysFatEnc 96`&spinkey=`systools/spinkey`"
}

function readACCESS()
{
  tag  user `eurodb FE_GenesysUsername`
  tag  passwordhex `eurodbEnc FE_GenesysPassword 0`
  tag  encK `eurodbEnc FE_GenesysEncKey 32`
  tag  encIV `eurodbEnc FE_GenesysEncIV 64` 
  tag  fatenc `eurodbEnc FE_GenesysFatEnc 96`
}

function save_eurodbEnc() # varname value key_offset
{
  a="$2"
  k=`hexdump -s$3 -v -e '1024/1 "%02x"' $ENCFILE`
  save_eurodb $1 "$(xor $a $k)"
}

function save_eurodb() # varname value
{
  systools/set_eurodb_config_val $1 string "$2"
}

#function saveACCESS()
#{
##  save_eurodb FE_GenesysPassword `get_text "$1" password | hexdump -ve '1024/1 "%02x"'` 0
#  save_eurodb FE_GenesysUsername "$1"
#  save_eurodbEnc FE_GenesysPassword `get_text "$2" password` 128
#  save_eurodbEnc FE_GenesysEncKey   `get_text "$2" encK` 160
#  save_eurodbEnc FE_GenesysEncIV    `get_text "$2" encIV` 192
#  save_eurodbEnc FE_GenesysFatEnc   `get_text "$2" fatenc` 224
#}

function saveACCESS()
{
#  save_eurodb FE_GenesysPassword `get_text "$1" password | hexdump -ve '1024/1 "%02x"'` 0
  save_eurodb FE_GenesysUsername "$1"
  save_eurodb FE_GenesysPassword `get_text "$2" password`
  save_eurodb FE_GenesysEncKey   `get_text "$2" encK`
  save_eurodb FE_GenesysEncIV    `get_text "$2" encIV`
  save_eurodb FE_GenesysFatEnc   `get_text "$2" fatenc`
}

function curl_error
{
  echo -e "<HSREQ>\n  <ESITO>ERRORE</ESITO>\n  <DESCRIZIONE>$1</DESCRIZIONE>\n</HSREQ>"
}

function send_fat() # id
{
  FILENAME=`sql "SELECT filename FROM customer_invoices WHERE id='$1'"`
  echo "sending invoice $FILENAME" | log
  if [ ! -e $INVOICEDIR/$FILENAME ]
  then
    echo "invoide $FILENAME not found" | log
    sql "UPDATE customer_invoices SET progress='sending,action_needed', result='<Error>File xml non trovato</Error>' WHERE id=$1"
    return 1
  fi
   echo curl $CURL_TIMEOUTS -sS -d request=TX-FATEL -d "`ACCESS`"  -d @$TMPFILE $debug "$WS" | log
  (echo "fe="; cat $INVOICEDIR/$FILENAME | $BASE64 -w0 | sed 's/\+/%2B/g') >$TMPFILE
#  cat $TMPFILE | log
  RES=$(curl $CURL_TIMEOUTS -sS -d request=TX-FATEL -d "`ACCESS`"  -d @$TMPFILE $debug "$WS" 2>$TMPLOG)
  if [ $? -ne 0 ] 
  then
    cat $TMPLOG | log "CURL ERROR "
    descr=`echo -n "CURL ERROR $? "; cat $TMPLOG`
    curl_error "$descr"
    descr_safe=`escape_sql "$descr"`
    rm $TMPFILE
    rm $TMPLOG
    sql "UPDATE customer_invoices SET progress='sending,action_needed', result='<Error>$descr_safe</Error>' WHERE id=$1"
    return 1 
  fi
  rm $TMPFILE
  rm $TMPLOG 
#  XML=`echo "$RES" | $XMLLINT --noblanks - | tr -d '\n'`
  XML=`echo "$RES" | tr -d '\n'`
  echo "$XML" | log
  ESITO=`get_text_sqlsafe "$XML" ESITO`
#  echo esito: $ESITO; 
  if [ "$ESITO" = "OK" ]
  then
    idfattura_safe=`get_text_sqlsafe "$XML" MESSAGGIO idfattura`
    sql "UPDATE customer_invoices SET status='sent', progress='processing', idfattura='$idfattura_safe', result=NULL WHERE id=$1"
    force_refresh_status
  elif [ "$ESITO" = "DISCARD" ]
  then
    descr_safe=`get_text_sqlsafe "$XML" DESCRIZIONE`
#    echo "descr: $descr"
    sql "UPDATE customer_invoices SET status='discard', progress='action_needed', result='<Error>$descr_safe</Error>', lastChecked=NOW() WHERE id=$1"
  elif [ "${ESITO:0:5}" = "ERROR" ]
  then
    descr_safe=`get_text_sqlsafe "$XML" DESCRIZIONE`
#    echo "descr: $descr"
    sql "UPDATE customer_invoices SET status='access_error', progress='sending,action_needed', result='<Error>$descr_safe</Error>', lastChecked=NOW() WHERE id=$1"
  else
    echo "send_fat strange esito $XML" | log
    sql "UPDATE customer_invoices SET progress='sending,action_needed',result='$esito', lastChecked=NOW() WHERE id=$1"
    return 1
  fi
  return 0
}

function search_fat_to_send()
{
  INVOICES=`sql "SELECT id 
     FROM customer_invoices 
     WHERE status='to_send' 
        OR (status='access_error' AND lastChecked < (NOW() - INTERVAL $RETRY_ACCESS_ERROR SECOND) ) 
     ORDER BY id DESC"`
  echo "$INVOICES" | log "invoices to send: "
  for i in $INVOICES
  do
    echo sending fat $i | log
    send_fat $i
    if [ -f $NOSLEEP ]; then break; fi
    sleep 5
  done
}

function check_fat_for_timeout()
{
  sql "UPDATE customer_invoices 
          SET progress=CONCAT_WS(',', progress, 'action_needed')
       WHERE status='to_send' AND created < (NOW() - INTERVAL $SEND_TIMEOUT_ERROR SECOND)
       "
}

function check_fat() #idfattura
{
  idfattura=`echo "$1" | sed 's/[^0-9-]//g'`
  if [ ! "$idfattura" ] 
  then
    idfattura=-1
  fi
  sql "UPDATE customer_invoices SET lastChecked=NOW() WHERE idfattura='$idfattura'"
  echo checking_fat $idfattura | log
  RES=$(curl $CURL_TIMEOUTS -sS -d request=TX-FATELMSG -d "`ACCESS`" -d idfattura=$idfattura $debug "$WS" 2>$TMPLOG)
  if [ $? -ne 0 ] 
  then
    cat $TMPLOG | log "CURL ERROR "
    descr=`echo -n "CURL ERROR $? "; cat $TMPLOG`
    curl_error "$descr"
    descr_safe=`escape_sql "$descr"`
    rm $TMPLOG
 #   sql "UPDATE customer_invoices SET result='<Error>$descr_safe</Error>' WHERE idfattura=$idfattura"
    return 1 
  fi
  rm $TMPLOG
#  XML=`echo "$RES" | $XMLLINT --noblanks - | tr -d '\n'`
  XML=`echo "$RES" | tr -d '\n'`
  echo "$XML" | log
  echo "$XML"
  ESITO=`get_text_sqlsafe "$XML" ESITO`
# echo esito: $ESITO; 
  if [ "$ESITO" = "OK" ]
  then
#    msg=`get_text "$XML"  MESSAGGIO base64 | base64 -d`
    msg=`get_text "$XML"  SpinTec messageSDI | $BASE64 -d`
    echo $msg | log "message is "
    errori_safe=`get_text_sqlsafe "$msg" ListaErrori`
    descrizione_safe=`get_text_sqlsafe "$msg" Descrizione`
    if [ "$errori_safe" ] 
    then
      errori_safe="<ListaErrori>$errori_safe</ListaErrori>";
      echo "$errori_safe" | log "lista errori: "
    elif [ "$descrizione_safe" ]
    then
      errori_safe="<Error>$descrizione_safe</Error>"
      echo "$errori_safe" | log "messaggio: "
    fi
    stat_safe=`get_text_sqlsafe "$XML" SpinTec status`
    progress_safe=`get_text_sqlsafe "$XML" SpinTec progress`
    sql "UPDATE customer_invoices SET status='$stat_safe', progress='$progress_safe', result='$errori_safe' WHERE idfattura='$idfattura'"
  elif [ "${ESITO:0:5}" = "ERROR" ]
  then
    descr_safe=`get_text_sqlsafe "$XML" DESCRIZIONE`
#    echo "descr: $descr_safe"
    sql "UPDATE customer_invoices SET result='<Error>$descr_safe</Error>' WHERE idfattura='$idfattura'"
  elif [ "$ESITO" = "NOMESSAGE" ] 
  then
    true
    #no action
  else
    echo "check_fat strange esito $XML" | log
    sql "UPDATE customer_invoices SET result='$esito' WHERE idfattura=$idfattura"
    return 1
  fi
  return 0
}

function check_access()
{
  CURL_TIMEOUTS=$CURL_TIMEOUTS_CHECK_ACCESS 
  RES=`check_fat -2`
  ESITO=`get_text_sqlsafe "$RES" ESITO`
  case "$ESITO" in
    OK|NOMESSAGE) 
      echo -e "<HSREQ>\n  <ESITO>OK</ESITO>\n</HSREQ>"
      return 0
      ;;
    *) echo "$RES" | xmllint --format -
       return 1
  esac
}


function check_passive() 
{
  [ -d "$PASSIVEDIR" ] || return 1
  lsb_release -a 2>/dev/null | grep -qi "Ubuntu" || return 1 # must be ubuntu
  uname -a 2>/dev/null | grep -qi "_64" || return 1 # must be 64 bit
  
  FROM=`cat "$LAST_PASSIVE_DATE" 2>/dev/null`
  UX=`date -d "${FROM:6:4}-${FROM:3:2}-${FROM:0:2}" +%s`
  [ "$FROM" ] && START="-d starttime=$(($UX - 60 * 60 * 24 * 10)) # per sicurezza cerchiamo da 10 giorni prima"
  echo "checking passive from $FROM start=$START" | log
  RES=$TMP/passive_list.xml
  RESFAT=$TMP/passive_fat.xml
  curl $CURL_TIMEOUTS -sS -d request=TX-FATELPASS -d "`ACCESS`" $START "$WS" $debug 2>$TMPLOG >$RES
# echo "curl --max-time 4 --connect-timeout 2 -sS -d request=TX-FATELPASS -d \"`ACCESS`\" -d from=\"$FROM\" \"$WS\" -d debug=1 "
  if [ $? -ne 0 ] 
  then
    cat $TMPLOG | log "CURL ERROR "
    descr=`echo -n "CURL ERROR $? "; cat $TMPLOG`
    curl_error "$descr"
    descr_safe=`escape_sql "$descr"`
    rm $TMPLOG
    return 1 
  fi
  N=0
  get_text_from_xmlfile "$RES" MESSAGGIO | while read X
  do
#    echo "dostal jsem $X"
    FNAME=`get_text "$X" nomeFile`
    DATE=`get_text "$X" dataora`
    YEAR=${DATE:6:4}
    ID=`get_text "$X" idfattura`
#    echo "fname=$FNAME, YEAR=$YEAR, id=$ID, $DATE"
    [ -f "$PASSIVEDIR/$YEAR/$FNAME" ] && continue;
    [ $N -lt $MAX_PASSIVE_DOWNLOAD ] || return 2
    N=$((N+1))
    echo "downloading passive invoice $DATE $YEAR/$FNAME" | log
    curl $CURL_TIMEOUTS -sS -d request=TX-FATELPASS -d "`ACCESS`" -d idfattura=$ID "$WS" $debug 2>$TMPLOG >$RESFAT
  # echo "curl --max-time 4 --connect-timeout 2 -sS -d request=TX-FATELPASS -d \"`ACCESS`\" -d idfattura=$idfattura "$WS" -d debug=1 " | log
    if [ $? -ne 0 ] 
    then
      cat $TMPLOG | log "CURL ERROR "
      descr=`echo -n "CURL ERROR $? "; cat $TMPLOG`
      curl_error "$descr"
      descr_safe=`escape_sql "$descr"`
      rm $TMPLOG $RES $RESFAT
  #   sql "UPDATE customer_invoices SET result='<Error>$descr_safe</Error>' WHERE idfattura=$idfattura"
      return 1 
    fi
    ESITO=`get_text_from_xmlfile "$RESFAT" ESITO`
    if [ "$ESITO" != "OK" ]
    then 
      rm $TMPLOG $RES $RESFAT
      break
    fi
    FNAME=`get_text_from_xmlfile "$RESFAT" "MESSAGGIO->nomeFile"`
    DATE=`get_text_from_xmlfile "$RESFAT" "MESSAGGIO->dataora"`
    YEAR=${DATE:6:4}
    [ -d "$PASSIVEDIR/$YEAR" ] || ( rm -f "$PASSIVEDIR/$YEAR"; mkdir "$PASSIVEDIR/$YEAR" )
    get_text_from_xmlfile "$RESFAT" "MESSAGGIO->base64" | $BASE64 -d > $TMP/fat.xml
    mv -f $TMP/fat.xml "$PASSIVEDIR/$YEAR/$FNAME"
    echo "$DATE" > "$LAST_PASSIVE_DATE"
  done
  RETVAL=$?
  rm -f $TMPLOG $RES $RESFAT
  [ "$RETVAL" -eq 2 ]
}

export NEXT_CHECK_PASSIVE=0
function try_check_passive()
{
  if [ `date +%s` -lt $NEXT_CHECK_PASSIVE ]
  then
     return
  fi
  if check_passive
  then
    echo "planing  15 minutes" | log
    NEXT_CHECK_PASSIVE=$(( `date +%s` + $CHECK_PASSIVE_PERIOD_WITH_DOWNLOAD ))
  else
    echo "planing  60 minutes" | log
    NEXT_CHECK_PASSIVE=$(( `date +%s` + $CHECK_PASSIVE_PERIOD ))
  fi
}

function search_fat_to_check()
{
  INVOICE=`sql "SELECT idfattura FROM customer_invoices WHERE FIND_IN_SET('processing',progress)>0 AND lastChecked < (NOW() - INTERVAL $CHECK_PERIOD SECOND) ORDER BY lastChecked ASC LIMIT 1"`
  [ "$INVOICE" ] || return
  echo "$INVOICE" | log "invoice to be checked: "
  check_fat $INVOICE >/dev/null
}

function daemon()
{
# fixme - check if it's already running
  echo $$ > $DAEMON_PID
  while true
  do
    search_fat_to_send
    search_fat_to_check
    try_check_passive
    check_fat_for_timeout
    refresh_status
#    echo 'sleeping'
    rm -f $NOSLEEP
    for ((i=0; i<$SLEEP; i++))
    do
      sleep 1
      if [ -f $NOSLEEP ]; then break; fi
    done
#    echo 'sleep over'
  done
}

function wakeup()
{
  echo $1 >$NOSLEEP
#  kill -SIGINT `cat $DAEMON_PID`
}

function retry_now()
{
  sql "UPDATE customer_invoices SET lastChecked='2000-00-00' WHERE status='access_error'"
  wakeup
}

function enckey()
{
  k=`hexdump -s$2 -ve '1024/1 "%02x"' $ENCFILE`
  xor $1 $k
}
function get_access_keys()
{
  username="$2"
  echo "getting access keys $1 $2 $3" | log
  RES=$(curl $CURL_TIMEOUTS -sS -d request=GET-ACCESS-KEYS -d spinkey_nr="`systools/spinkey`" -d vatnr="$1" -d user="$2" "$WS" 2>$TMPLOG)
  curl_result=$?
#  echo "$RES" | log
  if [ $curl_result -ne 0 ] 
  then
    cat $TMPLOG | log "CURL ERROR "
    curl_error `cat $TMPLOG`
    rm $TMPLOG
    return 1
  fi
  rm $TMPLOG
  esito=`get_text "$RES" ESITO`
  if [ "$esito" != OK ]
  then 
    echo "$RES" 
    return 1
  fi
#  enc=`get_text "$RES" ENCRYPTED`
#  if [ "$enc" != 1 ]
#  then
    RES=$(
      echo "<HSREQ>"
      echo "  <ESITO>OK</ESITO>"
#      pwd=`get_text "$RES" password | hexdump -ve '1024/1 "%02x"'`
#      pwd=`get_text "$RES" password`
#      tag password "`enckey $pwd 0`"

      OFF=128
      for i in password encK encIV fatenc
      do
        f=`get_text "$RES" $i`
        tag $i `enckey $f $OFF`
        OFF=$(( $OFF + 32 ))
      done
      echo "</HSREQ>"
    )
#  fi
  saveACCESS $username "$RES"
#  echo "$RES"
  return 0
}

function read_access_keys()
{ 
  echo "<HSREQ>"
  echo "  <ESITO>OK</ESITO>"
  RES=`readACCESS`
  echo "$RES"
  pwdhex=`get_text "$RES" passwordhex`
  tag password "`hex2bin $pwdhex`"
  echo "</HSREQ>"
} 

function is_online()
{
  RES=$(curl $CURL_TIMEOUTS -sS "$TEST_ONLINE" 2>$TMPLOG | grep -q "$STRING_TEST_ONLINE")
}

function get_status()
{
  echo "getting status $1" | log
  RES=$(curl $CURL_TIMEOUTS -sS -d request=GET-STATUS -d year="$1" -d `ACCESS` "$WS" 2>$TMPLOG)
  if [ $? -ne 0 ] 
  then
    cat $TMPLOG | log "CURL ERROR "
    rm $TMPLOG
    return 1
  fi
  echo "$RES"
  rm $TMPLOG
  return 0
}

STATUS_COUNTER=99999

function force_refresh_status()
{
  STATUS_COUNTER=99999
  refresh_status
}

function refresh_status()
{
  if is_online
  then
    sql "UPDATE fatel_status SET online=1"
  else
    sql "UPDATE fatel_status SET online=0"
  fi
  STATUS_COUNTER=$(($STATUS_COUNTER+1))
  if [ $STATUS_COUNTER -lt 10 ] 
  then
    return
  fi
  STATUS_COUNTER=0
  RES=`get_status`
  if [ $? -ne 0 ]
  then
    sql "UPDATE fatel_status SET online=0"
    return
  fi
  
  F=""
  MSG=`get_text "$RES" MESSAGGIO`
  for i in status limit_counter message invoices space count_active size_active count_passive size_passive grace_days
  do
    v=`get_text_sqlsafe "$MSG" $i`
    F="$F, $i='$v'"
  done
  sql "REPLACE INTO fatel_status SET id=1, online=1$F"
}


#initial cleanup of old temporary files .....
  find /tmp -type f -iname "fe_send_tmp*" -mmin +60 -exec rm -f {} \;

case $1 in
  daemon) daemon    ;;
  wakeup) wakeup $2 ;;
  retry_now) retry_now ;;
  get_access_keys) get_access_keys "$2" "$3" "$4" && read_access_keys ;;
  read_access_keys) read_access_keys ;;
  get_status) get_status $2 ;;
  check_access) check_access ;;
  
# test commands  
  send_fat) send_fat $2 ;;
  check_fat) check_fat $2 ;; 
  check_passive) check_passive $2 ;;
  refresh_status) refresh_status ;;
  get_status) get_status ;;
  access) ACCESS ;;
esac
retval=$?
rm -f $TMPLOG 
rm -rf $TMP
exit $retval
