xfer ---- Universelles Dateiübertragungsprogramm (c) 2003,2004 by Thomas Rachel Dieses Programm ist freie Software und steht unter der GPL. Siehe auch gpl.txt. Teile dieses Programmes sind hergeleitet aus dem "RSA Data Security, Inc. MD5 Message-Digest Algorithm". (Parts of this program are "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm".) Unterstützt werden folgende Betriebsarten: - Einmaliges Senden des Inhaltes einer oder mehrerer Dateien an einen bestimmten Rechner -> xfer send oder xfer send:Rechner@Port - Mehrmaliges Senden des Inhaltes einer Datei an einen bestimmten Rechner, sobald der Dateiinhalt sich ändert -> xfer autosend ! (Rechnername mit ! anfangen lassen) (nicht unter Linux!) oder xfer autosend:: - Einmaliges Abrufen von Daten für eine oder mehrere Dateien von einem bestimmten Rechner -> xfer recv xfer recv:: - Erwarten des Inhaltes einer oder mehrerer Dateien einmal -> xfer recv -l [] oder xfer recv:[] mehrmals -> xfer recv -L [] oder xfer recv::[] Statt -l kann auch . oder - geschrieben werden, statt -L auch .. oder -- Hier wird in Dateiname %1/%2/%3/%4 umgesetzt -> siehe dazu die Hilfe, die beim Aufruf mit fhlcaser Parameterzahl ausgegeben wird. Wird nicht angegeben, wählt das System einen aus und gibt ihn an. "mehrmals" geht nur mit einer Datei. - Bereitstellen des Inhaltes einer oder mehrerer Dateien zum Abruf einmal -> xfer send -l [] oder xfer send:[] mehrmals -> xfer send -L [] oder xfer send::[] Statt -l kann auch . oder - geschrieben werden, statt -L auch .. oder -- Wird nicht angegeben, wählt das System einen aus und gibt ihn an. "mehrmals" geht nur mit einer Datei. - Bereitstellen einer oder mehrerer Dateien zum Abruf durch einen Browser (HTTP) einmal -> xfer [a]http -l [] oder xfer send:[] mehrmals -> xfer [a]http -L [] oder xfer send:[] Statt -l kann auch . oder - geschrieben werden, statt -L auch .. oder -- "mehrmals" geht nur mit einer Datei. Wird nicht angegeben, wählt das System einen aus und gibt ihn an. Bei dieser Betriebsart empfiehlt es sich jedoch, Port 80 zu verwenden, sofern noch frei. Bei Verwendung von ihttp oder i statt ahttp wird der Inhalt mit "Content-Disposition: inline" übermittelt; dadurch sehen sich manche Browser eher dazu angeregt, den Dateiinhalt darzustellen anstatt abzuspeichern. denkbare, aber sinnlose Modi: - xfer [i|a]http bzw. xfer [i|a]http:: -> HTTP-Modus macht nur als Server Sinn - es gibt kein Gegenpart, der damit umgehen könnte ACHTUNG: Das Programm wurde bisher ausschließlich von mir getestet und es ist daher nicht ausgeschlossen, daß es noch Fehler beinhaltet. Insbesondere der autosend-Modus noch wenig getestet, (unter Linux funktioniert er gar nicht), ebenso kann auf NT/2000/... die Verwendung von StdIn/StdOut ('-' oder '[0]' als Dateiname) Probleme machen. Hinweis: Im Servermodus zeigt das Programm alle dem Rechner zugeordneten IPs an. Dadurch hat man die Möglichkeit, dem Gegenüber die richtige mitzuteilen. Bekommt man mehrere angezeigt, wird in den meisten Fällen nur eine davon erfolgversprechend sein: dann nämlich gehört evtl. eine zu der Netzwerkkarte, eine andere bspw. zu irgend einem anderen Adapter und eine weitere schließlich zur DFÜ-Verbindung. Im Fall, daß eine VPN-Verbindung vorliegt, ist die entsprechende IP u.U. nicht dabei und muß separat (über das VPN-Programm) ermittelt werden. Falls die Datei über HTTP angeboten wird, ist zu beachten, daß jeglicher Browserzugriff auf den angegebenen Port dazu führt, daß die Datei übermittelt wird. Die Funktionalität ist also sehr rudimentär implementiert, dafür bestehen auch quasi keine Sicherheitsrisiken. Änderungsverlauf: ----------------- V2004-08-23 - beim Absenden zwischen jeder Datei 500 ms Pause lassen - Fehler mit fehlendem Ausgabe-Header korrigiert V2004-08-08 - stralloc leicht modifiziert -> 3/2- Erweiterung; Speicherleck - zusätzliche Hashes hinzugefügt: MD4 sowie der darauf aufbauende ed2k-Hash - StdIO-Erkennung bzw. -markierung modifiziert V2004-06-29 - zusätzliche Syntax hinzugefügt, ebenso weiteren Befehl: "autosend" - Parsing der Befehle umgestrickt V2004-04-29 - (leichte Änderung der Source-Struktur - OS-Abhängigkeit nur noch in os_depend.h) (V2004-03-29) - leicht geändertes %4-Dateinamens-Format - Datum jetzt auch GMT-basiert, um Kollisionen bei der Zeitumstellung zu vermeiden - (Prüfsumme -> Hashwerte, um Umlaute zu vermeiden) - es können jetzt mehrere Dateinamen angegeben werden, wenn das volle Format verwendet wird (ggf. mit - 0 oder -- 0 abschließen) V2004-03-19 - Debuginfo herausgenommen - (Dateiexistenz wird jetzt mit access() abgefragt) - MD5, SHA1; Prüfsummen in einem anderen Format ausgegeben V2004-02-29 - mehr Statusinfos während der Übertragung - -O im Makefile hinzugefügt - erneute Änderung der Automatisierungsplatzhalter. %1, %2, %3, %4, %%. Wer die verwendet, muß dann eben geeignet escapen. V2004-02-12 - Puffergröße in fcopy reduziert (8 kiB) -> effizienter - Umstellung, so daß es mit -Wall kompiliert werden kann (Warnungen eliminiert) - CRC32 und Adler32-Prüfsummen hinzugefügt V2004-01-29: - einige Stellen effizienter gemacht (z.B. httpheader) - Sicherung gegen versehentliches Löschen eingebaut (geht unter Linux aber offenbar nicht) - Aufrufsyntax nochmal etwas gestrafft (weniger Parameter) nur Dateiname -> "Großer" Servermodus, Port wird zugeteilt Dateiname + Port -> "Großer" Servermodus, angegebener Port - Bei Versenden von StdIO -> Fallback auf den "kleinen" Servermodus V2004-01-16: - Listen-Mode-Aktivierung durch ./.. ergänzt - help-Ausgabe etwas erweitert - %4 implementiert -> noch ändern in Doku - aufgetrennt wg. Bucket V2004-01-13: - an diversen Stellen fflush eingefügt, um Ausgaben schneller erscheinen zu lassen - Einbindung meines neuen Moduls stralloc V2004-01-11: - ihttp implementiert - - und -- als Ergänzung zu -l und -L eingeführt - -v|version und -h|help eingeführt - unter GPL gestellt V2003-12-29: - Oh mann. "!" ist unter Linux auch reserviert. Jetzt heißt es [0], [1], [2]... - noch zwei kleine, aber schwerwiegende Fehler entdeckt und behoben V2003-12-18: - Entfernung der einen oder anderen Debug-Meldung - Erneute (hoffentlich endgültige) Umbenennung der Platzhalter für automatische Durchnumerierung: !1!, !2!, !3! V2003-12-16: - Einige kleinere Verbesserungen und Korrekturen V2003-12-12: - Grundlegender Neuaufbau in C und Linux-Kompilierbarkeit des Sources Einschränkungen unter Linux: - kein automatisches Versenden nach Änderung - (noch) keine Überprüfung auf Existenz vorm Serven Extra für die Linux-Verwendbarkeit habe ich #/##/### umbenannt in .1/.2/.3. (# bedeutet Kommentar!) Leider sind mir keine besseren Kürzel eingefallen :-( V2003-11-19: - Die numerische Angabe des Servernamens wird jetzt auch unterstützt. - Bei HTTP wird standardkonformer gearbeitet - erst Anfrage entgegennehmen und dann erst Daten senden. - HTTP: Die Größe der Datei wird (außer bei StdIO) im Header mitgeschickt. - HTTP: Cachen wurde, soweit möglich, unterbunden. - #/##/### funktioniert nur noch im Servermodus. V2003-11-18: - Falls beim Senden im Servermodus die Datei nicht existiert, wird das Programm sofort beendet. - Auch während des Kopiervorganges auftretende Fehler werden jetzt mit Fehlermeldung ausgegeben, sofern es sich um einen Netzwerkfehler handelte. V2003-11-17: - Nicht bei jedem Fehler wird abgebrochen - Beim Empfang wird die Datei nur noch angelegt, wenn sie noch nicht existiert. - bessere Fehlermeldungen V2003-11-11: - Automatismus (! - automatisches Senden bei geänderter Datei) eingeführt. - Server zeigt mögliche IPs an.