Drucken über TCP/IP-Stream

Einsatz und Verbesserungen für das Drucken über „TCP/IP-Stream“

Drucken über „TCP/IP-Stream“ bezeichnet das „TCP-Stream“-Protokoll, das einen Ausgabefilter im EtherShare Drucksystem für die Kommunikation zwischen Spooler und RIP oder Drucker darstellt. „TCP-Stream“ ist ein Standard-UNIX-Protokoll. Wir empfehlen das Drucken über „TCP/IP-Stream“ für TCP/IP-RIPs, da Anwendungsprogramme so die Schriftenlisten von einem Drucker anfordern, Fehlermeldungen vom Drucker empfangen sowie bereits laufende Druckaufträge abbrechen kann. Es ist einfach anzuwenden und mit „Telnet“ kompatibel. Ein Nachteil ist, dass TCP/IP ein kleines Treiberprogramm benötigt (wird von EtherShare bereitgestellt), das Fehlermeldungen zum Benutzer weiterleitet und den Drucker steuert. Man kann aber auch (ohne Fehlerrückmeldung) über „Telnet“-ähnliche Verbindungen drucken.

EtherShare PostScript-Ausgabe über TCP/IP

Die in HELIOS EtherShare implementierte UNIX-basierte AppleTalk-Netzwerksoftware erlaubt die Ansteuerung von PostScript-Druckern auf mehrere Arten: (a) Windows SMB/CIFS-Verbindung („smbif“-Filter), (b) EtherTalk- / LocalTalk-Verbindung („papif“-Filter), (c) TCP/IP-Verbindung („tcpif“-Filter) sowie (d) „remote lpr“.

Weitere Informationen finden Sie unter „The HELIOS printing system“  im HELIOS Base Handbuch (engl.).

TCP/IP kommt im „TCP/IP-Stream“-Protokoll als Verbindungstyp zum Einsatz. Im Vergleich zu „Remote lpr“ hat „TCP/IP-Stream“ den Vorteil, dass Anwendungsprogramme Schriftenlisten vom Drucker anfordern und Fehlermeldungen vom Drucker empfangen können. Darüber hinaus ist „TCP/IP-Stream“ einfach in der Anwendung, da es mit „Telnet“ kompatibel ist. HELIOS „TCP/IP-Stream“ funktioniert wie folgt:

  • Das RIP oder der Drucker warten passiv auf eine „Stream“-Verbindung auf einem angegebenen Port (z. B. Port 4000, den wir einmal TCP_PAP nennen).
  • Sobald ein Druckauftrag empfangen wird, baut das „UNIX lpr“-Drucksystem eine aktive Verbindung zu diesem Port auf, welche dann genutzt wird, um den Druckauftrag als Datenstrom an das RIP zu schicken.
  • Das RIP leitet über denselben Port etwaige Fehlermeldungen und die Antwort des PostScript-Programms an den Host weiter, welcher wiederum die Meldungen in einer Logdatei speichert.

Selbst dann, wenn das RIP gerade einen Druckauftrag verarbeitet, sollte es keine Verbindungsversuche seitens des Hosts zurückweisen sondern stattdessen die Anfrage annehmen, eine entsprechende Statusmeldung zurücksenden und die Verbindung sofort wieder schließen. Eine typische Statusmeldung sieht so aus:
%%[job: dave@test document; status: busy; source: TCP/IP]%%

Der Ausgabefilter „tcpif“ sollte die Werte des Schlüsselwortes „status“ folgendermaßen interpretieren: alle Werte mit Ausnahme von „idle“ zeigen, dass das RIP gerade beschäftigt ist, woraufhin „tcpif“ eine vordefinierte Zeit wartet, bevor es die Verbindungsanfrage wiederholt.

Es sollte ein separater Mechanismus zur Verfügung stehen, der einen Abbruchbefehl zum PostScript-Interpreter schickt, um sehr lange oder fehlerhafte Druckaufträge abzubrechen. HELIOS verwendet zu diesem Zweck einen zusätzlichen Kontrollport, z. B. 4001 (nennen wir ihn TCP_CTRL). Der zusätzliche Port schafft Transparenz zwischen Druck- und Steuersignalen, so dass diese nicht als Teil des Druckauftrags interpretiert werden (beispielsweise als Binärdaten). Es gibt zwei Möglichkeiten:

  • Muss ein Druckauftrag abgebrochen werden, sendet das HELIOS Spoolsystem ein Datenbyte 0x03 (CTRL-C) zum RIP, was daraufhin den Druckauftrag sofort abbrechen und verwerfen sollte. Dies sollte in ähnlicher Weise in den Mechanismus einer seriellen Verbindung implementiert werden (Ausführen eines „interrupt“ Operators).
     
  • Wird eine Statusabfrage benötigt, sendet das HELIOS Spoolsystem ein Datenbyte 0x14 (CTRL-T) zum RIP, was daraufhin eine Statusmeldung ausgibt (deren Syntax woanders beschrieben wird).

Dieses Konzept ist zwar auch mit RIPs ohne zusätzlichen TCP/IP-Kontrollport kompatibel, hierbei fehlt Ihnen jedoch die Möglichkeit, den aktuellen Status des Interpreters zu prüfen und Druckaufträge sofort abzubrechen.
Fehler- und Statusmeldungen sollten folgende Syntax aufweisen: 
%%[keyword1: value1; keyword2: value2; ...]%%

Der HELIOS „tcpif“-Filter erkennt zur Zeit folgende Schlüsselwörter:

„status“
Status des RIPs. Sämtliche Werte der Schlüsselwörter (wie z. B. „busy“ oder „processing“) mit Ausnahme von „idle“ zeigen an, dass das RIP beschäftigt ist.

„PrinterError“
Ein ernster Fehler ist aufgetreten. Die gesamte Meldung wird von „tcpif“ sofort an die Systemkonsole weitergeleitet. Für Drucker wie „LaserWriter“ o. ä. sind folgende Werte für „PrinterError“ typisch: „Papierstau“ oder „Papier nachlegen“.

„Flushing“
Ein vorangegangener Syntaxfehler hat verhindert, dass der Druckauftrag fertiggestellt wurde, so dass alle weiteren Daten für diesen Auftrag vom RIP ignoriert werden. Das Schlüsselwort „Flushing“ lässt „tcpif“ den Druckauftrag sofort abbrechen und den Rest der Meldung ignorieren.

Fragen zum verbesserten HELIOS „TCP-Stream“-Protokoll
  • Was ist das „TCP-Stream“-Protokoll?
     

Das „TCP-Stream“-Protokoll ist ein Ausgabefilter im EtherShare Drucksystem für die Kommunikation zwischen Spooler und RIP oder Drucker. Es ist ein Standard-UNIX-Protokoll, aber was ungewöhnlich ist, ist folgendes:

  • Es findet für gewöhnlich zwischen Spoolern  und Druckern Verwendung.
     
  • HELIOS empfiehlt die Nutzung der IP-Ports 4000 und 4001, wie oben beschrieben.

Beispiele für das „TCP-Stream“-Protokoll finden sich in den meisten UNIX-Programmierhandbüchern, wie z. B. „UNIX Network Programming“ von W. Richard Stevens (Prentice Hall).

  • Warum empfiehlt HELIOS „TCP/IP-Stream“ für TCP/IP-RIPs?

Das EtherShare „TCP/IP-Stream“-Protokoll bietet folgende Vor- bzw. Nachteile gegenüber anderen TCP/IP-Verbindungen und -typen:

+ Vorteil:
Anwendungsprogramme können Schriftenlisten vom Drucker anfordern, Fehlermeldungen empfangen und bereits laufende Druckaufträge abbrechen.

+ Vorteil:
Einfach in der Anwendung, da „TCP/IP-Stream“ mit „Telnet“ kompatibel ist.

- Nachteil:
TCP/IP benötigt ein kleines Treiberprogramm (wird von EtherShare bereitgestellt), das Fehlermeldungen zum Benutzer weiterleitet und den Drucker steuert. Man kann aber auch (ohne Fehlerrückmeldung) über „Telnet“-ähnliche Verbindungen drucken.

  • Wie lässt sich „TCP-Stream“ mit anderen TCP/IP-Verbindungsmethoden vergleichen?

„Remote lpr“-Verbindungen bieten folgende Vor- bzw. Nachteile gegenüber anderen TCP/IP-Verbindungsmethoden:

+ Vorteil:
Der Treiber ist standardmäßig in BSD sowie System V.4 UNIX enthalten und muss nicht separat zur Verfügung gestellt werden.

- Nachteil:
Fehlermeldungen werden nicht automatisch an den Benutzer ausgegeben, da „Remote lpr“ nur über einen 512-Byte großen Statusblock verfügt. Des weiteren können keine Schriftenlisten vom Drucker angefordert werden.