Hanno Becker | f65ca32 | 2017-10-10 14:44:57 +0100 | [diff] [blame^] | 1 | #!/bin/sh |
| 2 | |
| 3 | set -u |
| 4 | |
| 5 | MBEDTLS_BASE="$(pwd)/$(dirname $0)/../../" |
| 6 | TPXY_BIN="$MBEDTLS_BASE/test/udp_proxy" |
| 7 | SRV_BIN="$MBEDTLS_BASE/programs/ssl/ssl_server2" |
| 8 | |
| 9 | : ${VERBOSE:=0} |
| 10 | VERBOSE=1 |
| 11 | |
| 12 | PARAM_SEP="^(.*)--(.*)$" |
| 13 | PROXY_PARAMS=$(echo $@ | sed -n -r "s/$PARAM_SEP/\1/p") |
| 14 | SERVER_PARAMS=$(echo $@ | sed -n -r "s/$PARAM_SEP/\2/p") |
| 15 | |
| 16 | stop_proxy() { |
| 17 | test -n "${TPXY_PID:-}" && |
| 18 | ( |
| 19 | echo "\n * Killing proxy (pid $TPXY_PID) ..." |
| 20 | kill $TPXY_PID |
| 21 | ) |
| 22 | } |
| 23 | |
| 24 | stop_server() { |
| 25 | test -n "${SRV_PID:-}" && |
| 26 | ( |
| 27 | echo "\n * Killing server (pid $SRV_PID) ..." |
| 28 | kill $SRV_PID >/dev/null 2>/dev/null |
| 29 | ) |
| 30 | } |
| 31 | |
| 32 | cleanup() { |
| 33 | stop_server |
| 34 | stop_proxy |
| 35 | return 1 |
| 36 | } |
| 37 | |
| 38 | trap cleanup INT TERM HUP |
| 39 | |
| 40 | DTLS_ENABLED=$(echo "$SERVER_PARAMS" | grep -v "::1" | grep "dtls=1") |
| 41 | if [ -z "$DTLS_ENABLED" ]; then |
| 42 | echo " * Couldn't find DTLS enabling, or IPv6 is in use - immediate fallback to server application..." |
| 43 | if [ $VERBOSE -gt 0 ]; then |
| 44 | echo "[ $SRV_BIN $SERVER_PARAMS ]" |
| 45 | fi |
| 46 | $SRV_BIN $SERVER_PARAMS >&1 2>&1 & |
| 47 | SRV_PID=$! |
| 48 | wait $SRV_PID |
| 49 | exit 0 |
| 50 | fi |
| 51 | |
| 52 | SERVER_PORT_ORIG=$(echo "$SERVER_PARAMS" | sed -n -r "s/^.*server_port=([0-9]+).*$/\1/p") |
| 53 | if [ -z "$SERVER_PORT_ORIG" ]; then |
| 54 | echo " * No server port specified - exit" |
| 55 | exit 1 |
| 56 | fi |
| 57 | |
| 58 | SERVER_ADDR_ORIG=$(echo "$SERVER_PARAMS" | sed -n -r "s/^.*server_addr=([a-zA-Z0-9\.]+).*$/\1/p") |
| 59 | if [ -z "$SERVER_ADDR_ORIG" ]; then |
| 60 | echo " * No server address specified - exit" |
| 61 | exit 1 |
| 62 | fi |
| 63 | |
| 64 | echo " * Server address: $SERVER_ADDR_ORIG" |
| 65 | echo " * Server port: $SERVER_PORT_ORIG" |
| 66 | |
| 67 | SERVER_PORT=$(( $SERVER_PORT_ORIG + 1 )) |
| 68 | echo " * Intermediate port: $SERVER_PORT" |
| 69 | |
| 70 | TPXY_CMD=\ |
| 71 | "$TPXY_BIN $PROXY_PARAMS "\ |
| 72 | "listen_port=$SERVER_PORT_ORIG "\ |
| 73 | "server_port=$SERVER_PORT "\ |
| 74 | "server_addr=$SERVER_ADDR_ORIG "\ |
| 75 | "listen_addr=$SERVER_ADDR_ORIG" |
| 76 | |
| 77 | echo " * Start proxy in background ..." |
| 78 | if [ $VERBOSE -gt 0 ]; then |
| 79 | echo "[ $TPXY_CMD ]" |
| 80 | fi |
| 81 | |
| 82 | $TPXY_CMD >/dev/null 2>&1 & |
| 83 | TPXY_PID=$! |
| 84 | |
| 85 | if [ $VERBOSE -gt 0 ]; then |
| 86 | echo " * Proxy ID: $TPXY_PID" |
| 87 | fi |
| 88 | |
| 89 | SERVER_PARAMS_NEW=$(echo $SERVER_PARAMS | sed -n -r "s/^(.*server_port=)[0-9]+(.*)$/\1$SERVER_PORT\2/p") |
| 90 | SRV_CMD="$SRV_BIN $SERVER_PARAMS_NEW" |
| 91 | |
| 92 | echo " * Starting server ..." |
| 93 | if [ $VERBOSE -gt 0 ]; then |
| 94 | echo "[ $SRV_CMD ]" |
| 95 | fi |
| 96 | |
| 97 | $SRV_CMD >&2 & |
| 98 | SRV_PID=$! |
| 99 | |
| 100 | wait $SRV_PID |
| 101 | |
| 102 | stop_proxy |
| 103 | return 0 |