#!/bin/sh
##########################################
#             simthefon.sh               #
#                                        #
#  simulate an active LaFonera with an   #
# alternative firmware on maps.fon.com   #
#                                        #
#         First version made by          #
#    fon.freddy.eu.org@freddy.eu.org     #
#       http://fon.freddy.eu.org/        #
#                                        #
#          modified by futejia           #
#        futejia.blog@gmail.com          #
#      http://futejia.blogspot.com/      #
#                                        #
# updated to work on dd-wrt (2007-02-02) #
#     http://www.krikkit.net/contact     #
#                                        #
#      made it working (2007-02-05)      #
#         MailTo ben@wildblue.de         #
#                                        #
#  A step by step guide is available at  #
# www.wildblue.de/fonera/heartbeat/howto #
#                                        #
##########################################
#  version 2.0.0 (modified for DD-WRT)   #
#  version 2.0.1 (autodetection MAC)     #
#  version 2.0.2 (added cron mode)       #
#  version 2.0.3 (changed MAC-retrival)  #
#  version 2.0.4 (changed update freq.)  #
##########################################
echo "***********************************************************"
echo "* simthefon - heartbeat script for the LaFonera           *"
echo "* This script makes your LaFonera active on maps.fon.com  *"
echo "*                                                         *"
echo "* Version 2.0.4                                           *"
echo "* This Version made by ben@wildblue.de                    *"
echo "***********************************************************"

WLMAC="$(nvram get ath0_hwaddr )" #the WLAN mac-adress
MAC="$(nvram get et0macaddr)" #the WAN mac-adress
FONREV=2
FIRMWARE=0.7.1
FONKEY=/tmp/simthefon/key #the path to the fon-public-key
DEVICE="fonera"
CHILLVER="1.0"
THCLVER="1.0"

echo
echo "Your WLAN MAC is:    " $WLMAC
echo "Your Ethernet MAC is:" $MAC
echo

echo "* starting ..."
echo "mode='start' wlmac='$WLMAC' mac='$MAC' fonrev='$FONREV' firmware='$FIRMWARE' chillver='$CHILLVER' thclver='$THCLVER' device='$DEVICE'" | dbclient -T -p 1937 -i $FONKEY openwrt@download.fon.com > startscript

exec_every_mode () {
  echo "* making connection to fon"
  echo "mode='cron' wlmac='$WLMAC' mac='$MAC' fonrev='$FONREV' firmware='$FIRMWARE'" | dbclient -T -p 1937 -i $FONKEY  openwrt@download.fon.com > newscript
  if cat newscript | grep http > /dev/null 2>&1
  then
    echo "* downloading a new version"
    DWL_DATE=$(date +%Y%m%d-%H%M)
    FON_FILE=$DWL_DATE.fon
    wget -q -O $FON_FILE $(cat newscript | grep http | awk '{print $2}')
    rm newscript
    #begin untar package
    dd if=$FON_FILE of=VERSION_FILE bs=1 count=4 > /dev/null 2>&1
    VERSION=$(cat VERSION_FILE)
    rm VERSION_FILE
    dd if=$FON_FILE of=OFFSET_FILE bs=1 count=3 skip=4 > /dev/null 2>&1
    OFFSET=$(expr $(cat OFFSET_FILE))
    rm OFFSET_FILE
    dd if=$FON_FILE of=SIGNATURE_FILE bs=1 count=$OFFSET skip=7 > /dev/null 2>&1 
    rm SIGNATURE_FILE
    TO_SKIP=$(expr $OFFSET + 7)
    dd if=$FON_FILE of=tar_file bs=1 skip=$TO_SKIP > /dev/null 2>&1
    tar zx -f ./tar_file
    rm ./tar_file
    UPGRADE_FILE=$(cat upgrade | grep tar | awk '{print $3}')
    rm -f ./upgrade
    rm -f hotfix
    mkdir fon-firmware > /dev/null 2>&1
    tar xzf $UPGRADE_FILE -C fon-firmware/
    rm $UPGRADE_FILE
    #end untar package
    
    #begin get new versions
    FONREV=$(cat fon-firmware/etc/fon_revision)
    FIRMWARE=$(cat fon-firmware/etc/fon_version)
    echo "* Version is now $FIRMWARE, Revision is now $FONREV"
    #end get new versions
  else
    echo "* Can't find a new version";
  fi
}

exec_cron_mode () {
  echo "* Cron Mode - repeating must be done with a cronjob!"
  echo

  exec_every_mode

  exit
}

exec_standard_mode () {
  while true; do
    echo "* Standard mode - Repeating is done with a sleep command!"
    echo

    exec_every_mode

    RANDOM_S=$((0x$(head -c2 /dev/urandom | hexdump | awk '$2 > 0 {print $2}') % 1800))
    TIMTS=$(echo "`expr 1800 + $RANDOM_S`")

    echo "* going to sleep for $TIMTS seconds"
    sleep $TIMTS
  done;
  exit
}

case "$1" in
    cron)
      exec_cron_mode
      ;;
    *)
      exec_standard_mode
      exit
esac
