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