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