diff --git a/rowbot b/rowbot index ec2d802..c117d64 100755 --- a/rowbot +++ b/rowbot @@ -1,7 +1,7 @@ #!/usr/bin/env bash ### -# parse arguments +# argument parser for parsing arguments ## declare -A opts @@ -38,8 +38,45 @@ done server=${opts[server]:-irc.libera.chat} tls=${opts[tls]:-no} -if [[ tls = no ]]; then - port=${opts[port]:-6667} -else +if [[ $tls = yes ]]; then + if ! hash socat 2>/dev/null; then + printf 'please install socat to use tls with rowbot.\n' >&2 + exit 1 + fi + port=${opts[port]:-6697} +else + port=${opts[port]:-6667} fi + +### +# net code +### + +if [[ $tls = yes ]]; then + coproc sock { socat OPENSSL:"$server":"$port" -; } + in_sock=${sock[0]} out_sock=${sock[1]} +else + exec {sock}<>/dev/tcp/"$server"/"$port" + in_sock=$sock out_sock=$sock +fi + +send() { + local fmt + printf -v fmt "$1" "${@:2}" + printf '%s\r\n' "$fmt" >&"$out_sock" +} + +recv() { + declare -n sock_line=$1 + IFS= read -r "$1" <&"$in_sock" + sock_line=${sock_line%$'\r'} +} + +### +# driver +### + +while recv line; do + declare -p line +done