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); }