mirror of https://github.com/9001/r0c.git
60 lines
1002 B
Bash
Executable File
60 lines
1002 B
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
# --------------------------------------------
|
|
# tcp plaintext client without linebuffering
|
|
# --------------------------------------------
|
|
# uses bash internals wherever possible,
|
|
# let me know if I missed some opportunities
|
|
# --------------------------------------------
|
|
|
|
debug=''
|
|
#debug=1
|
|
|
|
cat_pid=''
|
|
|
|
function ctrl_c()
|
|
{
|
|
kill $cat_pid
|
|
exit 0
|
|
}
|
|
|
|
function connect()
|
|
{
|
|
# hook ctrl-c for cleanup
|
|
trap ctrl_c INT
|
|
|
|
# open the tcp connection
|
|
exec 147<>/dev/tcp/$1/$2
|
|
|
|
# dump socket to stdout
|
|
cat <&147 & cat_pid=$!
|
|
|
|
# read keyboard and send each key to the socket
|
|
while IFS= read -rn1 x
|
|
do
|
|
[ "x$x" == "x" ] &&
|
|
x=$'\n'
|
|
|
|
[ $debug ] &&
|
|
{
|
|
printf '%s' "$x" |
|
|
tee /dev/stderr 2>&1 >&147 |
|
|
xxd -c8 -g1 >> /dev/shm/r0c-log
|
|
} ||
|
|
printf '%s' "$x" >&147
|
|
done
|
|
}
|
|
|
|
[ "x$2" == x ] &&
|
|
{
|
|
echo
|
|
echo " r0c client (bash edition)"
|
|
echo " need argument 1: r0c server ip or hostname"
|
|
echo " need argument 2: r0c server port"
|
|
echo
|
|
exit 1
|
|
}
|
|
|
|
connect $1 $2
|