#!/bin/sh

. /etc/init.d/globals

# Camd-Fileflags
FLAGDIR="/var/etc"
F_MGCAM=".mgcamd"
F_DOSCAM=".doscam"
F_OSCAM=".oscam"
F_OSMOD=".osmod"
F_NCAM=".ncam"
F_CCCAM=".cccam"
F_GBOX=".gbox"

MGCAM_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
		;;
		* )
			MGCAM_Action "stop"
			sleep 1
			MGCAM_Action "start"
		;;
	esac
}

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_MGCAM ]; 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_MGCAM ]; 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_MGCAM ]; 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_MGCAM ]; 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
}

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
}

CAMD_Action()
{
	case $1 in
		"mgcamd")
			MGCAM_Action $ACTION
		;;
		"doscam")
			DOSCAM_Action $ACTION
		;;
		"oscam")
			OSCAM_Action $ACTION
		;;
		"osmod")
			OSMOD_Action $ACTION
		;;
		"ncam")
			NCAM_Action $ACTION
		;;
		"cccam")
			CCCAM_Action $ACTION
		;;
		"gbox")
			GBOX_Action $ACTION
		;;
		*)
			if [ -e $FLAGDIR/$F_MGCAM ]; then
				MGCAM_Action $ACTION
			fi

			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_CCCAM ]; then
				CCCAM_Action $ACTION
			fi

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

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