X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=config%2Fdc-filter;h=1fcb45e5fd0a375a803ce06dfd2e58a7a579e101;hb=7ebc7902c240e0417fd0ecfc809066ff13ab293f;hp=0b31bbf9a92173dbadf675800bbbff69619b0f4f;hpb=d3372da97568d5e1f35fa19787c8ec8af93a0435;p=doldaconnect.git diff --git a/config/dc-filter b/config/dc-filter old mode 100644 new mode 100755 index 0b31bbf..1fcb45e --- a/config/dc-filter +++ b/config/dc-filter @@ -1,20 +1,29 @@ -#!/bin/sh +#!/bin/bash + trap "" SIGHUP SIGPIPE + if [ ! -d $HOME/dc ]; then mkdir $HOME/dc; fi if [ ! -d $HOME/dc/done ]; then mkdir $HOME/dc/done; fi if [ ! -d $HOME/dc/resume ]; then mkdir $HOME/dc/resume; fi if [ ! -d $HOME/dc/users ]; then mkdir $HOME/dc/users; fi exec 2>>$HOME/dc/filterlog cd $HOME/dc -unset speedrec -for dir in /usr/libexec /usr/local/libexec; do + +unset speedrecpath +IFS=: binpath=($PATH) +lepath=() +for dir in "${binpath[@]}"; do + lepath=("${lepath[@]}" "${dir%/bin}/libexec") +done +for dir in "${lepath[@]}" /usr/libexec /usr/local/libexec; do if [ -x "${dir}/speedrec" ]; then - speedrec="${dir}/speedrec" + speedrecpath="${dir}/speedrec" fi done -if [ -z "$speedrec" ]; then +if [ -z "$speedrecpath" ]; then echo "could not find speedrec - using cat instead" >&2 fi + maxsize=0 unset resfile unset infofile @@ -43,10 +52,12 @@ while [ -z "$resfile" -a "$found" = y ]; do fi fi done + unset "${!dcarg_@}" if [ -n "$resfile" ]; then . "${resfile}.info" fi + origname="$1" shift filesize="$1" @@ -60,6 +71,7 @@ while [ $# -gt 1 ]; do shift declare "dcarg_$rec"="$val" done + if [ -z "$resfile" ]; then resfile="$(mktemp resume/resXXXXXX)" chmod 644 "$resfile" @@ -67,23 +79,38 @@ if [ -z "$resfile" ]; then >"${resfile}.lock" fi declare -p origname filesize "${!dcarg_@}" >"${resfile}.info" -echo "resume $maxsize" -if [ -z "$speedrec" ]; then - cat >>"$resfile" + +echo "resume $maxsize" 2>/dev/null # Avoid EPIPE warning if the server has already closed the transfer. + +if [ -z "$speedrecpath" ]; then + speedrec=(cat) else + speedrec=("$speedrecpath" "$HOME/dc/users/$(tr / _ <<<"$peername")") peerfile="$(tr / _ <<<"$peername")" - "$speedrec" "$HOME/dc/users/$peerfile" >>"$resfile" fi +if ! which tthsum >/dev/null 2>&1; then + tthsum=(cat) +else + tthsum=(tthsum -6 -F 3 -s "${resfile}.tthstate" -f) +fi +"${speedrec[@]}" | "${tthsum[@]}" 3>"${resfile}.tthfinal" >>"$resfile" + size="$(wc -c <"$resfile")" + if [ "$size" -eq 0 ]; then - rm -f "$resfile" "${resfile}.info" "${resfile}.lock" + rm -f "$resfile" "${resfile}.info" "${resfile}.lock" "${resfile}.tthstate" "${resfile}.tthfinal" exit 1 fi -rm -f "${resfile}.lock" + if [ "$size" -lt "$filesize" ]; then + rm -f "${resfile}.lock" "${resfile}.tthfinal" exit 1 # Exit code != 0 means restart transfer fi -rm -f "${resfile}.info" + +tth="$(cat "${resfile}.tthfinal")" +if [ -z "$tth" ]; then unset tth; fi + +rm -f "${resfile}.info" "${resfile}.lock" "${resfile}.tthstate" "${resfile}.tthfinal" destdir="$HOME/dc/done" @@ -93,7 +120,7 @@ if [ -e "$newname" ]; then fi mv "$resfile" "$newname" if [ -x $HOME/dc/complete ]; then - export "${!dcarg_@}" + export "${!dcarg_@}" tth filesize exec $HOME/dc/complete "$newname" fi exit 0