Nachrichtenformate und Protokollversionen
Jede Nachricht, die ein berechtigtes Benutzerprogramm sendet, darf höchstens 31 KB lang sein. Längere Nachrichten werden mit REJ1
abgewiesen. Nachrichten, die das Benutzerprogramm empfangen soll, sind damit maximal 31 KB groß plus die Länge des ggfs. hinzugefügten Headers (siehe "Makro NBMHE"), denn von anderen Absendern stammende Nachrichten sind sowieso viel kleiner (so beträgt die maximale Länge einer mit MSG7X ausgegebenen Meldung z.B. 4 KB).
Der Text dieser Nachrichten hat grundsätzlich das gleiche Format wie bei Ein-/Ausgaben an physikalischen Konsolen (siehe voriges Kapitel). Zusätzliche Formate ergeben sich ausschließlich, wenn das berechtigte Benutzerprogramm als Server eines Operator-Spezialkommandos fungiert. Diese Erweiterungen sind in ab "Operator-Spezialkommandos in berechtigten Benutzerprogrammen" beschrieben.
Für die automatische Auswertung der empfangenen Meldungen ist ein reines Textformat jedoch ungünstig, da jede Einzelinformationen – z.B. der Wert eines bestimmten Inserts in einer Meldung – in dem Text erst gesucht werden müsste. Das Format von Ausgabetexten ist aber keine garantierte, bei Versionswechsel unverändert bleibende Schnittstelle.
Das System bietet daher an, mit berechtigten Benutzerprogrammen formatierte Nachrichten auszutauschen, die neben dem Text zusätzliche Informationen enthalten. Gesteuert wird dies durch die Protokollversion, die das berechtigte Benutzerprogramm beim Verbindungsaufbau zu $CONSOLE beantragt. Dieser Vorgang ist für Anschlüsse unter generiertem und unter dynamischem Berechtigungsnamen unterschiedlich und kann den entsprechenden Abschnitten auf "Anschlüsse mit generierten Berechtigungsnamen" entnommen werden.
Die Bedeutung der ausgewählten Protokollversion ist jedoch in allen Fällen gleich.
Protokollversion 0
Hinter dem Begriff Protokollversion 0 verbirgt sich die einfache Vereinbarung, dass sich der Nachrichtenaustausch zwischen System und berechtigtem Benutzerprogramm in beide Richtungen auf den Nachrichtentext beschränkt. Zusätzliche Informationen werden nicht ausgetauscht.
Protokollversion 1
Vereinbart das berechtigte Benutzerprogramm mit der $CONSOLE-Schnittstelle die Protokollversion 1, erwartet das System als Eingabe weiterhin nur Texte der bekannten Formate. Beim Senden von Nachrichten durch das berechtigte Benutzerprogramm bestehen also keinerlei Unterschiede zu Protokollversion 0.
Nachrichten vom System erhält das berechtigte Benutzerprogramm jedoch in erweiterter Form, bestehend aus einem Nachrichtenkopf (Header), dem eigentlichen Text, so wie er bei Protokollversion 0 netto übertragen worden wäre, sowie, falls es sich bei der Nachricht um eine mit MSG7[X] ausgegebene Meldung handelt, ein Füllbyte mit nachfolgender datenorientierten Beschreibung („Mapping-Format“) des Meldungsaufbaus.
Eine DSECT zur Beschreibung des Nachrichtenkopfes kann durch den Makro NBMHE erzeugt werden, der im Anschluss beschrieben ist.
Aufbau und Inhalt der datenorientierten Meldungsbeschreibung sind der Beschreibung des Makros NBMAP auf "Makros NBMAP" zu entnehmen.
Protokollversion 2
Vereinbart das berechtigte Benutzerprogramm mit der $CONSOLE-Schnittstelle die Protokollversion 2, erhält es alle Nachrichten vom System in erweiterter Form. Bezüglich des Empfangs von Meldungen durch das berechtigte Benutzerprogramm besteht also kein Unterschied zu Protokollversion 1.
Vom berechtigten Benutzerprogramm an das System gesendete Nachrichten müssen hier jedoch die gleiche, erweiterte Form aufweisen; die Übertragung des reinen Nachrichtentextes reicht nicht mehr aus.
Im Regelfall bringt die Erzeugung des Nachrichtenkopfes für das berechtigte Benutzerprogramm lediglich zusätzlichen Aufwand (und Fehlerquellen), aber keinen besonderen Nutzen mit. Notwendig ist die Verwendung der Protokollversion 2 ausschließlich, wenn das berechtigte Benutzerprogramm als Server für ein verwaltbares Operator-Spezialkommando dienen soll. Die dann geltenden Besonderheiten sind ab "Operator-Spezialkommandos in berechtigten Benutzerprogrammen" beschrieben.
Makro NBMHE
Der Makro NBMHE beschreibt das Format des Nachrichtenheaders. Die Assembler-Schnittstelle hat folgendes Aufrufformat:
Makro | Operanden |
|
|
Für den Benutzer ist die Angabe VER=1 nicht erlaubt!
Der Header hat folgenden Aufbau:
Parameter | V | DS | AT | LH | L2 | L1 | D | AK | SP | BC | RC2 | RC1 | FL | UID |
gültig für Version | 123 | 123 | 123 | 123 | 123 | 123 | 123 | 23 | 23 | 23 | 23 | 23 | 3 | 3 |
Parameter | Bedeutung |
V | Versionsnummer des Makros NBMHE, der diese Struktur generiert; 1 Byte |
DS | Dialogstatusbyte; 1 Byte |
AT | Auftragstyp; 1 Byte |
LH | Länge des Headers; 2 Byte |
L2 | Distanz zum datenorientierten Teil; 2 Byte |
L1 | Länge des textorientierten Teils; 2 Byte |
D | Ziel einer Meldung; 4 Byte |
Erweiterung für NBMHE Version 02 und 03: | |
AK | Auftragskennzeichen abhängig vom Auftragstyp; 4 Byte |
SP | Indikator für Senderprofil; 1 Byte |
BC | Berechtigungscodemenge; 5 Byte |
RC2 | Kommandoreturncode Subcode2 zum Verschicken an bzw. beim Empfang von Kommandogeber; 1 Byte |
RC1 | Kommandoreturncode Subcode1 zum Verschicken an bzw. beim Empfang von Kommandogeber; 1 Byte |
Erweiterung für NBMHE Version 03: | |
FL | Flag-Byte, das den Typ des Kommandogebers ausgibt; 1 Byte |
X'80' | |
UID | Benutzerkennung des Kommandogebers; 8 Byte |
Hinweise zu den einzelnen Feldern
Die meisten Felder des NBMHE sind nur in bestimmten Zusammenhängen relevant, die in der Tabelle aufgeführt sind. Sollte der jeweilige Zusammenhang nicht gegeben sein, so bedeutet dies bei vom System empfangenen Nachrichten einheitlich, dass der Feldinhalt undefiniert ist, und bei an das System gesendeten Nachrichten, dass der Feldinhalt vom System nicht ausgewertet wird, also beliebig gewählt werden kann.
Ferner ist der von der Art des verwendeten Berechtigungsnamens anhängige Anmeldedialog des berechtigten Benutzerprogrammes aus Gründen der Übersichtlichkeit separat beschrieben, siehe "Anschlüsse mit generierten Berechtigungsnamen". Die Tabelle bezieht sich auf den – von der Berechtigungsnamensart unabhängigen – Nachrichtenaustausch nach erfolgreichem Verbindungsaufbau (Dialogstatusbyte = 0).
V | Immer relevant |
DS | Immer relevant |
AT | Immer relevant |
LH | Länge des Headers, gleichzeitig – da der Nachrichtentext unmittelbar hinter dem Header folgt – die Distanz vom Anfang der Nachricht zum Text. |
L2 | (DLL2) Immer relevant |
L1 D AK | (DLL1) Immer relevant Nur relevant bei empfangenen Nachrichten Nur relevant beim Empfang von Kommandos (AT = „ / “) und Kommandozusatzinformationen (AT = „ : “) sowie beim Senden von Nachrichten im Rahmen der Kommandobehandlung (näheres siehe „Operator-Spezialkommandos“, ab "Operator-Spezialkommandos in berechtigten Benutzerprogrammen"). |
SP | Nur relevant beim Senden von Nachrichten |
BC RC2 RC1 | Nur relevant, wenn SP ungleich Null ist (also ausschließlich für Systemanwendungen). Nur bei Nachrichten vom Typ „Kommandoende“ (AT = „ ! “) relevant Nur bei Nachrichten vom Typ „Kommandoende“ (AT = „ ! “) relevant |
FL | Der Begriff „SCI-Task“ bezeichnet hier eine Benutzertask mit dem zur Eingabe des Kommandos notwendigen Privileg (bei selbstdefinierten Operator-Spezialkommandos muss dies nicht das OPERATING-Privileg sein). |
UID | Nur beim Empfang von Kommandos (AT = „ / “) relevant |
Die Versionsnummer des Headers ist nicht mit der Protokollversionsnummer der Verbindung zu verwechseln.
Das Feld LH befindet sich in allen Versionen auf Distanz X'03' im Header. Ihm ist die Distanz zum Beginn des Folgetextes zu entnehmen, da der Folgetext unmittelbar hinter NBMHE beginnt.
Makro NBMAP
Der Makro NBMAP beschreibt den Nachspann der Nachricht. Die Assembler-Schnittstelle hat folgendes Aufrufformat:
Makro | Operanden |
|
|
Die Struktur hat folgenden Aufbau:
|
|
|
| |||||||||||
V | MK | RC | WC | NI | INS0 | INS1 | INSn |
Parameter | Bedeutung |
V | Versionsnummer des Makros NBMAP, der diese Struktur generiert; 1 Byte |
MK | Meldungsschlüssel; 7 Byte |
RC | Routing-Code; 4 Byte (linksbündig, restliche Stellen mit 0 aufgefüllt) |
WC | Gewicht der Meldung; 1 Byte |
NI | Anzahl der Inserts; 1 Byte |
IL | Länge des aktuellen Inserts; 2 Byte |
ID | Distanz des aktuellen Inserts ab Anfang des Meldungstextes; 2 Byte |
INS0 ....INSn | 0...n Inserts der Meldung |
Beispiel mit Nutzung des Nachrichten-Headers V02