#!/bin/bash
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

### run the debug agent on target and connect to it with zxdb

## Starts the debug agent on the proposed target and automatically connect zxdb
## to it. Will close the debug agent on exit.
##
## Usage: fx debug [(--port|-p) <PORT>] [(--verbose-agent|-va)] [--] [TARGET]
##
##    --port            Port the debug agent will be listening on. Will use 2345
##                      by default.
##    --verbose-agent   Whether the debug agent's stdout/stderr should be shown.
##                      Useful for debugging the debugger. Yo' dawg.
##
##    TARGET            The hostname of the target to connect to. Initially, it
##                      will attempt to pass it to netaddr to check if it is a
##                      fuchsia IP word encoding. If not, it will attempt to use
##                      it directly as a hostname.
##                      Can be ommited if there is only one target.


source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"/lib/vars.sh
fx-config-read

# Defaults.
port=2345
agent_out="/dev/null"

# Flag parsing.
while [[ "$1" =~ ^- ]]; do
  case "$1" in
    --help|-h)
      fx-command-help
      exit 0
      ;;
    --port|-p)
      shift
      port="$1"
      ;;
    --verbose-agent|-va)
      shift
      agent_out=""
      break
      ;;
    --)
      break
      ;;
    *)
      break
  esac
  shift
done

# The target is the first non-flag argument.
target="$1"

# Initially,  We attempt to see if this is a netaddr target name. If not, we're
# going to try it directly as a hostname.
netaddr_target=$(fx-command-run "netaddr" "--fuchsia" "${target}")
if [[ -z ${netaddr_target} ]]; then
  # No valid netaddr and no explicit target.
  if [[ -z ${target} ]]; then
    echo -e "Could not get a valid target. Exiting."
    exit 1
  fi
  echo "Target is not a Fuchsia target name. Attempting to use it as hostname."
else
  # netaddr generated a valid target. Using that one.
  target="${netaddr_target}"
fi

# Leave the SSH connection open. Will be closed on script end.
# We branch out on whether the user used the verbose-agent flag. If so, we
# redirect the debug agent output to /dev/null.
echo "Attempting to start the Debug Agent."
if [[ -z "${agent_out}" ]]; then
  (fx-command-run "ssh" "${target}" "run debug_agent --port=${port}" &) &
else
  (fx-command-run "ssh" "${target}" "run debug_agent --port=${port}" &) > "${agent_out}" 2>&1 &
fi
fx_ssh_pid="$!"

# We wait until the debug agent is listening on the given port. We use NC to
# attemp a tcp connection. This will actually go all the way with the handshake,
# so the debug agent will think initially that NC is a client. But then it will
# close the connection and receive the actual client's connection and work fine.
try_count=0
max_tries=10
echo "Waiting for the Debug Agent to start."
while true; do
  # Use NC to test if the port is open and the debug agent is listening.
  nc -w5 -6 -z ${target} ${port}
  # If successful, we proceed to connect.
  if [[ "$?" -eq 0 ]]; then
    break
  fi

  # Otherwise, we count and check if we need to exit.
  try_count=$(expr "${try_count}" + 1)
  if [[ "${try_count}" -gt "${max_tries}" ]]; then
    echo -e "Timed out trying to find the Debug Agent. Exiting."
    echo -e "Attempting to kill SSH connection."
    kill "${fx_ssh_pid}"
    exit 1
  fi
  sleep 1
done

# We start the client with the flag that tells it to quit the agent when zxdb
# quits.
echo "Connection found. Starting ZXDB."
"${FUCHSIA_BUILD_DIR}/host_x64/zxdb" "--connect" "[${target}]:${port}" "--quit-agent-on-exit"
