quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

udp_proxy_wrapper.sh (2941B)


      1 #!/bin/sh
      2 # -*-sh-basic-offset: 4-*-
      3 # Usage: udp_proxy_wrapper.sh [PROXY_PARAM...] -- [SERVER_PARAM...]
      4 #
      5 # Copyright The Mbed TLS Contributors
      6 # SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
      7 
      8 set -u
      9 
     10 MBEDTLS_BASE="$(dirname -- "$0")/../.."
     11 TPXY_BIN="$MBEDTLS_BASE/programs/test/udp_proxy"
     12 SRV_BIN="$MBEDTLS_BASE/programs/ssl/ssl_server2"
     13 
     14 : ${VERBOSE:=0}
     15 
     16 stop_proxy() {
     17     if [ -n "${tpxy_pid:-}" ]; then
     18         echo
     19         echo "  * Killing proxy (pid $tpxy_pid) ..."
     20         kill $tpxy_pid
     21     fi
     22 }
     23 
     24 stop_server() {
     25     if [ -n "${srv_pid:-}" ]; then
     26         echo
     27         echo "  * Killing server (pid $srv_pid) ..."
     28         kill $srv_pid >/dev/null 2>/dev/null
     29     fi
     30 }
     31 
     32 cleanup() {
     33     stop_server
     34     stop_proxy
     35     exit 129
     36 }
     37 
     38 trap cleanup INT TERM HUP
     39 
     40 # Extract the proxy parameters
     41 tpxy_cmd_snippet='"$TPXY_BIN"'
     42 while [ $# -ne 0 ] && [ "$1" != "--" ]; do
     43     tail="$1" quoted=""
     44     while [ -n "$tail" ]; do
     45         case "$tail" in
     46             *\'*) quoted="${quoted}${tail%%\'*}'\\''" tail="${tail#*\'}";;
     47             *) quoted="${quoted}${tail}"; tail=; false;;
     48         esac
     49     done
     50     tpxy_cmd_snippet="$tpxy_cmd_snippet '$quoted'"
     51     shift
     52 done
     53 unset tail quoted
     54 if [ $# -eq 0 ]; then
     55     echo "  * No server arguments (must be preceded by \" -- \") - exit"
     56     exit 3
     57 fi
     58 shift
     59 
     60 dtls_enabled=
     61 ipv6_in_use=
     62 server_port_orig=
     63 server_addr_orig=
     64 for param; do
     65     case "$param" in
     66         server_port=*) server_port_orig="${param#*=}";;
     67         server_addr=*:*) server_addr_orig="${param#*=}"; ipv6_in_use=1;;
     68         server_addr=*) server_addr_orig="${param#*=}";;
     69         dtls=[!0]*) dtls_enabled=1;;
     70     esac
     71 done
     72 
     73 if [ -z "$dtls_enabled" ] || [ -n "$ipv6_in_use" ]; then
     74     echo >&2 "$0: Couldn't find DTLS enabling, or IPv6 is in use - immediate fallback to server application..."
     75     if [ $VERBOSE -gt 0 ]; then
     76         echo "[ $SRV_BIN $* ]"
     77     fi
     78     exec "$SRV_BIN" "$@"
     79 fi
     80 
     81 if [ -z "$server_port_orig" ]; then
     82     server_port_orig=4433
     83 fi
     84 echo "  * Server port:       $server_port_orig"
     85 tpxy_cmd_snippet="$tpxy_cmd_snippet \"listen_port=\$server_port_orig\""
     86 tpxy_cmd_snippet="$tpxy_cmd_snippet \"server_port=\$server_port\""
     87 
     88 if [ -n "$server_addr_orig" ]; then
     89     echo "  * Server address:    $server_addr_orig"
     90     tpxy_cmd_snippet="$tpxy_cmd_snippet \"server_addr=\$server_addr_orig\""
     91     tpxy_cmd_snippet="$tpxy_cmd_snippet \"listen_addr=\$server_addr_orig\""
     92 fi
     93 
     94 server_port=$(( server_port_orig + 1 ))
     95 set -- "$@" "server_port=$server_port"
     96 echo "  * Intermediate port: $server_port"
     97 
     98 echo "  * Start proxy in background ..."
     99 if [ $VERBOSE -gt 0 ]; then
    100     echo "[ $tpxy_cmd_snippet ]"
    101 fi
    102 eval exec "$tpxy_cmd_snippet" >/dev/null 2>&1 &
    103 tpxy_pid=$!
    104 
    105 if [ $VERBOSE -gt 0 ]; then
    106     echo "  * Proxy ID:          $TPXY_PID"
    107 fi
    108 
    109 echo "  * Starting server ..."
    110 if [ $VERBOSE -gt 0 ]; then
    111     echo "[ $SRV_BIN $* ]"
    112 fi
    113 
    114 exec "$SRV_BIN" "$@" >&2 &
    115 srv_pid=$!
    116 
    117 wait $srv_pid
    118 
    119 stop_proxy
    120 return 0