#!/bin/sh
#### DISCONTINUED USE WITH MIGRATION TO systemd STARTUP. HERE ONLY FOR REFERENCE.
# Start/stop/restart pdinrs.
#chkconfig: 2345 99 09
#description: PDI NOAAPort Receive Software
# Copyright 1998-2022 Stonie R. Cooper
# Licensed under the auspices of GPLv3
# See top-level copyright disclaimer (COPYRIGHT) and license (LICENSE)


MODEMLIST="digicast skystream ipricot novra"

if [ -r "/etc/pdinrs/modem.list" ]; then
  MODEMLIST=`cat /etc/pdinrs/modem.list | grep -v "^#"`
fi

if [ -z "${MODEMLIST}" ]; then
  MODEMLIST="skystream ipricot digicast novra"
fi

start_modems() {
  FIRSTHIT="0"
  for EACHMODEM in `echo "${MODEMLIST}"`
  do
    if [ "${FIRSTHIT}" -eq 0 -a -r "/etc/pdinrs/${EACHMODEM}" ]; then
      FIRSTHIT="1"
      TYPE="${EACHMODEM}"
    fi
  done

  if [ "${FIRSTHIT}" -ne 0 ]; then
    DEVICE=`grep "^DEVICE=" /etc/pdinrs/${TYPE} | awk -F"=" '{print $2}'`
    LOGFILE=`grep "^LOGFILE=" /etc/pdinrs/${TYPE} | awk -F"=" '{print $2}'`
    if [ -n "${DEVICE}" ]; then
      for EACHBUFFERCONFIGFILE in `ls /etc/pdinrs/*buffer.config`
      do
        ORIGINALDEVICE=`grep "monitor_and_control_port=" ${EACHBUFFERCONFIGFILE} | grep -v "#" | grep -v grep | awk -F"=" '{print $2}'`
        sed -e "s/monitor_and_control_port=${ORIGINALDEVICE}/monitor_and_control_port=${DEVICE}/g" ${EACHBUFFERCONFIGFILE} > /tmp/buffer.config; mv /tmp/buffer.config ${EACHBUFFERCONFIGFILE}
        chown pdinrs:pdi ${EACHBUFFERCONFIGFILE}
      done
    fi
  fi

  chown -R pdinrs:pdi /etc/pdinrs

  if [ -x "/usr/bin/${TYPE}.monitor" ]; then
    su - pdinrs -c "/usr/bin/${TYPE}.monitor > ${LOGFILE} 2>&1 &" < /dev/null >& /dev/null &
  fi
}

start_pdinrsd() {
  if [ -x /usr/bin/pdinrsd ]; then
    for eachPDINRSD in `ls /etc/pdinrs/pdinrsd?.start 2> /dev/null`
    do
      su - pdinrs -c "`cat ${eachPDINRSD}` > /dev/null 2>&1" < /dev/null >& /dev/null &
    done
  fi
}

stop_modems() {
  for EACHPROCESS in `echo "${MODEMLIST}"`
  do
    boolean=`ps -elf | grep "${EACHPROCESS}.monitor" | grep -v grep | awk -F" " '{print $2}'`
    if [ -n "${boolean}" ]; then
      killall -9 ${EACHPROCESS}.monitor > /dev/null 2>&1
    fi
    boolean=`ps -elf | grep "reset.${EACHPROCESS}" | grep -v grep | awk -F" " '{print $2}'`
    if [ -n "${boolean}" ]; then
      killall -9 reset.${EACHPROCESS} > /dev/null 2>&1
    fi
  done
}

stop_pdinrsd() {
  for EACHPROCESS in `echo "pdinrsd digicastlogger"`
  do
    boolean=`ps -elf | grep "${EACHPROCESS}" | grep -v grep | awk -F" " '{print $2}'`
    if [ -n "${boolean}" ]; then
      killall -9 ${EACHPROCESS} > /dev/null 2>&1
    fi
  done
}

# Start pdinrs:
pdinrs_start() {
  if [ ! -d /var/log/pdinrs ]; then
    mkdir -p /var/log/pdinrs
  fi
  chown -R pdinrs:pdi /var/log/pdinrs
  rm -rf /var/log/pdinrs/*
  if [ -r /etc/pdinrs/pdinrs.start ]; then
    start_modems
    start_pdinrsd
    if [ -x /usr/bin/pdinrs ]; then
      su - pdinrs -c "`cat /etc/pdinrs/pdinrs.start`" < /dev/null >& /dev/null &
    fi
  fi
  rm -f /tmp/agedata* /tmp/cleanup*
}

# Stop pdinrs:
pdinrs_stop() {
  if [ -r /etc/pdinrs/pdinrs.stop ]; then
    if [ -x /usr/bin/pdinrs ]; then
      su - pdinrs -c "`cat /etc/pdinrs/pdinrs.stop`" < /dev/null >& /dev/null &
    fi
    stop_modems
    stop_pdinrsd
  fi
}

# Restart pdinrs:
pdinrs_restart() {
  stop_pdinrsd
  stop_modems
  su - pdinrs -c "/usr/bin/pdinrs -r" < /dev/null >& /dev/null &
  start_pdinrsd
  start_modems
}

case "$1" in
'start')
  pdinrs_start
  ;;
'stop')
  pdinrs_stop
  ;;
'restart')
  pdinrs_restart
  ;;
*)
  echo "usage $0 start|stop|restart"
esac
