blob: cfc269a615e901682c890f0361d632727b83e0df [file] [log] [blame]
Hanno Beckerf65ca322017-10-10 14:44:57 +01001#!/bin/sh
Gilles Peskineafc4f892017-10-24 10:00:17 +02002# -*-sh-basic-offset: 4-*-
3# Usage: udp_proxy_wrapper.sh [PROXY_PARAM...] -- [SERVER_PARAM...]
Bence Szépkúti700ee442020-05-26 00:33:31 +02004#
5# Copyright (C) 2017, Arm Limited, All Rights Reserved
Bence Szépkútic7da1fe2020-05-26 01:54:15 +02006# SPDX-License-Identifier: Apache-2.0
7#
8# Licensed under the Apache License, Version 2.0 (the "License"); you may
9# not use this file except in compliance with the License.
10# You may obtain a copy of the License at
11#
12# http://www.apache.org/licenses/LICENSE-2.0
13#
14# Unless required by applicable law or agreed to in writing, software
15# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
16# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17# See the License for the specific language governing permissions and
18# limitations under the License.
Bence Szépkúti700ee442020-05-26 00:33:31 +020019#
20# This file is part of Mbed TLS (https://tls.mbed.org)
Hanno Beckerf65ca322017-10-10 14:44:57 +010021
22set -u
23
Hanno Becker22829e92017-10-23 15:28:55 +010024MBEDTLS_BASE="$(dirname -- "$0")/../.."
25TPXY_BIN="$MBEDTLS_BASE/programs/test/udp_proxy"
Hanno Beckerf65ca322017-10-10 14:44:57 +010026SRV_BIN="$MBEDTLS_BASE/programs/ssl/ssl_server2"
27
28: ${VERBOSE:=0}
Hanno Beckerf65ca322017-10-10 14:44:57 +010029
30stop_proxy() {
Gilles Peskineafc4f892017-10-24 10:00:17 +020031 if [ -n "${tpxy_pid:-}" ]; then
32 echo
33 echo " * Killing proxy (pid $tpxy_pid) ..."
34 kill $tpxy_pid
35 fi
Hanno Beckerf65ca322017-10-10 14:44:57 +010036}
37
38stop_server() {
Gilles Peskineafc4f892017-10-24 10:00:17 +020039 if [ -n "${srv_pid:-}" ]; then
40 echo
41 echo " * Killing server (pid $srv_pid) ..."
42 kill $srv_pid >/dev/null 2>/dev/null
43 fi
Hanno Beckerf65ca322017-10-10 14:44:57 +010044}
45
46cleanup() {
47 stop_server
48 stop_proxy
Gilles Peskine81493212017-10-24 12:22:40 +020049 exit 129
Hanno Beckerf65ca322017-10-10 14:44:57 +010050}
51
52trap cleanup INT TERM HUP
53
Gilles Peskineafc4f892017-10-24 10:00:17 +020054# Extract the proxy parameters
55tpxy_cmd_snippet='"$TPXY_BIN"'
56while [ $# -ne 0 ] && [ "$1" != "--" ]; do
57 tail="$1" quoted=""
58 while [ -n "$tail" ]; do
59 case "$tail" in
60 *\'*) quoted="${quoted}${tail%%\'*}'\\''" tail="${tail#*\'}";;
61 *) quoted="${quoted}${tail}"; tail=; false;;
62 esac
63 done
64 tpxy_cmd_snippet="$tpxy_cmd_snippet '$quoted'"
65 shift
66done
67unset tail quoted
68if [ $# -eq 0 ]; then
69 echo " * No server arguments (must be preceded by \" -- \") - exit"
70 exit 3
71fi
72shift
Hanno Beckera677cdd2017-10-23 15:29:31 +010073
Gilles Peskineafc4f892017-10-24 10:00:17 +020074dtls_enabled=
75ipv6_in_use=
76server_port_orig=
77server_addr_orig=
78for param; do
79 case "$param" in
80 server_port=*) server_port_orig="${param#*=}";;
81 server_addr=*:*) server_addr_orig="${param#*=}"; ipv6_in_use=1;;
82 server_addr=*) server_addr_orig="${param#*=}";;
83 dtls=[!0]*) dtls_enabled=1;;
84 esac
85done
86
87if [ -z "$dtls_enabled" ] || [ -n "$ipv6_in_use" ]; then
88 echo >&2 "$0: Couldn't find DTLS enabling, or IPv6 is in use - immediate fallback to server application..."
Hanno Beckerf65ca322017-10-10 14:44:57 +010089 if [ $VERBOSE -gt 0 ]; then
Gilles Peskineafc4f892017-10-24 10:00:17 +020090 echo "[ $SRV_BIN $* ]"
Hanno Beckerf65ca322017-10-10 14:44:57 +010091 fi
Gilles Peskineafc4f892017-10-24 10:00:17 +020092 exec "$SRV_BIN" "$@"
Hanno Beckerf65ca322017-10-10 14:44:57 +010093fi
94
Gilles Peskineafc4f892017-10-24 10:00:17 +020095if [ -z "$server_port_orig" ]; then
96 server_port_orig=4433
97fi
98echo " * Server port: $server_port_orig"
99tpxy_cmd_snippet="$tpxy_cmd_snippet \"listen_port=\$server_port_orig\""
100tpxy_cmd_snippet="$tpxy_cmd_snippet \"server_port=\$server_port\""
101
102if [ -n "$server_addr_orig" ]; then
103 echo " * Server address: $server_addr_orig"
104 tpxy_cmd_snippet="$tpxy_cmd_snippet \"server_addr=\$server_addr_orig\""
105 tpxy_cmd_snippet="$tpxy_cmd_snippet \"listen_addr=\$server_addr_orig\""
Hanno Beckerf65ca322017-10-10 14:44:57 +0100106fi
107
Gilles Peskineafc4f892017-10-24 10:00:17 +0200108server_port=$(( server_port_orig + 1 ))
109set -- "$@" "server_port=$server_port"
110echo " * Intermediate port: $server_port"
Hanno Beckerf65ca322017-10-10 14:44:57 +0100111
112echo " * Start proxy in background ..."
113if [ $VERBOSE -gt 0 ]; then
Gilles Peskineafc4f892017-10-24 10:00:17 +0200114 echo "[ $tpxy_cmd_snippet ]"
Hanno Beckerf65ca322017-10-10 14:44:57 +0100115fi
Gilles Peskine81493212017-10-24 12:22:40 +0200116eval exec "$tpxy_cmd_snippet" >/dev/null 2>&1 &
Gilles Peskineafc4f892017-10-24 10:00:17 +0200117tpxy_pid=$!
Hanno Beckerf65ca322017-10-10 14:44:57 +0100118
119if [ $VERBOSE -gt 0 ]; then
120 echo " * Proxy ID: $TPXY_PID"
121fi
122
Hanno Beckerf65ca322017-10-10 14:44:57 +0100123echo " * Starting server ..."
124if [ $VERBOSE -gt 0 ]; then
Gilles Peskineafc4f892017-10-24 10:00:17 +0200125 echo "[ $SRV_BIN $* ]"
Hanno Beckerf65ca322017-10-10 14:44:57 +0100126fi
127
Gilles Peskine81493212017-10-24 12:22:40 +0200128exec "$SRV_BIN" "$@" >&2 &
Gilles Peskineafc4f892017-10-24 10:00:17 +0200129srv_pid=$!
Hanno Beckerf65ca322017-10-10 14:44:57 +0100130
Gilles Peskineafc4f892017-10-24 10:00:17 +0200131wait $srv_pid
Hanno Beckerf65ca322017-10-10 14:44:57 +0100132
133stop_proxy
134return 0