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

# $1 = hostname, $2 = port
#
# Use socat to connect to the specified host and port via one of the proxies
# defined in the environment, if the target host does not appear in the
# no_proxy environment variable.

DEST_HOST="$1"
DEST_PORT="$2"

# Determine whether the destination host is in the "no_proxy" list.
use_proxy="true"
GLOBIGNORE="*"
for a_host in ${no_proxy//,/ } ; do
  case "${a_host}" in
  "*")           # A "*" matches all hosts.
    use_proxy="false"
    break
    ;;
  .*)            # Items of the form ".some.fqdn" imply match-at-end.
    if [[ "${DEST_HOST}" == *"${a_host}" ]]; then
      use_proxy="false"
      break
    fi
    ;;
  ${DEST_HOST})  # Items of the form "some.fqdn" imply exact-match.
    use_proxy="false"
    break
    ;;
  esac
done

if [[ -n "${all_proxy}" ]]; then
  PROXY="${all_proxy}"
  TYPE=SOCKS4
  PORT_ATTR=socksport
elif [[ -n "${https_proxy}" ]]; then
  PROXY="${https_proxy}"
  TYPE=PROXY
  PORT_ATTR=proxyport
elif [[ -n "${http_proxy}" ]]; then
  PROXY="${http_proxy}"
  TYPE=PROXY
  PORT_ATTR=proxyport
else
  use_proxy="false"
fi

if [[ "${use_proxy}" == "true" ]]; then
  PROXY="${PROXY#*://}"
  PROXY="${PROXY%%/*}"
  PROXY_HOST="${PROXY%%:*}"
  PROXY_PORT="${PROXY##*:}"
  PARMS="${PROXY_HOST}:${DEST_HOST}:${DEST_PORT},${PORT_ATTR}=${PROXY_PORT}"
  socat_args=( "${TYPE}:${PARMS}" )
else
  socat_args=( TCP:"${DEST_HOST}":"${DEST_PORT}" )
fi
exec socat STDIO "${socat_args[@]}"
