ethernode®-Webserver CGI

ethernode®-Webserver CGI

Wie die "großen" Webserver verfügt auch der Webserver auf ethernode über ein Common Gateway Interface, also eine CGI-Schnittstelle. Bei kommerziellen Webservern meist für Datenbankzugriffe genutzt, wird man eine CGI-Schnittstelle auf ethernode eher zur Beeinflussung einer Regelung oder zum Starten von Prozessen nutzen. Neben traditionellem CGI können Funktionen auf ethernode auch komfortabel über mSP-Tags aufgerufen werden.

  • Klassisches CGI: "...cgi?name=wert&name=wert"
  • CGIPrint-Funktion zur Erstellung von Seiten aus mCAT C-Funktionen heraus
  • CGIGetArgByName und viele andere Funktionen zur Bearbeitung der Argumentliste
  • Preise
  • Detailinfo

Der Webserver gehört zum Lieferumfang jeder ELZET80-Ethernet-Baugruppe

Das zum Herunterladen der Dateien benötigte Dienstprogramm ist Teil der mCAT-Entwicklerlizenz, kann aber auch, wenn nicht in C programmiert werden soll, kostenlos per E-Mail angefordert werden.

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.