#!/bin/sh

. /etc/init.d/globals

# Camd-Fileflags
FLAGDIR="/var/etc"

F_OPENVPN=".openvpn"

F_DOSCAM=".doscam"
F_OSCAM=".oscam"
F_OSMOD=".osmod"
F_NCAM=".ncam"
F_MGCAMD=".mgcamd"
F_CCCAM=".cccam"
F_GBOX=".gbox"

doscam_action()
{
	case $1 in
		"start" )
			SHOWINFO "start camd_datefix"
			/etc/init.d/camd_datefix start doscam
			SHOWINFO "start doscam"
			/var/bin/doscam -b -w0
			if [ -e $FLAGDIR/$F_MGCAMD ]; then
				sleep 15
			fi
		;;
		"stop" )
			SHOWINFO "stop camd_datefix"
			/etc/init.d/camd_datefix stop doscam
			SHOWINFO "stop doscam"
			killall doscam
			sleep 1
			rm -rf /tmp/doscam.*
			rm -rf /tmp/ecm.info
		;;
		* )
			doscam_action "stop"
			sleep 1
			doscam_action "start"
		;;
	esac
}

oscam_action()
{
	case $1 in
		"start" )
			SHOWINFO "start camd_datefix"
			/etc/init.d/camd_datefix start oscam
			SHOWINFO "start oscam"
			/var/bin/oscam -b
			if [ -e $FLAGDIR/$F_MGCAMD ]; then
				sleep 15
			fi
		;;
		"stop" )
			SHOWINFO "stop camd_datefix"
			/etc/init.d/camd_datefix stop oscam
			SHOWINFO "stop oscam"
			killall oscam
			sleep 1
			rm -rf /tmp/oscam.*
			rm -rf /tmp/ecm.info
		;;
		* )
			oscam_action "stop"
			sleep 1
			oscam_action "start"
		;;
	esac
}

osmod_action()
{
	case $1 in
		"start" )
			SHOWINFO "start camd_datefix"
			/etc/init.d/camd_datefix start osmod
			SHOWINFO "start osmod"
			/var/bin/osmod -b
			if [ -e $FLAGDIR/$F_MGCAMD ]; then
				sleep 15
			fi
		;;
		"stop" )
			SHOWINFO "stop camd_datefix"
			/etc/init.d/camd_datefix stop osmod
			SHOWINFO "stop osmod"
			killall osmod
			sleep 1
			rm -rf /tmp/osmod.*
			rm -rf /tmp/ecm.info
		;;
		* )
			osmod_action "stop"
			sleep 1
			osmod_action "start"
		;;
	esac
}

ncam_action()
{
	case $1 in
		"start" )
			SHOWINFO "start camd_datefix"
			/etc/init.d/camd_datefix start ncam
			SHOWINFO "start ncam"
			/var/bin/ncam -b
			if [ -e $FLAGDIR/$F_MGCAMD ]; then
				sleep 15
			fi
		;;
		"stop" )
			SHOWINFO "stop camd_datefix"
			/etc/init.d/camd_datefix stop ncam
			SHOWINFO "stop ncam"
			killall ncam
			sleep 1
			rm -rf /tmp/ncam.*
			rm -rf /tmp/ecm.info
		;;
		* )
			ncam_action "stop"
			sleep 1
			ncam_action "start"
		;;
	esac
}

mgcamd_action()
{
	case $1 in
		"start" )
			SHOWINFO "start mgcamd"
			{ /var/bin/mgcamd; pzapit -rz; }  &
		;;
		"stop" )
			SHOWINFO "stop mgcamd"
			kill $( cat /tmp/mgcamd.pid )
			sleep 1
			rm -rf /tmp/mgstat.info
			rm -rf /tmp/mgshare.info
			rm -rf /tmp/ecm.info
			rm -rf /tmp/pid.info
			rm -rf /tmp/ca_cache.list
			rm -rf /tmp/cccam.info
			rm -rf /tmp/ecm.info
			rm -rf /tmp/mg.info
		;;
		* )
			mgcamd_action "stop"
			sleep 1
			mgcamd_action "start"
		;;
	esac
}

cccam_action()
{
	case $1 in
		"start" )
			SHOWINFO "start cccam"
			/var/bin/cccam &
			sleep 5
		;;
		"stop" )
			SHOWINFO "stop cccam"
			killall cccam
		;;
		* )
			cccam_action "stop"
			sleep 1
			cccam_action "start"
		;;
	esac
}

gbox_action()
{
	case $1 in
		"start" )
			SHOWINFO "start gbox"
			/var/bin/gbox &
			sleep 10
		;;
		"stop" )
			SHOWINFO "stop gbox"
			touch /tmp/gbox.kill
			sleep 1
			rm -rf /tmp/pid.info
			rm -rf /tmp/ecm.info
			rm -rf /tmp/gbox.pid
			rm -rf /tmp/gbox.ver
			rm -rf /tmp/gbox.kill
		;;
		* )
			gbox_action "stop"
			sleep 1
			gbox_action "start"
		;;
	esac
}

check_openvpn()
{
	if [ -e $FLAGDIR/$F_OPENVPN ]; then
		# wait i seconds for openvpn
		i=10
		while [ $i -gt 0 ]; do
			if pidof openvpn > /dev/null; then
				SHOWINFO "openvpn is started"
				i=-1 # leave loop
			else
				SHOWINFO "wait for openvpn ... $i"
				sleep 1
			fi
			i=$(($i-1))
			if [ $i = 0 ]; then
				SHOWINFO "continue without openvpn"
			fi
		done
	fi
}

camd_action()
{
	case $1 in
		"doscam")
			doscam_action $ACTION
		;;
		"oscam")
			oscam_action $ACTION
		;;
		"osmod")
			osmod_action $ACTION
		;;
		"ncam")
			ncam_action $ACTION
		;;
		"mgcamd")
			mgcamd_action $ACTION
		;;
		"cccam")
			cccam_action $ACTION
		;;
		"gbox")
			gbox_action $ACTION
		;;
		*)
			if [ -e $FLAGDIR/$F_DOSCAM ]; then
				doscam_action $ACTION
			fi

			if [ -e $FLAGDIR/$F_OSCAM ]; then
				oscam_action $ACTION
			fi

			if [ -e $FLAGDIR/$F_OSMOD ]; then
				osmod_action $ACTION
			fi

			if [ -e $FLAGDIR/$F_NCAM ]; then
				ncam_action $ACTION
			fi

			if [ -e $FLAGDIR/$F_MGCAMD ]; then
				mgcamd_action $ACTION
			fi

			if [ -e $FLAGDIR/$F_CCCAM ]; then
				cccam_action $ACTION
			fi

			if [ -e $FLAGDIR/$F_GBOX ]; then
				gbox_action $ACTION
			fi
		;;
	esac
}

case $1 in
	"start")
		ACTION="start"
		check_openvpn
		camd_action $2
	;;
	"stop")
		ACTION="stop"
		camd_action $2
	;;
	*)
		ACTION="restart"
		camd_action $2
	;;
esac