Für die Behandlung der verschiedenen Exits übergeben die Aufrufer der Exit-Routine (TELNET-Client oder TELNET-Server) an den Einsprungspunkt YAPTEXIT die Adresse einer Parameterliste. Die Struktur yaptx dieser Parameterleiste wird unter dem Namen yaptx.h in SYSLIB.TCP-IP-AP.nnn ausgeliefert.
Struktur yaptx
Die Struktur yaptx ist wie folgt definiert:
struct yaptx { int caller; /* Aufrufer: S=Server, C=Client */ #define client 0x01 /* X'01' Client */ #define server 0x02 /* X'02' Server */ int action /* main action code */ #define telrecv 0x01 /* action = receive */ #define telsend 0x02 /* action = send */ #define telopen 0x03 /* action = open connection */ #define telclos 0x04 /* action = close connection */ char *selector; /* Selector */ int portno; /* Port-Nummer (Server-Port) */ char hname[128+1]; /* Hostname von Server / Client */ char reserved[3]; /* Reserved */ int connid; /* identifies uniquely client-server */ /* connection. Only for Server */ char *inbuf; /* Address of input buffer */ int inbuflen; /* Length of input buffer */ char *outbuf; /* Address of output buffer */ int outbuflen; /* Length of output buffer */ int outDatalen; /* Length of output data */
Beschreibung der Parameter
Folgende Parameter werden übergeben:
Aufrufer der Exit-Routine (caller)
Typ des Entries (action)
abdruckbare Zeichenkette zur Identifizierung der Exit-Routine (selector)
Connection Identifier (connid)
Rechnername (hname)
des adressierten TELNET-Servers (bei TELNET-Clients)
des aufrufenden TELNET-Servers (bei TELNET-Servern)
Portnummer (portno)
des adressierten TELNET-Servers (bei TELNET-Clients)
des adressierten TELNET-Clients (bei TELNET-Servern)
bei Send-/Receive-Exits: inbuf, inbuflen, outbuf, outbufLen, outDataLen
outDataLen muss vom Exit selbst versorgt werden.
caller
spezifiziert, ob die Exit-Routine vom TELNET-Client oder vom TELNET-Server aufgerufen wurde.
action
spezifiziert den Typ des Entries (receive, send, open connection, close connection)
selector
Abdruckbare Zeichenkette (String) zur Auswahl der gewünschten Exit-Routine. Die Zeichenkette wird durch ’\0’ abgeschlossen.
portno
Port-Nummer von Server bzw. Client:
Bei TELNET-Clients spezifiziert portno die Port-Nummer des adressierten TELNET-Servers.
Bei TELNET-Servern spezifiziert portno die Port-Nummer des adressierten TEL-NET-Clients.
hname[128+1]
Hostname von Server bzw. Client:
Bei TELNET-Clients spezifiziert hname den Rechnernamen des adressierten TELNET-Servers.
Bei TELNET-Servern spezifiziert hname den Rechnernamen des adressierten TELNET-Clients.
inBuf
enthält die Adresse des Puffers, in dem die umzuwandelnden Daten stehen (Eingabepuffer). Nur bei Send-/Receive-Exits von Bedeutung.
inBufLen
spezifiziert die Länge (Anzahl der gültigen Bytes) des Eingabepuffers. Nur bei Send-/Receive-Exits von Bedeutung.
outBuf
enthält die Adresse des Ausgabepuffers.Nur bei Send-/Receive-Exits von Bedeutung.
outBuflen
spezifiziert die Länge des Ausgabepuffers.Nur bei Send-/Receive-Exits von Bedeutung.
outDataLen
Vor dem Rücksprung zum Aufrufer muss die Routine in outDataLen hinterlegen, wieviele Bytes im Ausgabepuffer gültig sind und somit übertragen werden müssen. Nur bei Send-/Receive-Exits von Bedeutung.
connid
Connection-Identifier. Der Connection Identifier identifiziert die Client-Server-Verbindung bei festem TELNET-Server eindeutig. Wenn mehrere Server aktiv sind, identifiziert das Paar (portno, connid) die Verbindung zwischen Client und Server und somit den TELNET-Client eindeutig (siehe auch Parameter connid). Von Bedeutung ist dies z.B. bei der Code-Umsetzung, wenn zwei Bytes auf ein Byte abgebildet werden. In diesem Fall muss die Exit-Routine für die Umsetzung das erste Byte zwischenspeichern, um bei Eintreffen des zweiten Bytes die Umsetzung durchzuführen. Dabei gewährleistet connid die eindeutige Zuordnung des Zwischenspeichers zur jeweiligen Verbindung.
Ergebnisse und Return-Werte der Exit-Routinen
Exit-Routinen müssen in jedem Fall einen Return-Wert liefern. Jeder Exit, für den keine anwender-definierte Exit-Routine existiert, muss den Wert ’0xff’ als Return-Wert liefern.
Ergebnisse und Return-Werte bei send und receive
Nach ordnungsgemäßer Ausführung enthält outbuf den umgesetzten Code und outDataLen die Länge des umgesetzten Codes. Return-Wert: 0.
Wenn ein Exit feststellt, dass zuwenig Speicher für eine Code-Umsetzung vorhanden ist, muss der Return-Wert -2 zurückgeliefert werden.
Bei inbuf = 0 wird lediglich abgefragt, ob ein entsprechender Exit definiert wurde oder nicht:
Falls ein entsprechender Exit definiert ist, muss der Return-Wert gleich 0 sein.
Falls kein entsprechender Exit definiert ist, muss der Return-Wert gleich ’0xff’ sein.
Ergebnisse und Return-Werte bei open und close
open
Erlaubt der Exit den Zugang zum Server, so ist der Return-Wert gleich 0, andernfalls muss er gleich -1 sein.
close
close liefert stets den Return-Wert 0.