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