von tschak909 » Sa 18. Apr 2020, 04:00
On the N: device, With aux2 set at open, this specifies that EOL translation should be done for input and output. There are currently four values:
* 0 = No Translation
* 1 = Translate CR (0x0D) to EOL (0x9B) (Macintosh style line endings)
* 2 = Translate LF (0x0D) to EOL (0x9B) (UNIX style line endings)
* 3 = Translate CR/LF (0x0D 0x0A) to EOL (0x9B) (PC/Windows style line endings, also default Telnet NVT behavior)
This works across all protocols, and is demonstrated here by doing http GET fetch of an nginx title page:
https://www.youtube.com/watch?v=ZrbIap_f0z8
Currently working on getting headers to work. From the user's perspective, this will be a multi-step process, where for e.g. a GET, you:
* Open the connection
* Tell the N: device you want to give it a list of headers to fetch, via an XIO
* PRINT each header you want, one at a time,
* Tell the N: device you are done giving it a list of headers, via an XIO.
* Get a STATUS, which actually does the request
* Tell thE N: device you want to get the headers, via an XIO
* INPUT each header, one at a time.
* Tell the N: device you're done with headers, via an XIO
* GET or INPUT the data.
* CLOSE
Other verbs, like POST will work similarly. You OPEN, you set your headers you want to send, specify any you want to recieve, PRINT your post data, get a STATUS which will get you the # of bytes of the response, then GET your response and CLOSE.
This is complex, yes, but it will allow for the whole of HTTP to be mapped cleanly onto the Atari I/O system.
---
Auf dem N:-Gerät wird bei geöffnetem aux2 festgelegt, dass die EOL-Übersetzung für die Ein- und Ausgabe durchgeführt werden soll. Derzeit gibt es vier Werte:
* 0 = Keine Übersetzung
* 1 = CR (0x0D) in EOL (0x9B) übersetzen (Zeilenenden im Macintosh-Stil)
* 2 = LF (0x0D) in EOL (0x9B) übersetzen (Zeilenenden im UNIX-Stil)
* 3 = CR/LF (0x0D 0x0A) in EOL (0x9B) übersetzen (Zeilenenden im PC/Windows-Stil, auch standardmäßiges Telnet-NVT-Verhalten)
Dies funktioniert über alle Protokolle hinweg und wird hier anhand des http GET Fetch einer nginx-Titelseite demonstriert:
https://www.youtube.com/watch?v=ZrbIap_f0z8
Derzeit arbeiten wir daran, die Header zum Funktionieren zu bringen. Aus der Sicht des Benutzers wird dies ein mehrstufiger Prozess sein, bei dem z.B. für einen GET, Sie:
* die Verbindung öffnen
* Sagen Sie dem N:-Gerät, dass Sie ihm eine Liste von Headern geben wollen, die es über einen XIO abrufen soll
* Drucken Sie jede gewünschte Kopfzeile einzeln aus,
* Sagen Sie dem N:-Gerät, dass Sie damit fertig sind, ihm über ein XIO eine Liste von Headern zu geben.
* Holen Sie einen STATUS, der die Anfrage tatsächlich ausführt.
* Sagen Sie dem N: Gerät, das die Header erhalten soll, über ein XIO
* INPUT jede Kopfzeile einzeln eingeben.
* Sagen Sie dem N:-Gerät, dass Sie mit den Headern fertig sind, über ein XIO
* GET oder INPUT der Daten.
* SCHLIESSEN
Andere Verben, wie POST, funktionieren ähnlich. Sie OPEN, Sie setzen Ihre Header, die Sie senden wollen, geben an, welche Sie empfangen wollen, DRUCKEN Ihre Postdaten, erhalten einen STATUS, der Ihnen die Anzahl der Bytes der Antwort liefert, dann GET Ihre Antwort und CLOSE.
Das ist komplex, ja, aber es wird es ermöglichen, das gesamte HTTP sauber auf das Atari-E/A-System abzubilden.
-Thom