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

# URL from which the latest version of this script can be downloaded.
script_url="http://src.chromium.org/svn/trunk/src/tools/android/adb_remote_setup.sh"

# Replaces this file with the latest version of the script and runs it.
update-self() {
  local script="${BASH_SOURCE[0]}"
  local new_script="${script}.new"
  local updater_script="${script}.updater"
  curl -sSf -o "$new_script" "$script_url" || return
  chmod +x "$new_script" || return

  # Replace this file with the newly downloaded script.
  cat > "$updater_script" << EOF
#!/bin/bash
if mv "$new_script" "$script"; then
  rm -- "$updater_script"
else
  echo "Note: script update failed."
fi
ADB_REMOTE_SETUP_NO_UPDATE=1 exec /bin/bash "$script" $@
EOF
  exec /bin/bash "$updater_script" "$@"
}

if [[ "$ADB_REMOTE_SETUP_NO_UPDATE" -ne 1 ]]; then
  update-self "$@" || echo 'Note: script update failed'
fi

if [[ $# -ne 1 && $# -ne 2 ]]; then
  cat <<'EOF'
Usage: adb_remote_setup.sh REMOTE_HOST [REMOTE_ADB]

Configures adb on a remote machine to communicate with a device attached to the
local machine. This is useful for installing APKs, running tests, etc while
working remotely.

Arguments:
  REMOTE_HOST  hostname of remote machine
  REMOTE_ADB   path to adb on the remote machine (you can omit this if adb is in
               the remote host's path)
EOF
  exit 1
fi

remote_host="$1"
remote_adb="${2:-adb}"

# Ensure adb is in the local machine's path.
if ! which adb >/dev/null; then
  echo "error: adb must be in your local machine's path."
  exit 1
fi

if which kinit >/dev/null; then
  # Allow ssh to succeed without typing your password multiple times.
  kinit -R || kinit
fi

# Ensure local and remote versions of adb are the same.
remote_adb_version=$(ssh "$remote_host" "$remote_adb version")
local_adb_version=$(adb version)
if [[ "$local_adb_version" != "$remote_adb_version" ]]; then
  echo >&2
  echo "WARNING: local adb is not the same version as remote adb." >&2
  echo "This should be fixed since it may result in protocol errors." >&2
  echo "  local adb:  $local_adb_version" >&2
  echo "  remote adb: $remote_adb_version" >&2
  echo >&2
  sleep 5
fi

# Kill the adb server on the remote host.
ssh "$remote_host" "$remote_adb kill-server"

# Start the adb server locally.
adb start-server

# Forward various ports from the remote host to the local host:
#   5037: adb
#   8001: http server
#   9031: sync server
#   10000: net unittests
#   10201: net unittests
ssh -C \
    -R 5037:localhost:5037 \
    -L 8001:localhost:8001 \
    -L 9031:localhost:9031 \
    -R 10000:localhost:10000 \
    -R 10201:localhost:10201 \
    "$remote_host"
