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 |
06dea59a |
10 | if which speedrec >/dev/null 2>&1; then |
11 | speedrec=speedrec |
12 | fi |
13 | if [ -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 |
19 | fi |
d3372da9 |
20 | if [ -z "$speedrec" ]; then |
21 | echo "could not find speedrec - using cat instead" >&2 |
22 | fi |
23 | maxsize=0 |
24 | unset resfile |
25 | unset infofile |
26 | found=y |
27 | while [ -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 |
50 | done |
51 | unset "${!dcarg_@}" |
52 | if [ -n "$resfile" ]; then |
53 | . "${resfile}.info" |
54 | fi |
55 | origname="$1" |
56 | shift |
57 | filesize="$1" |
58 | shift |
59 | peername="$1" |
60 | shift |
61 | while [ $# -gt 1 ]; do |
62 | rec="$1" |
63 | shift |
64 | val="$1" |
65 | shift |
66 | declare "dcarg_$rec"="$val" |
67 | done |
68 | if [ -z "$resfile" ]; then |
69 | resfile="$(mktemp resume/resXXXXXX)" |
70 | chmod 644 "$resfile" |
71 | maxsize=0 |
72 | >"${resfile}.lock" |
73 | fi |
74 | declare -p origname filesize "${!dcarg_@}" >"${resfile}.info" |
75 | echo "resume $maxsize" |
76 | if [ -z "$speedrec" ]; then |
77 | cat >>"$resfile" |
78 | else |
79 | peerfile="$(tr / _ <<<"$peername")" |
80 | "$speedrec" "$HOME/dc/users/$peerfile" >>"$resfile" |
81 | fi |
82 | size="$(wc -c <"$resfile")" |
83 | if [ "$size" -eq 0 ]; then |
84 | rm -f "$resfile" "${resfile}.info" "${resfile}.lock" |
85 | exit 1 |
86 | fi |
87 | rm -f "${resfile}.lock" |
88 | if [ "$size" -lt "$filesize" ]; then |
89 | exit 1 # Exit code != 0 means restart transfer |
90 | fi |
91 | rm -f "${resfile}.info" |
92 | |
93 | destdir="$HOME/dc/done" |
94 | |
95 | newname="$destdir"/"$origname" |
96 | if [ -e "$newname" ]; then |
97 | newname="$(mktemp "${newname}XXXXXX")" |
98 | fi |
99 | mv "$resfile" "$newname" |
100 | if [ -x $HOME/dc/complete ]; then |
101 | export "${!dcarg_@}" |
102 | exec $HOME/dc/complete "$newname" |
103 | fi |
104 | exit 0 |