#!/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.
##
## TROUBLESHOOTING TIPS:
##
## - Remember to use "fx set-device" when working with multiple devices.
## - This scripts by default will mute the SSH connection stdout/stderr, so any
##   errors triggered by it won't appear. Use the --verbose-agent flag to see
##   the output.
## - This scripts uses the tool "nc" for testing TCP connections. Check that it
##   is in $PATH and that it works.
##
## Usage: fx debug [(--port|-p) <PORT>] [(--verbose-agent|-va)]
##
##    --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.
##

source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?
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
  esac
  shift
done

# Get the defaulted device address.
target=$(fx-command-run "netaddr" "--fuchsia" "$(get-device-name)")
if [[ -z "${target}" ]]; then
  # netaddr will have put the correct error message by now.
  echo -e "Could not get a valid target. Run \"fx set-device\""
  exit 1
fi

debug_agent_pkg="fuchsia-pkg://fuchsia.com/debug_agent#meta/debug_agent.cmx"

# 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 -e "Attempting to start the Debug Agent."
if [[ -z "${agent_out}" ]]; then
  (fx-command-run "ssh" "${target}" "run ${debug_agent_pkg} --port=${port}" &) &
else
  (fx-command-run "ssh" "${target}" "run ${debug_agent_pkg} --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 -e "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 -e "Connection found. Starting zxdb."
"${FUCHSIA_BUILD_DIR}/host_x64/zxdb" "--connect" "[${target}]:${port}" "--quit-agent-on-exit"
