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 8set -u 9 10MBEDTLS_BASE="$(dirname -- "$0")/../.." 11TPXY_BIN="$MBEDTLS_BASE/programs/test/udp_proxy" 12SRV_BIN="$MBEDTLS_BASE/programs/ssl/ssl_server2" 13 14: ${VERBOSE:=0} 15 16stop_proxy() { 17 if [ -n "${tpxy_pid:-}" ]; then 18 echo 19 echo " * Killing proxy (pid $tpxy_pid) ..." 20 kill $tpxy_pid 21 fi 22} 23 24stop_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 32cleanup() { 33 stop_server 34 stop_proxy 35 exit 129 36} 37 38trap cleanup INT TERM HUP 39 40# Extract the proxy parameters 41tpxy_cmd_snippet='"$TPXY_BIN"' 42while [ $# -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 52done 53unset tail quoted 54if [ $# -eq 0 ]; then 55 echo " * No server arguments (must be preceded by \" -- \") - exit" 56 exit 3 57fi 58shift 59 60dtls_enabled= 61ipv6_in_use= 62server_port_orig= 63server_addr_orig= 64for 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 71done 72 73if [ -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" "$@" 79fi 80 81if [ -z "$server_port_orig" ]; then 82 server_port_orig=4433 83fi 84echo " * Server port: $server_port_orig" 85tpxy_cmd_snippet="$tpxy_cmd_snippet \"listen_port=\$server_port_orig\"" 86tpxy_cmd_snippet="$tpxy_cmd_snippet \"server_port=\$server_port\"" 87 88if [ -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\"" 92fi 93 94server_port=$(( server_port_orig + 1 )) 95set -- "$@" "server_port=$server_port" 96echo " * Intermediate port: $server_port" 97 98echo " * Start proxy in background ..." 99if [ $VERBOSE -gt 0 ]; then 100 echo "[ $tpxy_cmd_snippet ]" 101fi 102eval exec "$tpxy_cmd_snippet" >/dev/null 2>&1 & 103tpxy_pid=$! 104 105if [ $VERBOSE -gt 0 ]; then 106 echo " * Proxy ID: $TPXY_PID" 107fi 108 109echo " * Starting server ..." 110if [ $VERBOSE -gt 0 ]; then 111 echo "[ $SRV_BIN $* ]" 112fi 113 114exec "$SRV_BIN" "$@" >&2 & 115srv_pid=$! 116 117wait $srv_pid 118 119stop_proxy 120return 0 121