#!/bin/bash -p 
# chkconfig: 2345 99 99
# Description:  Sangoma Transcoding Server Control
#
# copyright	(c) 2010, Sangoma Technologies Inc.
#
#		This program is free software; you can redistribute it and/or
#		modify it under the terms of the GNU General Public License
#		as published by the Free Software Foundation; either version
#		2 of the License, or (at your option) any later version.
# ==========================================================================    

cmd=$1;

cnt=0;
max_retry=10;
LOG=/var/log/sngtc_server.log
SIG_LOG=$LOG
PROD="sngtc_server"
sigd=sngtc_server
SMG_CONF=/etc/smg/sangoma-media-gateway.conf

function usage()
{
	echo " "
	echo "Usage: $PROD <command>"
	echo
	echo "commands:"
	echo " "
	echo "  start       :start $sigd"
	echo "  stop        :stop $sigd"
	echo "  restart     :restart $sigd"
	echo " "

	return 1
}

logit()
{
 	local data="$1"

	echo "$PROD: $data"
	echo "$PROD: $data" >> $LOG
}   

function stop_all()
{

	echo " "
	logit "Stopping $PROD"
	
	stop_safe_sangoma
	stop_sigdaemon

	remove_pid_files
}

function stop_sigdaemon()
{
	eval "pidof $sigd >/dev/null 2>/dev/null"
	if [ $? -eq 0 ]; then
		echo -n "Sending TERM signal to $sigd..."
		eval "kill -TERM $(pidof $sigd) 2>/dev/null >/dev/null"
		if [ $? -eq 0 ]; then
			echo "OK"
		else
			echo "FAILED"
		    	logit "Failed to TERM $sigd"      
			break;
		fi
	fi
	for ((i=0;i<$max_retry;i++))
	do
		eval "pidof $sigd >/dev/null 2>/dev/null"
		if [ $? -ne 0 ]; then
			logit "$sigd is stopped"
			return;
		else
			logit "waiting for $sigd to finish($i/$max_retry)...."
			sleep 1
		fi
	done
	eval "pidof $sigd >/dev/null 2>/dev/null"
	if [ $? -eq 0 ]; then
		echo -n "Sending KILL signal to $sigd..."
		eval "kill -KILL $(pidof $sigd) 2>/dev/null >/dev/null"
		if [ $? -eq 0 ]; then
			echo "OK"
		else	
			echo "FAILED"
		    	logit "Failed to KILL $sigd"      
			break;
		fi
	fi
	for ((i=0;i<$max_retry;i++))
	do
		eval "pidof $sigd >/dev/null 2>/dev/null"
		if [ $? -ne 0 ]; then
			logit "$sigd is stopped"
			break;
		else
			logit "waiting for $sigd to finish ($i/$max_retry)...."
			sleep 1
		fi
	done
}

function stop_safe_sangoma()
{
	eval "killall safe_sngtc_server >/dev/null 2>/dev/null"
	if [ $? -eq 0 ]; then
		echo -n "Sending TERM signal to safe_sngtc_server..."
	else 
		logit "safe_sngtc_server not running..."
		return;
	fi
	sleep 1

	
	eval "killall safe_sngtc_server >/dev/null 2>/dev/null"
	if [ $? -eq 0 ]; then
		echo -n "Sending KILL signal to safe_sngtc_server..."
		eval "killall -9 safe_sngtc_server 2>/dev/null >/dev/null"
		if [ $? -eq 0 ]; then
			echo "OK"
		else 
			echo "FAILED"
			logit "Failed to stop safe_sngtc_server"
			return 1
		fi
	else
		echo "Ok"
	fi
}

function remove_pid_files()
{
	echo -n "Removing PID files..."
	if [ -e /var/run/$sigd.pid ]; then
		eval "rm -f /var/run/$sigd.pid > /dev/null"
		if [ $? -ne 0 ]; then
			echo " " 
			logit "Failed to remove /var/run/$sigd.pid, try to remove it manually"
		fi
	fi
	echo "done"
}

function start_all()
{
	start_sigd
	ret=$?
	return $ret
}

function start_sigd()
{
	check_sigd_running
	pre_args="";
	post_args="";
	echo " " 
	if [ $use_safe -eq 1 ]; then
		logit "Starting $PROD in safe mode ..."
	fi
	logit "Starting processes..."

	# if SMG transcoding server is available and enabled then use it
	if [ -f $SMG_CONF ]
	then
		. $SMG_CONF	
		if [ "$SMG_TRANSCODING_SERVER" = "YES" ]; then
			use_safe=1
			logit "Using SMG transcoding at $SMG_INSTALLDIR"
			export PATH="$SMG_INSTALLDIR/usr/sbin:$SMG_INSTALLDIR/usr/bin:$PATH"
			export LD_LIBRARY_PATH="$SMG_INSTALLDIR/usr/lib:$SMG_INSTALLDIR/usr/lib64:$LD_LIBRARY_PATH"
		fi
	fi

	echo -n "Starting $sigd..."
	if [ $use_safe -eq 1 ]; then
		pre_args=" safe_sngtc_server"
		post_args=" $sigd_safe_args"
	else 
		post_args=" $sigd_bg_args"
	fi

 	#echo "$pre_args $sigd $post_args >/dev/null 2>/dev/null &"
 	eval "$pre_args $sigd $post_args >/dev/null 2>/dev/null &"
	if [ $?	-eq 0 ]; then
		echo "OK"
	else 
		logit "Failed"
		logit "Failed to start $sigd, check $SIG_LOG for errors"
		return 1;
	fi
	sleep 2 
	if [ ! $(pidof $sigd) ]; then
		logit "$sigd failed to start"
		logit "check $SIG_LOG for errors"
		return 1;
	fi
		
	logit "Sangoma $sigd running.."
	logit "log file: $LOG"
	echo " "
	return 0

}

function check_sigd_running()
{
	local rc
	eval "pidof $sigd 2> /dev/null > /dev/null"
	rc=$?
	if [ $rc -eq 0 ]; then
		logit "$sigd is currently running"
		logit "exiting..."
		exit 0
	fi
	if [ -e /var/run/$sigd.pid ];then
		eval "rm -f /var/run/$sigd.pid >/dev/null 2>/dev/null";
	fi
	return 0

}

function check_pid_sigd()
{
	if [ ! $(pidof $sigd) ]; then
		logit "$sigd is not running"
		exit 1
	fi
	return 0
}

function parse_args()
{
	for arg in $args
	do
		case $arg in 
			nosyslog)
				use_syslog=0;
				;;
			safe)
				use_safe=1;
				;;
		esac

	done	
}

read_sngtc_conf ()
{
	
	WAN_HOME=/etc/sngtc
	WAN_CONF_DIR=$WAN_HOME
	META_SMG_CONF=$WAN_HOME/sngtc_server.rc

	# Read meta-configuration file.
	
	if [ -f $META_SMG_CONF ] 
	then . $META_SMG_CONF
	else
		logit	" $META_SMG_CONF not found !!!!"
		return 1 
	fi
	return 0
}

function init_sngtc_conf()
{
	SANGOMA_SAFE_MODE="YES"
}
######################
#main start here
######################

parse_args
init_sngtc_conf
read_sngtc_conf

while [ ! -z "$3" ]; 
do
	rgs=$args"$3 "
	shift
done

ret=0

if [ "$cmd" = "start" ] && [ "$SANGOMA_SAFE_MODE" = "YES" ]; then
  	cmd="safe_start"
fi

if [ "$cmd" = "start" ]; then
		start_all
		ret=$?
	if [ $ret -ne 0 ]; then
		stop_all
	fi
elif [ "$cmd" = "safe_start" ]; then
	use_safe=1
	start_all
	ret=$?
	if [ $ret -ne 0 ]; then
		stop_all
	fi
	ret=$?
elif [ "$cmd" = "stop" ]; then
	stop_all
	ret=$?
elif [ "$cmd" = "restart" ]; then
	stop_all
	if [ "$SANGOMA_SAFE_MODE" = "YES" ]; then
		use_safe=1
	fi
	start_all
	ret=$?
	if [ $ret -ne 0 ]; then
		stop_all
	fi
else 
   	logit "Error: Unsupported command $cmd for $PROD"
   	echo	
   	usage
   	exit 1
fi

exit $ret
