git-annex/doc/special_remotes/p2p/git-annex-p2p-unix-sockets

36 lines
1.1 KiB
Bash
Executable file

#!/bin/sh
# Example P2P network transit program for git-annex.
#
# This simulates a multi-node P2P network using unix
# socket files in /tmp.
#
# Copyright 2025 Joey Hess; icenced under the GNU GPL version 3 or higher.
set -e
if [ "$1" = address ]; then
# Output the local P2P network address.
#
# For the purposes of this example, a new address is made up each
# time this is run. Using the current unix second to get a fairly
# unique address.
myaddress=$(date +%s)
echo "$myaddress"
else
socketfile="$2"
if [ -z "$socketfile" ]; then
# Connect to the peer's address and relay stdin and stdout.
peeraddress="$1"
# For the purposes of this demo, socat is used, and simply
# connects stdio to the unix socket file in /tmp.
socat - UNIX-CONNECT:"/tmp/$peeraddress"
else
# Arrange for incoming connections from peers to connect to
# the unix socket provided by git-annex. The local
# P2P network address is also available to use.
myaddress="$1"
# For the purposes of this demo, the socket file provided
# by git-annex is symlinked to the location in /tmp.
ln -sf $(realpath "$socketfile") "/tmp/$myaddress"
fi
fi