Previous Next Contents

4. Realisierung von Kodierung und Dekodierung.

Das Hauptproblem beim Mimechannel liegt daran, daß Channels eigentlich für andere Zwecke entwickelt wurden. Hauptsächlich sollten sie eine Schnittstelle für externen Datenaustausch (als Ströme) dienen, wie z.B. Dateizugriffe. Mimechannel dient aber zu Konvertierung von Datenströmen. Beim Mimechannel ist die Menge der gelesenen und geschriebenen Daten unterschiedlich, die Tcl Channels unterstützen aber nur einen Lese- und (oder) Schreibzeiger.

Für Kodierungsalgorithmus ist es wichtig festzustellen, ob alle Daten zum Kodieren bereits geschrieben wurden. (beim base64 sind die Daten gruppenweise kodiert. Wenn eine Gruppe unvollständig ist, muß immer festgestellt werden, ob sie als solche kodiert werden muß, was explizit ein Dateiende bedeuten würde, weil laut RFC 1521 unvollständige 4-er Gruppen, also mit Sonderzeichen '=' immer als Dateiende zu deuten sind, oder ob noch Daten zu erwarten sind, was allerdings dazuführen könnte, daß nicht alle Daten gelesen werden könnten ) Die Tcl Channel bietet aber keine vorprogrammierte Möglichkeit solchen Zustand zu signalisieren; z.B. durch eine flush oder eof Funktion. Es ist dankbar es durch neu definierte Chanel Option zu realisieren, was aber zu Veränderung der allgemeinen Benutzung von TCL Channles führen würde.

Beim Mimechannel ist dieses Problem gelöst, indem ein Lesezugriff auch ein Signal dafür ist, daß alle zukodierenden Daten in den Channel bereits geschrieben wurden. Darum auch wird der Channel ab diesem Moment nur zum Lesen freigegeben und jeder Schreibzugriff wird mit einer Fehlermeldung quittiert. Intern werden die Daten erst erst beim erstem Lesezugrigff kodiert.

Beim Dekodieren können die Daten teilweise dekodiert werden was kontinuierte Lese und Schreibzugriffe ermöglicht.

4.1 Fehlertoleranz und Fehlerverhalten

RFC 1521 schlägt vor beim base64 und quted-printable alle nicht zugelasennen Zeichen und Zeichenfolgen einfach zu ignorieren. Dieses Verhalten wird in Mimechannel aufrechterhalten. Zusätzlich können aber solche Mißstände ein Anzeichen dafür sein, daß mit dem Daten etwas nicht in Ordnung ist. Mimechannel hat einen speziellen Schalter (Warnschalter) der beim solchen Vorkommnissen gesetzt wird und mit fconfigure -decodeok (sehe DECODEOK) gelesen werden kann.

Beim uucode wird den gleiche Weg wie beim Programm uudecode gegangen. Das Programm dekodiert alle Zeichen (auch außer ASCII), wird die Zeilenlänge überschritten wirft er ein Read/Write Error aus. Dieses Verhalten wird aus Kompatibilität mit dem Programm uudecode gewählt.

4.2 Base64

Zu base64 zugelassenen Zeichen zählen "0-9a-zA-Z+/=" (Notation wie Shell Befehl tr) LF oder CRLF. Zeilenumbrüche können die 4-er Gruppen nicht trennen. Beim allen anderen Zeichen wird ein Warnschalter (sehe fconfigure -decodeok DECODEOK) gesetzt. Die 4-er Gruppen wie: (X bedeutet jedes base64 zugelassene Zeichen außer LF und CRLF) "X===","X=XX","X=X=","X==X" sie werden völlig ignoriert;

4.3 quotet-printable

Es werden nur die Zeichen von Nummer mit ASCII-Code 32 bis 126 und CRLF oder LF zugelassen . Alle anderen werden ignoriert und der Warnschalter (fconfigure -decodeok) wird gesetzt

4.4 uucode

Probiert alles zu dekodieren. Nur beim zu langen Zeilen (über 180) wird ein Channel in ein Fehlerzustand gesetzt und das Dekodieren wird sofort abgebrochen


Previous Next Contents