So ich habe noch ein wenig geschaut und rapidshare_ul.sh ein wenig geändert:[/PHP]
Code:
[NOPARSE]#!/bin/ash
uploadrapidshare() {
local ufile="$1" acctype="${2:-free}" user="$3" passwd="$4" tmpfile="$tmp/ul_result.htm"
local bfile updata md5_hash md5 ul_size bs cursize resumed complete params \
host fileid killcode cursize number chunks chunksize urlext \
skip retVal down delete percent uploaded \
premacc collacc savedfiles forbiddenfiles retry=0
chunksize=${rapidshare_chunksize:-2048}
if [ ! -f "$ufile" ];then
echo "Upload-File existiert nicht: $ufile"
return 1
fi
bfile="$($BBox basename "$ufile")"
updata="$tmp/ul_$bfile.uploaddata"
ul_size=$(filesize "$ufile")
# Is Archive-File and file is to small
# .zip\| : some zip programs don't work...
if [ "$(echo "$ufile" | grep -ci '\(\.rar\|.7z\)$')" = 1 \
-a "$rapidshare_filesize" -gt 0 \
-a "$ul_size" -lt "$rapidshare_filesize" \
-a "$ul_size" -gt "$rapidshare_filesizeMin" \
];then
msg "Datei vergrößern auf mind. ${rapidshare_filesize}Kb"
( cd $pdir/bin; ./fill_null.sh "$ufile" "$rapidshare_filesize" )
ul_size=$(filesize "$ufile")
fi
echo "Upload File Size: $ul_size Bytes"
echo "Berechne MD5-Hash von Datei $bfile (Size: $ul_size Bytes)"
curl_msg "Berechne MD5-Hash von Datei $bfile (Size: ${ul_size} Bytes)"
md5_hash=$($BBox md5sum "$ufile" | sed -n -e 'y/abcdef/ABCDEF/' -e 's/\([0-9A-F]\+\) .*/\1/p')
echo "Starte Chunk Upload: $bfile"
bs=$(($chunksize*1000))
[ $bs -eq 0 ] && bs=300000000
cursize=0
limit_bandwidth
date +%s >$ramTmp/ul_progress.start
echo -n $ul_size >$ramTmp/ul_progress.size
echo -n "$bfile" >$ramTmp/ul_progress.file
echo -n 0 >$ramTmp/ul_progress.percent
echo -n 0 >$ramTmp/ul_progress.sent
rm -f $ramTmp/ul_progress.msg
while [ $cursize -lt $ul_size ];do
cursize=0
resumed=false
complete=false
params="-F rsapi=1 -y 120 -Y 1 --limit-rate ${ullimit}"
reconnectEnabled && reconnect_disable
if ( ! $resumed );then
if [ -f "$updata" ];then
md5=$(sed -n -e 's/md5: \(.*\)/\1/p' "$updata")
if [ -n "$md5" -a "$md5" != "$md5_hash" ];then
echo "Cannot use previously uploadata, because md5-hash differ ($md5!=$md5_hash)"
curl_msg "Cannot use previously uploadata, because md5-hash differ ($md5!=$md5_hash)"
rm -f "$updata"
else
host=$(sed -n -e 's/host: \(.*\)/\1/p' "$updata")
fileid=$(sed -n -e 's/fileid: \(.*\)/\1/p' "$updata")
killcode=$(sed -n -e 's/killcode: \(.*\)/\1/p' "$updata")
cursize=$($pdir/bin/curl -$instance -s ${proxy}"http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=checkincomplete&fileid=$fileid&killcode=$killcode")
# Fehlermeldung?
if [ "$cursize" != "${cursize#ERROR:}" ];then
errmsg "Upload Chunk fortsetzen fehlgeschlagen: $ufile ($cursize)"
curl_msg "Upload Chunk fortsetzen fehlgeschlagen: $ufile ($cursize)"
echo -en "Bitte poste folgende debug Meldungen:\n[code]\nURL: $host/cgi-bin/rsapi.cgi?sub=checkincomplete&fileid=$fileid&killcode=$killcode\n"
cat "$updata"
echo -en "
\n"
rm -f "$updata"
return 3
elif [ -z "$cursize" ];then
echo "Fehler keine Größe für Teilupload erhalten"
retry=$(($retry+1))
if [ $retry -gt 5 ];then
echo "Mehr als $retry Versuche nach Fehler, gebe Upload auf!"
break
fi
continue
fi
percent=$(( $(( $(($cursize/1024)) * 100)) / $(($ul_size/1024)) ))
uploaded=$(($cursize/1024))
echo -n $percent >$ramTmp/ul_progress.percent
echo -n ${uploaded}k >$ramTmp/ul_progress.sent
echo "Upload-Gesamt: $percent% (${uploaded}k von $(($ul_size/1024))k)"
resumed=true
fi
fi
if ( ! $resumed );then
number=$($pdir/bin/curl -$instance -s ${proxy}"http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=nextuploadserver")
host="http://rs${number}.rapidshare.com"
fi
fi
if [ $ul_size -gt $bs ];then
chunks=true
chunksize=$(($ul_size-$cursize))
if [ $chunksize -gt $bs ];then
chunksize=$bs
else
complete=true
fi
else
chunks=false
chunksize=$ul_size
fi
if ( $resumed );then
urlext="cgi-bin/uploadresume.cgi"
params="$params -F fileid=$fileid -F killcode=$killcode"
if ( $complete );then
params="$params -F complete=1"
fi
else
urlext="cgi-bin/upload.cgi"
# free / premium / collector
case $acctype in
(f*)
echo "Free Upload"
acctype=f
user="----"
;;
([cm]*)
params="$params -F freeaccountid=$collusername -F password=$collpass"
echo "Collector Upload: user=$collusername"
acctype=c
user="$collusername"
;;
(p*)
params="$params -F login=$premuser -F password=$prempass"
echo "Premium Upload: user=$premuser"
acctype=p
user="$premuser"
;;
*) errmsg "Unknown Upload Account-Type ($acctype)!"
;;
esac
if ( $chunks );then
params="$params -F incomplete=1"
fi
fi
skip=$(($cursize/$bs))
# --silent
$BBox dd bs=$bs count=1 skip=$skip "if=$ufile" 2>/dev/null | \
$pdir/bin/curl -$instance -F "filecontent=@-;filename=$bfile" --dump-header "$tmp/ul_head.txt" ${proxy}$params $host/$urlext -o "$tmpfile" 2>$ramTmp/ul_progress
retVal=$?
rm -f $ramTmp/ul_progress
if [ -n "$retVal" -a "$retVal" != 0 ];then
retry=$(($retry+1))
[ $retVal = 55 ] && continue
[ $retVal = 130 ] && {
echo "Upload von Nutzer abgebrochen"
return 2
}
echo "Unbekannter CURL-Fehler: $(curl_error_code "$retVal"). Wiederhole Chunk Upload!?"
#??? Wirklich für alle Errocodes != 0 den Upload erneut ausführen???
continue
fi
reconnect_enable
cursize=$(($cursize+$bs))
if ( $resumed );then
if ( $complete );then
newhash=$(sed -n -e 'y/abcdef/ABCDEF/' -e 's/^COMPLETE,\([0-9A-F]\+\)/\1/p' "$tmpfile")
if [ -n "$newhash" ];then
if [ "$newhash" = "$md5_hash" ];then
success=1
echo "Upload erfolgreich abgeschlossen: $bfile"
else
echo "Upload fehlgeschlagen?: berechneter Hash stimmt nicht mit erhaltenem Hash vom Server überein"
echo "MD5-Lokal :$md5_hash"
echo "MD5-Server:$newhash"
fi
else
errmsg "Upload fehlgeschlagen: Kein Hash für Uploaddatei erhalten: Dateiinhalt<code>($(cat $tmpfile))</code><br>Header<code>($(cat $tmp/ul_head.txt))</code>"
fi
fi
else
# UPLOAD correct (Login/Passwd) as wished: free / premium / collector ?
premacc=$(sed -n -e 's/.* premiumaccount=\([0-9]*\).*/\1/p' "$tmpfile")
collacc=$(sed -n -e 's/.* freeowner=\([0-9]*\).*/\1/p' "$tmpfile")
savedfiles=$(sed -n -e 's/savedfiles=\([0-9]*\).*/\1/p' "$tmpfile")
forbiddenfiles=$(sed -n -e 's/* forbiddenfiles=\([0-9]*\).*/\1/p' "$tmpfile")
if [ "$savedfiles" -eq 0 -o "$forbiddenfiles" -gt 0 ];then
errmsg "Failed Upload: savedfiles:$savedfiles / forbiddenfiles: $forbiddenfiles"
fi
case $acctype in
(f*)
if [ "$collacc" != 0 -o "$premacc" != 0 ];then
errmsg "Free Upload WARN: got a collector/premium ID: ($collacc/$premacc)!"
fi
;;
([cm]*)
if [ "$collacc" = 0 ];then
errmsg "Collector Upload FAILED: wrong User/Passwd?"
fi
;;
(p*)
if [ "$premacc" = 0 ];then
errmsg "Premium Upload FAILED: wrong User/Passwd?"
fi
;;
esac
fileid=$(sed -n -e 's/File1\.1.*files\/\([0-9]\+\)\/.*/\1/p' "$tmpfile")
killcode=$(sed -n -e 's/File1\.2.*=\([0-9]\+\)$/\1/p' "$tmpfile")
if [ -n "$killcode" -a -n "$fileid" ];then
echo -en "md5: $md5_hash\nhost: $host\nfileid: $fileid\nkillcode: $killcode\n" >"$updata"
cat "$tmpfile" >>"$updata"
down=$(sed -n -e 's/^File1\.1=\(.*\)$/\1/p' "$updata")
delete=$(sed -n -e 's/^File1\.2=\(.*\)$/\1/p' "$updata")
ul_saveLog "$bfile" "$down" "$delete" "$acctype" "$user"
fi
# Chunk Größe reicht aus um die gesamte Datei auf einmal hochzuladen?
# Upload ist dann beendet
if [ $cursize -ge $ul_size ];then
success=1
echo "Upload erfolgreich abgeschlossen (keine Chunks notwendig): $bfile"
break
fi
fi
retry=0
done
if [ $success = 1 ];then
rm -f "$updata"
fi
return 0
}
[/NOPARSE][/CODE]
Bei Dateien, wo kein Chunkupload notwendig ist, sprich kleinere Dateien (habs mit Textfiles < 1kb getestet) ging ein Upload ohne Probleme in meinen RSPro-Acc.
Code:
### uploadrapidshare: /var/media/ftp/Corsair-FlashVoyager-01/uploads/Test8.txt
16:25:53 Uhr: uploadrapidshare
Upload File Size: 471 Bytes
Berechne MD5-Hash von Datei Test8.txt (Size: 471 Bytes)
Starte Chunk Upload: Test8.txt
Bandbreitenbegrenzung ist deaktiviert.
Premium Upload: user=***********************
Uploaded: file=Test8.txt DOWNLOAD=https://rapidshare.com/files/****/Test8.txt DELETE=https://rapidshare.com/files/******/Test8.txt?killcode=*******
Upload erfolgreich abgeschlossen (keine Chunks notwendig): Test8.txt
Upload-OK:16:25: time: size:471 speed:
7 Dateien hochgeladen
Upload beendet.
FritzLoad beendet
Bei größeren Files sieht es für mich so aus, als wenn das Skript keine fileid und oder den killcode (beides von der Funktion checkincomplete benötigt) zurück bekommt. Leider kenn ich mich mit den ganzen Unixtools nicht so aus, um das Shellskript komplett zu verstehen
Code:
### uploadrapidshare: /var/media/ftp/Corsair-FlashVoyager-01/uploads/Test1_1.rar
16:34:33 Uhr: uploadrapidshare
Upload File Size: 6758050 Bytes
Berechne MD5-Hash von Datei Test1_1.rar (Size: 6758050 Bytes)
Starte Chunk Upload: Test1_1.rar
Bandbreitenbegrenzung ist deaktiviert.
Premium Upload: user=***
FAILED: 16:36: Failed Upload: savedfiles: / forbiddenfiles:
Premium Upload: user=***
FAILED: 16:37: Failed Upload: savedfiles: / forbiddenfiles:
Premium Upload: user=***
Aber vielleicht reichen meine Änderungen und Gedanken für die Profis aus
Edit: ARGS jetzt zerhauts den Code, da in den Zeile 78-79 die Boardcodetags verwendet werden
Edit frank_m24: Ein paar NOPARSE Tags an die richtige Stelle, dann ist das Problem gelöst.