#! /bin/sh

me=`basename $0`

export TWINTACT_ADDRESS="169.254.0.2"
export TWINTACT_BIND="169.254.0.1"
export TWINTACT_PORT="2222"
export TWINTACT_SHARE="/usr/local/share/twintact"

OMAPTTPATH="/usr/local/libexec/omap-tt"
OMAPTTBIN="omap-tt"
OMAPTT="$OMAPTTPATH/$OMAPTTBIN"

LOG='/dev/null'
DEBUGFILE="twintact.log"

if [ -n "${DEBUG_TT_UDEV}" ]; then
	LOG="/tmp/$DEBUGFILE"
	if [ "${DEBUG_TT_UDEV}" == "trace" ]; then
		LOG="$LOG.$$"
	else
		touch -d "10 seconds ago" "$LOG.tmp"
		[ "$LOG.tmp" -nt "$LOG" ] && rm -f "$LOG"
		rm -f "$LOG.tmp"
	fi
	(
		echo "-`date`---------------------------------"$$
		echo env
		env
		echo "-`date`---------------------------------"$$
		echo set
		set
		echo "-`date`---------------------------------"$$
	) >>$LOG
fi

MODE="$1"
case "${ACTION}_${MODE}" in
	add_omap)
		lockme="/var/run/$me.lck"
		
		logger -i -p kern.debug -t TwinTact "Lock sur le TwinTact"
		# On ne désire pas être exécuté plusieurs fois d'un coup
		if lockfile -r 0 -s 1 -l 20 "$lockme" ; then
			if [ -x "$OMAPTT" ]; then
				logger -i -p kern.info -t TwinTact "Connection TT OMAP"
				cd "$OMAPTTPATH"
				export PATH="$OMAPTTPATH:$PATH"
				$OMAPTTBIN hook.bin >>$LOG 2>&1
				logger -i -p kern.info -t TwinTact "Transfert avec le TwinTact terminé (ret=$?)"
			else
				logger -i -p kern.info -t TwinTact "Connection TT OMAP disponible mais TT OMAP n'est pas installé"
			fi
		fi
		;;
		
	remove_omap)
		logger -i -p kern.info -t TwinTact "TT OMAP déconnecté" ;;
	
	add_synchro_net)
		if [ "$PHYSDEVDRIVER" == "zaurus" ]; then
			(
			# Attendre que NetworkManager fasse sa sauce s'il est chargé
			pgrep NetworkManager >/dev/null 2>&1 && sleep 1
			
			# Mettre à jour le fichier host pour désigner le twintact
			if grep -Eq "^${TWINTACT_ADDRESS}.*twintact" /etc/hosts ; then
				grep -Ev "^${TWINTACT_ADDRESS}.*twintact" /etc/hosts >/etc/hosts.$me-tmp
			else
				cp -a /etc/hosts /etc/hosts.$me-tmp
			fi
			echo -e "${TWINTACT_ADDRESS}\ttwintact" >>/etc/hosts.$me-tmp
			mv -f /etc/hosts /etc/hosts.$me-bak
			mv -f /etc/hosts.$me-tmp /etc/hosts
			
			# On redirige plutôt la sortie vers /dev/null à cause de selinux
			/sbin/ifconfig $INTERFACE $TWINTACT_BIND
			
			# Si la clé privée spécifiée existe l'utiliser pour ce connecter
			# au TwinTact pour exécuter quelques commandes utiles
			if [ -e "${TWINTACT_SHARE}/id_dsa" -a -x "${TWINTACT_SHARE}/synchro_net.sh" ]; then
				"${TWINTACT_SHARE}/synchro_net.sh" >>$LOG 2>&1
				[ "$?" -eq 0 ] && logger -i -p kern.info -t TwinTact "TwinTact synchro_net effectuée (ret=$?)"
			fi
			
			logger -i -p kern.info -t TwinTact "TwinTact disponible à l'adresse ${TWINTACT_ADDRESS} sur $INTERFACE"
			) &
		else
			logger -i -p kern.debug -t TwinTact "TwinTact, rien à ajouter pour $PHYSDEVDRIVER"
		fi
		;;
		
	remove_synchro_net)
		if [ "$PHYSDEVDRIVER" == "zaurus" ]; then
			/sbin/ifconfig $INTERFACE down
			[ -s "/etc/hosts.$me-bak" ] && mv -f "/etc/hosts.$me-bak" /etc/hosts
			logger -i -p kern.info -t TwinTact "TwinTact sur $INTERFACE déconnecté"
		else
			logger -i -p kern.debug -t TwinTact "TwinTact, rien à enlever pour $PHYSDEVDRIVER"
		fi
		;;

	*)
		command=''
		[ -n "$*" ] && command=" avec l'action '$ACTION' pour le mode '$MODE'"
		logger -i -p kern.notice -t TwinTact "TwinTact, rien à faire$command"
		;;
esac

exit 0
