Cleanup and bugfixes(...).
[doldaconnect.git] / config / dc-filter
CommitLineData
d3372da9 1#!/bin/sh
2trap "" SIGHUP SIGPIPE
3if [ ! -d $HOME/dc ]; then mkdir $HOME/dc; fi
4if [ ! -d $HOME/dc/done ]; then mkdir $HOME/dc/done; fi
5if [ ! -d $HOME/dc/resume ]; then mkdir $HOME/dc/resume; fi
6if [ ! -d $HOME/dc/users ]; then mkdir $HOME/dc/users; fi
7exec 2>>$HOME/dc/filterlog
8cd $HOME/dc
9unset speedrec
06dea59a 10if which speedrec >/dev/null 2>&1; then
11 speedrec=speedrec
12fi
13if [ -z "$speedrec"]; then
14 for dir in /usr/libexec /usr/local/libexec; do
15 if [ -x "${dir}/speedrec" ]; then
16 speedrec="${dir}/speedrec"
17 fi
18 done
19fi
d3372da9 20if [ -z "$speedrec" ]; then
21 echo "could not find speedrec - using cat instead" >&2
22fi
23maxsize=0
24unset resfile
25unset infofile
26found=y
27while [ -z "$resfile" -a "$found" = y ]; do
28 unset found
29 for file in resume/*.info; do
30 if [ ! -r "$file" ]; then continue; fi
31 . "$file"
32 if [ "$filesize" -eq "$2" ]; then
33 thisfile="${file%.info}"
34 if [ ! -e "${thisfile}.lock" ]; then
35 size="$(wc -c <"$thisfile")"
36 found=y
37 if [ "$size" -gt "$maxsize" ]; then
38 maxsize="$size"
39 resfile="$thisfile"
40 infofile="$file"
41 fi
42 fi
43 fi
44 done
45 if [ -n "$resfile" ]; then
46 if ! locktouch "${resfile}.lock"; then
47 unset resfile
48 fi
49 fi
50done
51unset "${!dcarg_@}"
52if [ -n "$resfile" ]; then
53 . "${resfile}.info"
54fi
55origname="$1"
56shift
57filesize="$1"
58shift
59peername="$1"
60shift
61while [ $# -gt 1 ]; do
62 rec="$1"
63 shift
64 val="$1"
65 shift
66 declare "dcarg_$rec"="$val"
67done
68if [ -z "$resfile" ]; then
69 resfile="$(mktemp resume/resXXXXXX)"
70 chmod 644 "$resfile"
71 maxsize=0
72 >"${resfile}.lock"
73fi
74declare -p origname filesize "${!dcarg_@}" >"${resfile}.info"
75echo "resume $maxsize"
76if [ -z "$speedrec" ]; then
77 cat >>"$resfile"
78else
79 peerfile="$(tr / _ <<<"$peername")"
80 "$speedrec" "$HOME/dc/users/$peerfile" >>"$resfile"
81fi
82size="$(wc -c <"$resfile")"
83if [ "$size" -eq 0 ]; then
84 rm -f "$resfile" "${resfile}.info" "${resfile}.lock"
85 exit 1
86fi
87rm -f "${resfile}.lock"
88if [ "$size" -lt "$filesize" ]; then
89 exit 1 # Exit code != 0 means restart transfer
90fi
91rm -f "${resfile}.info"
92
93destdir="$HOME/dc/done"
94
95newname="$destdir"/"$origname"
96if [ -e "$newname" ]; then
97 newname="$(mktemp "${newname}XXXXXX")"
98fi
99mv "$resfile" "$newname"
100if [ -x $HOME/dc/complete ]; then
101 export "${!dcarg_@}"
102 exec $HOME/dc/complete "$newname"
103fi
104exit 0