Webserver (nur AVR32Bit)

 

Der Webserver der C-Control Pro AVR32Bit wird mit WEB_StartServer gestartet. Es kann dafür ein beliebiger TCP/IP Port ausgesucht werden. Beim Start des Webservers wird die Anzahl der dynamischen Variablen definiert, mit denen man arbeiten möchte. Die dynamischen Variablen übernehmen die Werte von URL Variablen beim Aufruf der Webseite und man kann dynamische Variablen zur Ausgabe von Werten innerhalb von Webseiten benutzen.

 

Alle Webseiten die vom Server zurückgeliefert werden, müssen im Hauptverzeichnis auf der SD card liegen, die in die C-Control Pro Unit eingesteckt ist. Da die SDCard Bibliothek keine langen Dateinamen unterstützt, müssen alle Dateinamen der Webseiten im DOS Format (8.3) vorliegen. Die Hauptseite heißt deshalb "index.htm". Man beachte die verkürzte Endung.

 

HTTP Header

 

Für Dateien mit einer bekannten Endung (siehe Tabelle) wird automatisch ein HTTP Header erzeugt, der vor den Inhalt der Datei gesetzt wird. Dabei wird immer

 

HTTP/1.1 200 OK\r\n

Connection: close\r\n

Content-Type: Type\r\n

\r\n

 

vorangesetzt. Dabei ist "\r\n" Carriage Return Linefeed, und Type der korrespondierende Inhalt aus der Tabelle. Für die Endung ".htm" wird z.B. ein "Content-Type: text/html" im Header generiert.

 

 

Datei Endung

Type

 

 

.htm

text/html

.js

application/x-javascript

.txt

text/plain

.css

text/css

.gif

image/gif

.ico

image/x-icon

.jpg

image/jpeg

.bmp

image/bmp

.png

image/png

 

 

 Ist die Dateiendung nicht in der Tabelle vorhanden, muss der Header selbst an den Anfang der Datei auf der SD-Card gesetzt werden.

 

 

Dynamische Variablen

 

Man kann mit der Funktion WEB_SetDynVar() dem Webserver die Adresse und Typ einer normalen Variablen mitgeben. Hat man sich z.B. eine Integer Variable mit "int a;" definiert, so würde man mit "WEB_SetDynVar(0, a, DYN_INT, 0);" die Variable a als dynamische Variable mit Index 0 definieren. Schreibt man in eine Webseite den Text $var0$, so würde dann $var0$ durch den numerischen Wert von a ersetzt. Die Zahl nach "var" ist der Index der dynamischen Variable.

 

URL (CGI) Variablen

 

Werden bei einem Webrequest keine URL Variablen angegeben, so läuft der gesamte Prozess im Hintergrund, und es muss keine Interaktion erfolgen. Wird eine URL Variable angegeben (z.B. "?var0=5") so überprüft der Webserver, ob der Variablenname dem Schema "var" + Zahl entspricht. Die Zahl darf den maximalen Index der definierten dynamischen Variablen nicht überschreiten. Wird das Schema erfüllt, wird der Wert "5" der dynamischen Variablen zugewiesen. Die Integer Variable a bekommt dann den Wert 5.

 

Es gibt einen spezielle URL ("setvars.js") die nur die URL Variablen übernimmt, aber keinen Webseiten Inhalt zurückliefert. Damit lassen sich mit Javascript Variableninhalte übergeben, ohne viel TCP/IP Traffic zu erzeugen.

 

 Eine Variable kann nur über die URL modifiziert werden, wenn bei WEB_SetDynVar() das Flag DYN_CGIVAR gesetzt wird. Dadurch können normale Variablen vor einer Änderung von außen geschützt werden.

 

JSON

 

Wenn man mit Javascript arbeiten möchte, können dynamische Variablen auch als JSON Liste ausgegeben werden. Hierfür wird bei der der Definition mit WEB_SetDynVar() zusätzlich das Flag DYN_JSONVAR gesetzt. Ein Zugriff auf "getvars.js" liefert dann die JSON Daten. Z.B. "{"1":"123","3":"0"}". Dies ist eine Liste von zwei dynamischen Variablen mit den Indizes 1 und 3. Dabei hat die Variable den Inhalt "123", die zweite Variable den Inhalt "0".

 

Interaktion

 

Bei der normalen Arbeitsweise, wird in der Hauptschleife des Programms dauernd mit WEB_GetRequest() abgefragt, ob ein Request mit URL Variablen vorliegt. Ist der Rückgabewert ungleich Null, so liegt ein Request an. Man kann mit WEB_GetFileHash() den Hash des Dateinamens erfragen, und die übergebenen URL Variablen auswerten. Danach sollten die Ausgabevariablen (dynamischen Variablen der Webseite) neu gesetzt werden. Am Ende wird dem Webserver mit WEB_ReleaseRequest() signalisiert, das die Webseite ausgeliefert wird.