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