| #!/bin/sh |
| |
| # Copyright 2015-2022 Rivoreo |
| |
| # Permission is hereby granted, free of charge, to any person obtaining |
| # a copy of this software and associated documentation files (the |
| # "Software"), to deal in the Software without restriction, including |
| # without limitation the rights to use, copy, modify, merge, publish, |
| # distribute, sublicense, and/or sell copies of the Software, and to |
| # permit persons to whom the Software is furnished to do so, subject to |
| # the following conditions: |
| |
| # The above copyright notice and this permission notice shall be |
| # included in all copies or substantial portions of the Software. |
| |
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| # NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE |
| # FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF |
| # CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
| # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| |
| |
| set -f |
| sockopt keepalive=1 |
| echo "UX:Ready" |
| while read -r line; do case "$line" in |
| ping) |
| echo "UX:Pong" |
| ;; |
| binary) |
| echo "UX:Will send INFINITY amount of random binary data, type 'yes' confirm" |
| if read -r line && [ "$line" = yes ]; then |
| echo "UX:Confirmed" |
| echo begin |
| exec cat /dev/urandom |
| fi |
| echo "UX:Operation canceled" |
| ;; |
| "binary "*|"ascii "*) |
| if a="`printf '%s\\n' \"$line\" | sed -En 's/(binary|ascii) +([0-9]+) ?(Ki)?\$/\\2 \\3/p'`" && [ -n "$a" ] && set -- $a && [ "$1" -gt 0 ]; then |
| [ $# = 2 ] && [ "$2" = Ki ] && bs=1024 || bs=1 |
| printf "UX:Will send %s %sB of random %s data, type 'yes' confirm\\n" "$1" "$2" "${line%% *}" |
| if read -r line && [ "$line" = yes ]; then |
| echo "UX:Confirmed" |
| echo begin |
| exec dd if=/dev/urandom bs=$bs "count=$1" 2> /dev/null |
| fi |
| echo "UX:Operation canceled" |
| else |
| echo "UX:Bad command" |
| fi |
| ;; |
| *) |
| echo "UX:Command not recognized" |
| exit 1 |
| ;; |
| esac done |