This repository has been archived on 2024-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
Shrlok/share.sh

37 lines
1 KiB
Bash
Executable file

#!/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