Engine::processRequest(HTTPRequest& request, HTML &html)
{
// Dafür sorgen, dass nur ein Thread die Engine
// betritt (hier mit pthread-Mechanismen gelöst)
pthread_mutex_lock(&_mutex);
// Keine Verzeichnis -> index.html
if (request.numDirs() == 0)
pageIndex(request, html);
// 1. Pfadkomponente unterscheidet Art der Seite
else if (!strcmp(request.dir(0), "art"))
pageArticle(request, html); // Artikelseite
else if (!strcmp(request.dir(0), "search"))
pageSearch(request, html); // Suchabfrage
else
pageUnknown(request, html); // Unbekannte Seite
// Zugang zur Engine wieder freigeben
pthread_mutex_unlock(&_mutex);
}
// Artikelseite, exemplarisch
Engine::pageArticle(HTTPRequest& request, HTML &html)
{
// Artikelnummer ist 2. Pfadkomponente, z.B. /art/1829/
int artid = atoi(request.dir(1));
// Finde Artikel in Suchindex
Article *art = articleById(artid);
if (art) {
// HTML-Kopf mit Seitentitel erzeugen
html.addPageHeader(art->title()); // Titel des Artikels
// Inhalt der Seite anhand der Daten aus dem Objekt art
html.add("Beschreibung: %s
\n", art->description());
html.add("Anbieter: %s
\n", art->owner->fullname());
// Seitefuss und HTML-Abschlusscode
html.addPageFooter();
}
else // Artikel nicht gefunden
pageUnknown(request, html);
}