#!/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.

### forward local ports to Dart VMs on the device.

## usage: fx dart-tunnel  [-h|--help] [-v|--verbose] [<isolate>]
##
## Creates an SSH tunnel with the device's running Dart VM(s) and leaves it open
## until the user chooses to close it. Supplying an Isolate name will attempt to
## connect to all isolates whose name match.
##
## The verbose flag is strongly discouraged unless you are debugging.
##
## This command requires:
##   > Ommitting `--release` from `fx set`
##       (Observatory isn't available in --release builds).
##
##   > "bundles/tools" to be available on the system (for the `find` command).
##
## Arguments:
##   -h|--help    Print out this message.

VERBOSE=false
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../lib/vars.sh || exit $?
fx-config-read

case $1 in
  -h|--help)
  fx-command-help
  exit 0
  ;;
  -v|--verbose)
  shift # name
  VERBOSE=true
  ;;
esac

case "$(uname -s)" in
    Linux)
        PREBUILT_DART="${FUCHSIA_DIR}/topaz/tools/prebuilt-dart-sdk/linux-x64/bin/dart"
        ;;
    Darwin)
        PREBUILT_DART="${FUCHSIA_DIR}/topaz/tools/prebuilt-dart-sdk/mac-x64/bin/dart"
        ;;
esac
IP_ADDR_LINK_LOCAL="$(get-fuchsia-device-addr)"

# Strips the back of the string the longest match of '%' followed by
# any characters (the first two '%' characters are just the bash syntax).
IP_ADDR="${IP_ADDR_LINK_LOCAL%%%*}"
# Splits from the front of the string the longest match of any character
# followed by '%'.
IP_IFACE="${IP_ADDR_LINK_LOCAL##*%}"
SSH_CONFIG="${FUCHSIA_BUILD_DIR}/ssh-keys/ssh_config"
# Just compress the rest of the args to an array here.
ARGS="$(echo "$@")"
DART_TUNNEL_LIB_DIR="${FUCHSIA_DIR}/tools/devshell/contrib/dart-tunnel-lib"
DART_TUNNEL_PACKAGES="${DART_TUNNEL_LIB_DIR}/dart-tunnel.packages"
DART_BIN="${DART_TUNNEL_LIB_DIR}/dart-tunnel.dart"

# Conditionally prints the --verbose flag.
function _verbose_flag() {
  if [ "${VERBOSE}" = true ]; then
    echo "--verbose"
  fi
}

"${PREBUILT_DART}" --packages="${DART_TUNNEL_PACKAGES}" \
  "${DART_BIN}" \
  --ssh-config="${SSH_CONFIG}" \
  --ip-address="${IP_ADDR}" \
  --network-interface="${IP_IFACE}" \
  --isolate="$ARGS" \
  "$(_verbose_flag)"
