Hallo, ich habe mal etwas an den perl-Dateien rumgespielt und folgendes integriert:
1. autoreconnect des Routers (für neue IP, um die Wartezeit zu umgehen):
Das funktioniert über ein skript namens reconnect.sh, was im RSDM Ordner liegen muss (chmod auf ausführbar nicht vergessen)
Rich (BBCode):#!/bin/sh # reconnects the router to optain a new IP # more POST methods can be found at: # http://ww.paehl.de/reconnect # reconnect code for T-COM Speedport W701V (FW >= 33.04.45) wget --post-data "login:command/password=XXXXXXXX" "http://192.168.2.1/cgi-bin/webcm" -O /dev/null wget --post-data "connection0:settings/enabled=0" "http://192.168.2.1/cgi-bin/webcm" -O /dev/null wget --post-data "connection0:settings/enabled=1" "http://192.168.2.1/cgi-bin/webcm" -O /dev/null wget --post-data "security:command/logout=1" "http://speedport.ip/cgi-bin/webcm" -O /dev/null
2. Downloads "pausieren". In Anführungszeichen deswegen, weil ein Download nur zwischen 2 Dateien angehalten werden kann. Dazu muss man im RSDM Ordner eine datei namens "pause" anlegen (mit "touch pause" in per telnet oder ssh). Solange diese Datei existiert wird ein aktiver Download nicht fortgesetzt bzw. kein neuer gestartet. Wenn man sie löscht, geht es weiter.
Für beide erweiterungen braucht man dann diese free.pl (Funktioniert somit beides nur wenn man sich als "free" einloggt. Ich habe die neueste Version 4.2.9 des RSDM
Rich (BBCode):#!/usr/bin/perl my $link = $ARGV[0]; my $logpath = $ARGV[1]; my $downloaddir = $ARGV[2]; my $wget = $ARGV[3]; my $done = 0; my $time_between_checks = 30; my @filename = split(/\//, $link); my $filename_short = $filename[5]; my $filename_new = $logpath."/free_fd_".$filename[5].".log"; exec(`$wget -c $link --output-document=free_log.txt`); open(FILE, "free_log.txt") or die "Datei konnte nicht gefunden werden: $!\n"; while(<FILE>){ $chunk_1 .= $_; } close(FILE); exec(`chmod 777 free_log.txt`); exec(`rm free_log.txt`); if($chunk_1 =~ m#<form id="ff" action="(.*)" method="post">#g){ print $1."<<<<<<<\n\n"; } print ">>>>>>>>>>>>>>>>>>>\n\n"; #Pausieren? while (-e "pause"){ sleep($time_between_checks); } do{ if (-e "downloading"){ $done = 0; print "there is already a download waiting/running\n"; sleep($time_between_checks); }else{ print "filename_short: " . $filename_short."\n\n"; print "path: " . $downloaddir."\n\n"; print "combined: " . $downloaddir.$filename_short."\n\n"; $combined = $downloaddir.$filename_short; # datei schon vorhanden? abbruch bzw. sprung zur naechsten datei! die "File '$filename_short' already exists. exit here!\n" if -e $combined; # delete log-file unlink($filename_new); exec(`$wget -c $1 --output-document=free_log2.txt --post-data="dl.start=Free user"`); open(FILE2, "free_log2.txt") or die "Datei konnte nicht gefunden werden: $!\n"; while(<FILE2>){ $chunk_2 .= $_; } close(FILE2); exec(`chmod 777 free_log2.txt`); exec(`rm free_log2.txt`); print "done: ".$done."\n\n\n"; if($chunk_2 =~ m#<form name="dlf" action="(.*)" method="post">#g){ print $1."<<<<\n"; $newlink = $1; print ">>>>\n\n"; if($chunk_2 =~ m#var c=(.*);#g){ my $wartezeit = $1; print "\n\nwartezeit: ".$wartezeit."\n\n"; if($wartezeit == 0){ # print "Los gehts sofort!\n\n"; exec(`touch downloading`); print "Los gehts sofort!\n\n"; print $filename_new."\n\n"; exec(`/bin/echo -e "$link \n" > $filename_new`); exec(`$wget --tries=1 -c $newlink -P "$downloaddir" --append-output=$filename_new --progress=dot:binary &`); $done = 1; exec(`rm downloading`); }else{ exec(`touch downloading`); print $wartezeit . " Sekunden warten ...\n\n"; sleep($wartezeit); print "Los gehts!\n\n"; print $filename_new."\n\n"; exec(`/bin/echo -e "$link \n" > $filename_new`); exec(`$wget --tries=1 -c $newlink -P "$downloaddir" --append-output=$filename_new --progress=dot:binary &`); $done = 1; exec(`rm downloading`); } }else{ print "no match\n\n"; } }elsif($chunk_2 =~ m#is already downloading a file#g){ print "f*ckin' leecher!\n\n"; print "naechster check in $time_between_checks sekunden!\n\n"; sleep($time_between_checks); }elsif($chunk_2 =~ m#Or try again in about (\d*) minutes.#){ print "download limit reached. rs advises us to try again in ".$minutes."\n\n"; #sleep(int($1)*60); system('"./reconnect.sh"'); sleep($time_between_checks); }else{ print "...\n\n"; } } } until($done == 1)
Vielleicht hat ja jemand so viel Ahnung von PHP, dass er dass Erzeugen der "pause"-Datei bzw. dass löschen hinter einen Button legen kann, den man im RSDM Menü sieht. Das wäre cool (header.php könnte dafür in Frage kommen). Da könnte dann auch gleich noch ein button für einen manuellen reconnect sein.
Es gibt jetzt eine neue Version des RSDM. Da kann man sein Reconnect direkt in die Config eintragen. D.h. man braucht jetzt nur noch das passende Skript für seinen Router (siehe oben) und muss nichts mehr al Quelltext ändern.