| |
die Möglichkeit, statistische Werte des Dienstes zu ermitteln: die Anzahl der geprüften
Dateien/Daten und die Anzahl der Infektionen
Die unten gezeigte Dienstdefinition wurde in einer Pseudo-Sprache mit einer C++ ähnlichen
Syntax notiert und ist eher als Pflichtenheft denn als echte Schnittstellenbeschreibung zu ver-
stehen. Eine eigene Pseudo-Sprache wird nur deshalb eingeführt, um die Chancengleichheit
zu erhöhen: wäre die Schnittstelle gleich in syntaktisch korrekter IDL-Sprache oder in einer
Programmiersprache formuliert worden, wäre der Aspekt verlorengegangen, welche Mittel
das Entwicklungsmodell der CORBA- oder XML-RPC-Technologie bereitstellt, um die der
Schnittstelle zugrundeliegenden Ideen zu formulieren. So stellt die Pseudo-Sprache Sprach-
konstrukte zur Formulierung aller erdenkbaren Ideen on-the-fly bereit und führt ein wenig
von der natürlichsprachlichen Beschreibung weg hin zu einer formaleren Beschreibung, ohne
selbst als echte Sprache ernstgenommen werden zu wollen.
Sie verfügt über die Funktionsmodifizierer sync bzw. async: sync steht für synchronen, d.h.
blockierenden Ruf und async steht für asynchronen, d.h. nicht blockierenden Ruf. Ob letzterer
nur auf Client-Seite oder nur auf Server-Seite blockieren darf und wie die konkrete Realisierung
aussieht bleibt ofen. Weiterhin gibt es den Modifizierer optional, der ausdrückt, dass ein
Element vorhanden sein kann, aber nicht muss - im Fall des Virenprüfdienstes kann in der
Regel auf die Details eines Scan-Ergebnisses verzichtet werden, wenn die Prüfung ergeben
hat, dass keine Infektion vorliegt.
Der erste Teil der Schnittstellenbeschreibung definiert zwei Datentypen sowie die synchrone
und asynchrone Version zur Prüfung der Daten:
Listing 5.2: VCS.idef, Teil 1
service VCS {
// Virus Check Service, C++ style Pseudolanguage
//
// virstat: scan timestamp, scan result, scan result details
// srvstat: service call count, infection count, illness
//
struct virstat {
date timestamp;
bool infected;
optional string details;
}
struct srvstat {
int servicecalls;
int infections;
double illness;
}
//
// interface with a blocking call for small- to medium-size files
// interface with a non-blocking call for small- to medium-size files
//
sync virstat examine_data(bytearray[MAXLEN] filedata);
async virstat examine_data(bytearray[MAXLEN] filedata);
Für große Dateien ist diese Schnittstelle nicht sinnvoll. Der gesamte Dateiinhalt müsste so-
wohl auf der Seite des Client-Programms als auch auf der Seite des Server-Programms im
39
|  |
|
| |
|
|