KINGx - Das inoffizielle PlayStation Forum & News Portal
[WIP] Download Manager - Druckversion

+- KINGx - Das inoffizielle PlayStation Forum & News Portal (http://www.kingx.de/forum)
+-- Forum:    PS Vita / PSP (/forumdisplay.php?fid=1)
+--- Forum: Homebrew (/forumdisplay.php?fid=8)
+---- Forum: Development (/forumdisplay.php?fid=34)
+---- Thema: [WIP] Download Manager (/showthread.php?tid=52547)


[WIP] Download Manager - Total_Noob - 12.10.2011 11:39

Hey Leute,
Ich arbeite gerade an einem Projekt für die PSP. Wie ihr wisst ist der Download im Internet Browser ziemlich nervig. Nur 1 Download ist möglich und währendem könnt ihr nicht mal surfen...ziemlich nervig wenn man etwas Grosses runterlädt und 5 Minuten warten mussWink Deshalb hab ich ein Plugin geschrieben, welches 3 Downloads erlaubt (alle Downloads laufen mit der gleichen Kb/s) und die Downloads können im Hintergrund laufen. Da 3 Downloads mit der gleichen Geschwindligkeit laufen, könnte man theoretisch den Download in 3 Teilen zerlegen....wird es dann 3 Mal schneller downloaden?Wink Ich sagte theoretisch, weil ich den Download nicht seeken kann. Wenn jemand von euch reversen kann und Bock hat, der kann sceHttpReadData reversenSmile Ist diese Funktion reversed könnte die PSP 3 Mal schneller downloadenWink

Wenn ihr wollt könnte ich ein Video aufnehmen wo die Downloads im Hintergrund laufen...Wink

TN


RE: [WIP] Download Manager - PATTA - 12.10.2011 12:25

Total_Noob :
Wenn ihr wollt könnte ich ein Video aufnehmen wo die Downloads im Hintergrund laufen...Wink

TN


Wär cool von dir...ich kann mir nämlich nicht ganz vorstellen wie das aussehen soll^^

Das ist doch auch mit Netfront kompatibel,oder?


RE: [WIP] Download Manager - The Z - 12.10.2011 12:46

Hey das wäre nicht schlecht TN ;D
Schön mal wieder was von dir zu Hören ;D


RE: [WIP] Download Manager - gutster - 12.10.2011 14:16

Mach ein Video schalala xD
Echt geile Idee das Plugin lieb ich aufem iPod


RE: [WIP] Download Manager - dark-awesome - 12.10.2011 14:20

Geile Idee TN.
Was Sony nicht kann müssen eben die Hobby Devs ausbaden Big Grin


RE: [WIP] Download Manager - The Real Enigma87 - 12.10.2011 14:43

Hey TN auch mal wieder da *freu*

Ich wäre dafür das du das machstSmile

deine plugins waren nie schlecht und auf sowas haben schon echt viele leute gewartetSmile


RE: [WIP] Download Manager - taipangr - 12.10.2011 14:57

Das wäre geil dan könnte ich z.B von Zload (Das soll Werbung sein^^) 3 sachen auf einmal Downloaden Smile


RE: [WIP] Download Manager - ~Hook~ - 12.10.2011 16:08

Nice Wink
Schön wieder was von dem großen Master zu hören Wink

Könntest ja ein VIdeo machen Smile

lg


RE: [WIP] Download Manager - fsi09 - 12.10.2011 16:55

Wird das auch mit dem Netfront Beta 4 kompatibel sein ?


RE: [WIP] Download Manager - dortmunder112 - 12.10.2011 17:07

maan echt geil!

du hast es drauf TN.

Doofes Sony Big Grin

Keine vernünftige firmware mit z.B. Dateibrowser etc. rausbringen, aber sich alle 6 monate hacken lassen o.O,


RE: [WIP] Download Manager - ZappelFry - 12.10.2011 18:22

Ich hab ein paar Fragen:
-Ist es Netfront kompatible?
-Ist es möglich auch Downloads von one-click-hostern zu nutzen (z.B. megaupload,rapidshare,mediafire)?
-Wenn nein ist es möglich soetwas einzubauen?

Schön mal wieder was von dir zu sehen

LG
ZappelFry


RE: [WIP] Download Manager - ~Hook~ - 12.10.2011 18:24

ZappelFry :
-Ist es möglich auch Downloads von one-click-hostern zu nutzen (z.B. megaupload,rapidshare,mediafire)?
ZappelFry


Mit einem Flash-Plugin sicher Wink


RE: [WIP] Download Manager - thepspfreak98-2 - 12.10.2011 18:34

das is ja mal ne super geniale ideeBig Grin:DBig Grin:DBig Grin:DBig Grin


RE: [WIP] Download Manager - -blue7 - 13.10.2011 15:24

Total_Noob :
Deshalb hab ich ein Plugin geschrieben, welches 3 Downloads erlaubt (alle Downloads laufen mit der gleichen Kb/s) und die Downloads können im Hintergrund laufen. Da 3 Downloads mit der gleichen Geschwindligkeit laufen, könnte man theoretisch den Download in 3 Teilen zerlegen....wird es dann 3 Mal schneller downloaden?Wink

Glaubst du das wirklich? Big Grin Wenn man den Download in 3 Teile zerlegt oder 3 Downloads parallel laufen hat, dann lädt er dadurch nicht 3x so schnell herunter Wink Die maximale Geschwindigkeit wird dann nur auf die 3 Downloads gleichmäßig oder ungleichmäßig verteilt.


RE: [WIP] Download Manager - vista200 - 13.10.2011 15:30

Erstmal: Gute Idee!

Responses seeken geht natürlich nicht. Dazu wäre es ja erstmal erforderlich die Daten, die Du bekommst bis zu einem gewissen Punkt einfach zu verwerfen. Bis dahin sind die Daten aber über die Leitung gegangen.

Allerdings gibt es eine Möglichkeit, gewisse Teile einer Datei zu requesten:

Wie unter dieser Adresse nachzulesen ist, kannst Du mit "Range: bytes=<start>-<end>" im POST-Request-Header die Downloads quasi unterteilen und so getrennt laden.

Ob und wie viele Server das Verfahren unterstützen weiß ich nicht. Ein Versuch wär's auf jeden Fall wert.

Weiter so!


RE: [WIP] Download Manager - Total_Noob - 30.10.2011 21:52

Danke für den Tipp. Ich weiss ehrlich gesagt nicht viel über http^^


RE: [WIP] Download Manager - roxas950 - 31.10.2011 12:45

echt genial wieder was von dir zu hören ich hoffe das wird was ich werde das plugin benutzen


RE: [WIP] Download Manager - Mikedaburner09 - 31.10.2011 19:48

Total_Noob :
Hey Leute,
Ich arbeite gerade an einem Projekt für die PSP. Wie ihr wisst ist der Download im Internet Browser ziemlich nervig. Nur 1 Download ist möglich und währendem könnt ihr nicht mal surfen...ziemlich nervig wenn man etwas Grosses runterlädt und 5 Minuten warten mussWink Deshalb hab ich ein Plugin geschrieben, welches 3 Downloads erlaubt (alle Downloads laufen mit der gleichen Kb/s) und die Downloads können im Hintergrund laufen. Da 3 Downloads mit der gleichen Geschwindligkeit laufen, könnte man theoretisch den Download in 3 Teilen zerlegen....wird es dann 3 Mal schneller downloaden?Wink Ich sagte theoretisch, weil ich den Download nicht seeken kann. Wenn jemand von euch reversen kann und Bock hat, der kann sceHttpReadData reversenSmile Ist diese Funktion reversed könnte die PSP 3 Mal schneller downloadenWink

Wenn ihr wollt könnte ich ein Video aufnehmen wo die Downloads im Hintergrund laufen...Wink

TN


Gibt es nicht schon so ein Plugin?? war doch letztens erst in den News...
ich hab das schon lange auf meiner PSP o.O

allerdings sind da noch ziemlich nervige Grafikbugs wenn man den manager öffnet -.-


RE: [WIP] Download Manager - Total_Noob - 31.10.2011 19:50

Ioh, download manager, von mirWink stelle cpu auf 333 das wird das problem lösenWink


RE: [WIP] Download Manager - _Kai_ - 31.10.2011 20:05

wurzelbums :
Ob und wie viele Server das Verfahren unterstützen weiß ich nicht. Ein Versuch wär's auf jeden Fall wert.


RangeByte Header sind in der RFC 2616 festgelegt und Standard in HTTP/1.1. Der Header wird von allen gängigen, mir bekannten Webservern unterstützt.

Erst kürzlich gab es ein Apache Update, weil es durch Probleme beim parsen dieser Header möglich war, gezielt den kompletten memory auszulasten und somit den Webserver unerreichbar zu machen.


RE: [WIP] Download Manager - taipangr - 31.10.2011 20:44

Bei mir funktioniert dieses Plugin perfekt Smile Danke Total Noob aber eine Frage habe ich noch^^
Total (Noob)? Wieso Noob Big Grin

Mfg


RE: [WIP] Download Manager - PATTA - 31.10.2011 21:19

taipangr :
Bei mir funktioniert dieses Plugin perfekt Smile Danke Total Noob aber eine Frage habe ich noch^^
Total (Noob)? Wieso Noob Big Grin

Mfg


Nickname^^

Warum ist bei einer Ampel Grün unten? Cool


RE: [WIP] Download Manager - Flik - 31.10.2011 21:52

taipangr :
Danke Total Noob aber eine Frage habe ich noch^^
Total (Noob)? Wieso Noob Big Grin


Ein Grund könnte sein, weil als er in der PSP Scene angefangen hat ein Total Noob war und sich deshalb so genannt hat. Mit der Zeit hat er sehr sehr viel über die PSP ect. gelernt, aber den Namen hat er behalten.

Das ist eine Legende, wie er wirklich den Namen bekommen hat, weiß keiner.^^


RE: [WIP] Download Manager - vista200 - 31.10.2011 23:27

PSP-Hilfe :

wurzelbums :
Ob und wie viele Server das Verfahren unterstützen weiß ich nicht. Ein Versuch wär's auf jeden Fall wert.


RangeByte Header sind in der RFC 2616 festgelegt und Standard in HTTP/1.1. Der Header wird von allen gängigen, mir bekannten Webservern unterstützt.


Aber nur, wenn das Request per POST gesendet wird, oder? Ich meine... Jedes GET-Request kann zu POST umgewandelt werden, das einzige, was sich dann ändert, ist, dass entsprechend die POST-Daten mitgesendet werden, die URL der GET-Anfrage bleibt ja gleich.

Also: Jedes sceHttpSendRequest muss gepatcht werden...

Code:
int sceHttpSendRequest_patched(int requestid, void * data, unsigned int datasize) {
    char* new_data;
    if (data != NULL) sprintf(new_data, "%sRange: bytes=%d-%d\n", data, range_start, range_end);
    else sprintf(new_data, "Range: bytes=%d-%d\n", range_start, range_end);
    return sceHttpSendRequest_real(requestid, new_data, strlen(new_data));
}


Vielleicht bin ich bei dem ganzen Java-Krams, den ich zur Zeit mache, etwas aus der Übung gekommen...

Der einzige Nachteil bei dem Ganzen ist, dass Du die Datei erstmal anfragen musst. Und zwar, bis Du die sceHttpGetContentLength-Methode aufrufen kannst. Da kannst Du dann die Länge der Datei in beliebig viele Parts splitten und diese dann in je einem eigenen Thread laufen lassen.

Ich weiß nicht, ob man dann via sceIoOpenAsync und sceIoWriteAsync verteilt über mehrere Threads in eine Datei schreiben kann. Man müsste ja immer bis zum Start zurück gehen und von dort wieder den absoluten Wert vorwärts-seeken, bis man an der Stelle ist, an der man dann endlich schreiben darf.

Wie gesagt, ich verurteile erstmal keine Ideen Wink


RE: [WIP] Download Manager - _Kai_ - 01.11.2011 00:49

wurzelbums :

PSP-Hilfe :

wurzelbums :
Ob und wie viele Server das Verfahren unterstützen weiß ich nicht. Ein Versuch wär's auf jeden Fall wert.


RangeByte Header sind in der RFC 2616 festgelegt und Standard in HTTP/1.1. Der Header wird von allen gängigen, mir bekannten Webservern unterstützt.


Aber nur, wenn das Request per POST gesendet wird, oder? Ich meine... Jedes GET-Request kann zu POST umgewandelt werden, das einzige, was sich dann ändert, ist, dass entsprechend die POST-Daten mitgesendet werden, die URL der GET-Anfrage bleibt ja gleich.


Bei einem GET Request können benötigte Parameter nur über die URI übergeben werden, je nach Einsatzgebiet gibt es also gute Gründe, sie per POST zu übertragen.

- Die Länge der URI ist in einigen Clients beschränkt, im IE z.b. 2048 Bytes.
- Bei einer GET Anfrage landen die übergebenen Parameter meistens in den Logs.
- Je nach Einsatzgebiet werden bei der Übertragung per GET CSRF Attacken möglich, wenn keine Prüfsumme zum Abgleich mit übertragen wird.
- Einige weitere die mir spontan nicht einfallen.

Bei einem POST Request hingegen können zusätzlich zur URI auch noch weitere Daten beliebiger Länge mit übertragen werden.

Hier ein kleines Beispiel zu einem einfachen GET Request in PHP:

PHP-Code:
<?php

$fp 
fsockopen("127.0.0.1"80$errno$errstr30);

$header  "GET /var=test&amp;var2=test2 HTTP/1.1\r\n";
$header .= "Host: 127.0.0.1\r\n";
$header .= "Connection: Close\r\n";

fputs($fp$header);

// Antwort abfragen
// ...

?>


Und hier ein Beispiel zur Übertragung einer Datei per POST:

PHP-Code:
<?php

$boundary 
substr(md5(mt_rand()), 0,16);

$fp fsockopen("127.0.0.1"80$errno$errstr30);

$header  "POST /uri HTTP/1.1\r\n";
$header .= "Host: 127.0.0.1\r\n";
$header .= "Content-type: multipart/form-data; boundary=$boundary\r\n";
$header .= "Connection: Close\r\n";

// Zu übertragende Daten
$content .= "--".$boundary."\r\n";
$content .= "Content-Disposition: form-data; name=\"fileupload\"; filename=\"image.gif\"\r\n";
$content .= "Content-Type: image/gif\r\n\r\n";
$content .= file_get_contents("image.gif")."\n\r\n";
$content .= "--".$boundary."--\r\n";

$header .= "Content-length: "strlen($content) ."\r\n\r\n";

fputs($fp$header);
fputs($fp$content);

?>


Und um auf deine Frage zurück zu kommen, Range:bytes kann natürlich auch bei GET oder HEAD abfragen verwendet werden.


RE: [WIP] Download Manager - vista200 - 01.11.2011 23:23

PSP-Hilfe :
Und um auf deine Frage zurück zu kommen, Range:bytes kann natürlich auch bei GET oder HEAD abfragen verwendet werden.


Aber dieser Parameter würde bei GET-Requests nicht in der URI, sondern im Request-Header angegeben werden. Und implementierungstechnisch ist es so, dass die sceHttp-Library Daten, die nicht zur URL gehören, aber trotzdem übertragen werden sollen, in diesem POST-Char-Array untergebracht werden. Und damit bliebe quasi nur noch die Möglichkeit, wie ich oben ja in meinem Beispiel gepostet habe, das Request zu einem POST-Request zu machen, diese Range-Anweisung einzubauen und dieses POST-Request dann an den Server zu senden. Eine andere Möglichkeit fällt mir nicht ein.

Kannst Du mit Wireshark oder so mal einen HTTP-Header mit Range-Anweisung aufzeichnen und zur Verfügung stellen? Dann kann man mit der sceHttp-Bibliothek spielen und schauen, ob man auf das selbe Ergebnis kommt oder ob man sich mit Sockets eine eigene Bibliothek programmieren muss. Das wäre großartig! Smile


RE: [WIP] Download Manager - _Kai_ - 02.11.2011 14:29

wurzelbums :
Aber dieser Parameter würde bei GET-Requests nicht in der URI, sondern im Request-Header angegeben werden. Und implementierungstechnisch ist es so, dass die sceHttp-Library Daten, die nicht zur URL gehören, aber trotzdem übertragen werden sollen, in diesem POST-Char-Array untergebracht werden. Und damit bliebe quasi nur noch die Möglichkeit, wie ich oben ja in meinem Beispiel gepostet habe, das Request zu einem POST-Request zu machen, diese Range-Anweisung einzubauen und dieses POST-Request dann an den Server zu senden. Eine andere Möglichkeit fällt mir nicht ein.


Mit den Libs der PSP kenne ich mich nicht aus aber ein POST Request wäre hier nur von nöten, wenn das angeforderte Dokument vom Server anhand den im POST enthaltenen Daten dynmisch erzeugt werden würde, was ja wahrscheinlich so gut wie nie der Fall ist.

Wenn du einen abgebrochenen Download ab einer bestimmten Stelle fortsetzen willst reicht folgender Request völlig aus:

GET /downloads/datei.zip HTTP/1.1
Host: bla.de
Range: bytes=10000-

Der Server antwortet mit dem Statuscode 206 (Partial Content) und liefert die angeforderte Datei ab dem 10000. Byte aus.

Den Header in deinem POST Char Array unterzubringen wäre Schwachsinn. Sende einen normalen GET Request in dieser Form.

wurzelbums :
Kannst Du mit Wireshark oder so..


Für sowas kann ich dir das Firefox Plugin "Live HTTP headers" empfehlen.


RE: [WIP] Download Manager - vista200 - 02.11.2011 20:46

Ich habe mal ein bisschen experimentiert... Und wie es scheint, müsste man doch mit Sockets was eigenes schreiben, weil die Methoden der sceHttp-Library die Ranges nicht übertragen kann.

Die GET-URI kann man übertragen, das ist kein Problem, aber Ranges werden nicht gesendet.
Die "POST-URI" kann man übertragen, die übertragenen Daten im POST-Request-Body auch, aber die abverlangten Modifier nach "Host:" lassen sich nicht senden.

Total_Noob hat die Methoden ja gepatcht, ob er die reversed hat weiß ich gerade nicht. Wenn ja, dann kann man darauf aufbauend ja mit Sockets arbeiten.

Erstmal schauen, was Quelle hat Wink