d3372da9 |
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 |