ethernode®-Webserver CGI

ethernode®-Webserver CGI

Such as the big web server also the web server on ethernode possesses a Common Gateway Interface, so a CGI-interface, that enables to run funtions, that are parameterised by the browser, on the server. The functions are usual mCAT functions that have to be introduced to the web server. They communicate - as usual with mCAT - by messages.

  • classical CGI: "...cgi?name=wert&name=wert"
  • CGIPrint function to generate pages out of mCAT C-functions
  • CGIGetArgByName and many other functions to work on the argumentlist
  • Prices
  • Details

The webserver is included in the delivery of every ELZET80-Ethernetboard.

The service program which is needed for downloading the files is part of the mCAT developer licence. If you don't want to program in C, we can send it to you by E-Mail for free.

Bei CGI sendet der Browser Parameter in Form einer Argumentliste, die mit einem Fragezeichen an die URL angehängt werden. Dem Anwender gegenüber stellt sich eine solche Seite als HTML-FORM dar (mit input über Eingabefeldern oder Buttons) oder die Argumente verstecken sich hinter einem Link. In der URL-Zeile sieht das oft so aus:
http://dict.tu-chemnitz.de/dings.cgi?lang=de&service=deen&query=feierabend 

CGI-Funktionen werden an die Webserver-Task des ethernode angehängt. Man schreibt sie wie eine mCAT-Task, allerdings gibt es nur einen Task-Init, der dazu dient, dem Webserver die Funktion bekannt zu machen. Beim klassischen CGI muss der gesamte HTML-Text, den der Browser präsentiert bekommt, vom Programm erzeugt werden. Dazu dient die CGI-Print-Funktion, die an Stelle eines fprintf() eingesetzt wird. Beispiel:

  CGIPrint(sid,"<html>\n");
  CGIPrint(sid," <head>\n");
  CGIPrint(sid," <title>mCAT ExpressIO WEB interface</title>\n");
  CGIPrint(sid," <META HTTP-EQUIV=\"reply-to\"content=\"email@elzet80.de\">\n");

Im Zugriff zum Prozess hat man dann natürlich alle Freiheiten, kann über Express-I/O auf E/A zugreifen und mit SerDrv auf die seriellen Schnittstellen. Mit anderen Tasks kann mCAT-üblich über Nachrichten kommuniziert werden. Im einfachen Fall unseres Beispiels wird nur der Inhalt des Arguments mit Namen "what" ausgelesen und angezeigt.

  UTF8 *my_cgi_function(INTEGER sid, ARGV *args)
  UTF8 *hallo = NULL;
    hallo = CGIGetArgByName(args,"what");

Weiter geht es dann mit dem CGIPrint-Ausdruck des HTML-Seitenkopfs wie oben und irgendwann im Body dann des Ergebnisses:

  CGIPrint(sid," Dieses CGI sagt '%s'\n",hallo);

Für eine so kleine Anwendung kann der CGI-Ansatz recht schnell verwirklicht werden, den HTML-Kopf kann man sich ja leicht aus einem Beispiel modifizieren. Generell ist in der Abwägung CGI gegen mSP schlecht vorherzusagen, wann CGI Vorteile gegenüber mSP haben könnte. Man sollte ich auf jeden Fall die Alternative mSP anschauen.