diff --git a/share.sh b/share.sh new file mode 100755 index 0000000..a5d2ebe --- /dev/null +++ b/share.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# Share data to a running Shrlok instance. + +usage() { + echo "Usage: $0 [-s SOCKET_PATH] [] TYPE FILE" +} + +socket_path="/run/shrlok/shr.sock" +while getopts "hs:" OPTION; do + case $OPTION in + h) usage; exit 0 ;; + s) socket_path="$OPTARG" ;; + *) usage; exit 1 ;; + esac +done +shift $(( OPTIND - 1 )) +[ $# != 2 ] && usage && exit 1 + +share_type="$1" +input_file="$2" + +if [ ! -S "$socket_path" ]; then + echo "$socket_path is not a valid Unix socket. Is shrlok running?" + exit 1 +fi + +# The first thing sent through the socket is the total packet length, as ASCII +# digits for the convenience of scripts. Build the header before hand to get its +# size, then get the file length and push everything to the socket with socat. +header="{\"type\":\"$share_type\"}" +header_length="${#header}" +file_length="$(wc -c "$input_file" | cut -d' ' -f1)" +full_length="$(( $header_length + 1 + $file_length ))" + +cat <(printf "${full_length}\x00${header}\x00") "$input_file" \ + | socat - UNIX-CONNECT:"$socket_path" ; echo