#!/usr/bin/env bash
#set -x

logdir="current_log"
mkdir -p "$logdir"

find_term() {
  # Find a terminal program and write to the global "terminal" variable
  local programs="urxvt xterm"
  local program
  for program in $programs; do
    terminal="$(which $program)"
    [ -n "$terminal" ] && return
  done

  # No terminal found
  echo "ERROR: Couldn't find terminal program! Looked for: $programs"
  exit 1
}

term() {
  title="$2"
  if [ -z "$title" ]; then
    title="$(basename $@)"
  fi
  exec $terminal -title "CN:$title" -e sh -c "$1; echo; while sleep 1; do echo 'q Enter to close'; read q_to_close; if [ \"x\$q_to_close\" = xq ]; then break; fi; done"
}

find_term

asan="$(ls -1 /usr/lib/x86_64-linux-gnu/libasan.so.* | tail -n 1)"
udtrace="/n/git/udtrace/libudtrace.so"
titan="/usr/lib/titan/libttcn3-dynamic.so"

#msc="gdb -ex run --args $(which osmo-msc)"
# To enable udtrace on osmo-msc MNCC socket, use this with adjusted /path/to/udtrace:
# - LD_PRELOAD of titan is needed if udtrace was compiled with titan support.
# - LD_PRELOAD of libasan allows building osmo-msc with the sanitize.opts.
# - the tee saves the stderr logging as well as the udtrace output to new file current_log/osmo-msc.out, since udtrace
#   will not show in osmo-msc.log
msc="LD_PRELOAD=$asan:$udtrace:$titan osmo-msc 2>&1 | tee -a current_log/osmo-msc.out"
#msc="osmo-msc"
mgw4msc="osmo-mgw -c osmo-mgw-for-msc.cfg"
#mgw4bsc="strace osmo-mgw -c osmo-mgw-for-bsc.cfg"
mgw4bsc="osmo-mgw -c osmo-mgw-for-bsc.cfg"
hlr="osmo-hlr"
stp="osmo-stp"
bsc="osmo-bsc"
bts="osmo-bts-virtual -c osmo-bts-virtual.cfg"
virtphy="LD_PRELOAD=$asan virtphy"
ms1="LD_PRELOAD=$asan mobile -c mobile.cfg"
ms2="LD_PRELOAD=$asan mobile -c mobile2.cfg"

SIPCON_SERVER="internal"

if [ "x$SIPCON_SERVER" != "xinternal" ]; then
  sipcon="osmo-sip-connector -c osmo-sip-connector.cfg"

  case "kamailio" in
    "kamailio")
      # Require kamailio (PATH hack is needed for Debian)
      kamailio="$(PATH="$PATH:/usr/sbin:/sbin" which kamailio)"
      if [ -z "$kamailio" ]; then
        echo "ERROR: kamailio is not installed."
        echo "After installing it, make sure that it does *not* run as daemon."
        exit 1
      fi
      kamailio="$kamailio -f kamailio.cfg -D -e -E"
      ;;
   "freeswitch")
      if [ -z "$(which freeswitch)" ]; then
        echo "ERROR: freeswitch is not installed."
        echo "Guide: https://freeswitch.org/confluence/display/FREESWITCH/Debian+10+Buster"
        echo "After installing it, make sure that it does *not* run as daemon."
        exit 1
      fi
      ;;
   "none")
      ;;
   *)
     echo "ERROR: unknown value kamailio for SIPCON_SERVER!"
     exit 1
     ;;
  esac
fi

#sudo tcpdump -i $dev -n -w current_log/$dev.single.pcap -U not port 22 &
#sudo tcpdump -i lo -n -w current_log/lo.single.pcap -U not port 22 &

term "$stp" STP &
sleep .2
term "$hlr" HLR &
sleep .2
term "$mgw4msc" MGW4MSC &
sleep .2
term "$mgw4bsc" MGW4BSC &
sleep .2
term "$msc" MSC &
sleep 2
term "$bsc" BSC &
sleep 2
term "$bts" BTS &
sleep .2
term "$virtphy" virtphy &
sleep .2
term "$ms1" MS1 &
sleep 3
term "$ms2" MS2 &

if [ "x$SIPCON_SERVER" != "xinternal" ]; then
  sleep .2
  term "$sipcon" SIPCON &
  sleep .2
  case "$SIPCON_SERVER" in
    "kamailio") term "$kamailio" KAMAILIO &;;
    "freeswitch") term "./freeswitch/freeswitch.sh" FREESWITCH &;;
  esac
fi

set +x
sleep 1
echo
echo enter to close
read enter_to_close
echo Closing...
#set -x

killall -2 mobile
sleep 3

if [ "x$SIPCON_SERVER" != "xinternal" ]; then
  kill %11
  # 'killall' seems to work only with the shortened name
  killall osmo-sip-connec
  killall "$SIPCON_SERVER"
fi

kill %1 %2 %3 %4 %5 %6 %7 %8 %9 %10
killall osmo-msc
killall osmo-bsc
killall osmo-mgw
killall osmo-hlr
killall -9 osmo-stp
killall mobile
killall virtphy
killall osmo-bts-virtual


set +e
cp *.cfg "$logdir"/

set +x
echo
echo enter name to save log
read log_name
if [ -n "$log_name" ]; then
  newlogdir="log/$log_name"
else
  newlogdir="autolog/log_$(date +%Y-%m-%d_%H-%M-%S)"
fi
mkdir -p "$(dirname "$newlogdir")"

if [ -x "$newlogdir" ]; then
  echo "already exists, move it manually: $newlogdir"
else
  echo mv "$logdir" "$newlogdir"
  mv "$logdir" "$newlogdir"
  mkdir -p "$logdir"
  logdir="$newlogdir"
fi
rm lastlog
ln -s "$logdir" lastlog
