-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsxc-rrb
executable file
·126 lines (106 loc) · 2.79 KB
/
sxc-rrb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/bin/sh
# Backups using sxc and rrb.
HELP="Usage: $0 config"
# Exit codes
EX_USAGE=64
fail()
{
echo -e "$1" >&2
exit $2
}
[ "$#" -eq 1 ] || fail "Invalid usage.\n$HELP" $EX_USAGE
[ "$1" ] || fail "Config file missing.\n$HELP" $EX_USAGE
source $1
main()
{
PID=$1
while [ ! -p $JID/in ]; do
echo "Waiting for $JID/in"
sleep 0.5
done
echo -e "\0:pwd $PASSWORD\0" > $JID/in
echo -e "\0:pri $PRIORITY\0" > $JID/in
echo -e "\0:set available\0" > $JID/in
while [ "`cat $JID/nfo/presence`" = "offline" ]; do
sleep 1
done
LAST_USER=
LAST_CONFIGS=()
for ENTRY in ${USERS[@]}; do
if echo "$ENTRY" | grep -qs "@"; then
if [ "$LAST_USER" ]; then
echo -e "\0:add $LAST_USER\0" > $JID/in
handle_contact $PID "$LAST_USER" "${LAST_CONFIGS[@]}" &
fi
LAST_USER="$ENTRY"
LAST_CONFIGS=()
else
if [ "${LAST_CONFIGS}" ]; then
LAST_CONFIGS=("${LAST_CONFIGS[@]}" "$ENTRY")
else
LAST_CONFIGS=("$ENTRY")
fi
fi
done
echo -e "\0:add $LAST_USER\0" > $JID/in
handle_contact $PID "$LAST_USER" "${LAST_CONFIGS[@]}" &
tail --lines=0 --follow --pid $PID $JID/out 2> /dev/null |
while read -r line; do
OUT=`echo $line | cut -d" " -f 2-` # Remove date
if echo $OUT | grep -qs "^Disconnected"; then
( sleep 5; echo -e "\0:set available\0" > $JID/in) &
fi
done
}
handle_contact()
{
PID=$1
CONTACT=$2
CONFIGS=${*:3}
FILE_OUT=$JID/$CONTACT/out
FILE_IN=$JID/$CONTACT/in
while [ ! -p $FILE_IN -a -f $FILE_OUT ]; do
echo "Waiting for $CONTACT/{in,out}"
sleep 0.5
done
tail --lines=0 --follow --pid $PID $FILE_OUT 2> /dev/null |
while read -r line; do
OUT=`echo $line | cut -d" " -f 2-` # Remove date
# We are only interested in messages from the other contact.
if ! echo $OUT | grep -qs "^<$CONTACT> "; then
continue
fi
MSG=`echo $OUT | cut -d" " -f 2-`
CMD=`echo $MSG | cut -d" " -f 1`
if [ ":help" = "$CMD" ]; then
echo "\
Commands:
:backup name
:list" > $FILE_IN
elif [ ":list" = "$CMD" ]; then
echo "Valid hosts: ${CONFIGS[@]}" > $FILE_IN
elif [ ":backup" = "$CMD" ]; then
NAME=`echo $MSG | cut -d" " -f 2-`
for CONFIG in ${CONFIGS[@]}; do
if [ "$CONFIG" = "$NAME" ]; then
VALID=true
fi
done
if [ "$VALID" = "true" ]; then
echo "Running: rrb \"$CONFIG_PREFIX$NAME$CONFIG_SUFFIX\"" > $FILE_IN
sleep 0.1
rrb "$CONFIG_PREFIX$NAME$CONFIG_SUFFIX" &> $FILE_IN
echo "rrb \"$CONFIG_PREFIX$NAME$CONFIG_SUFFIX\" finished with exit code: $?" \
> $FILE_IN
else
echo "Invalid hostname $NAME" > $FILE_IN
fi
else
echo "Invalid usage, see :help" > $FILE_IN
fi
done
}
sxc $JID --port $PORT &
PID=$!
main $PID &
wait $PID