záhlaví
Autor: Jan Dohnal
Škola: ČVUT FEL
Semestr: 10. (2006/2007)
Předmět: 36PJC - Jazyk C++
obsah
zadání
postup
konfigurace
spouštění aplikace
kompilace
soubory ke stažení
zadání
Jednoduchý http server. ;)
postup
V programu jsem si vyzkoušel základní syntaxi C++. Dále jsem se naučil používat rozšířenou třídu std::string,
která umožnuje rozšířené možnosti používání řetezcových funkcí. Program je rozdělen do dvou souborů: myhttpd.h, myhttpd.c.
myhttpd.h
- #define BUFSIZE 10000
- std::string trim(std::string s)
.... pomocná funkce pro oříznutí stringu od mezer konců řádky a tabulátorů.
- class HTTPRequest {
public:
std::string method;
std::string URI;
std::string fileName;
std::string params;
std::string format;
std::string host;
HTTPRequest ( const std::string& RAWdata )
~HTTPRequest ( void )
};
.... třída, která při vytvoření vyhodnotí dotaz od klientské aplikace.
method určuje metodu GET, nebo POST.
URI zadaná cesta klientem.
fileName jméno dotazovaného souboru (bez parametrů).
params parametry oddělené mezerou (jmeno=hodnota).
format formát ve kterém s klient vyžádal výsledek.
host jméno dotazované domény.
- class Configuration {
public:
std::string webroot;
std::string indexFile;
std::string phpRun;
int port;
int dirList;
Configuration ( const std::string& fileName = "" )
~Configuration ( void )
}
.... třída, která při vytvoření načte konfiguraci. Položky viz. kofigurace.
- class Connection {
Connection ( int port )
~Connection ( void )
}
.... třída, pro vytvoření socketu, který naslouchá.
- int CreateClient ( void )
.... vytvoření spojení s klientem.
- int CloseClient ( void )
.... uzavření spojení s klientem.
- int RecieveData ( std::string& buffer )
.... přijme data do stringu.
- int SendData ( const std::string& buffer )
.... pošle string klientovi.
- int SendFile ( const std::string& fileName )
.... pošle soubor klientovi.
myhttpd.c
- int fileExists(const std::string& fileName)
.... pomocná funkce pro kontrolu existence souboru
- int FileIsPHP(const std::string& fileName)
.... kontrola zda je soubor PHP skript (dle přípony)
- string GetFileType(const std::string& fileName)
.... vrací ISO typ souboru (dle přípony), umí HTML, CSS, JPEG, PNG, GIF
- string GetPHP(const std::string& fileName,const std::string& params, const std::string& phpRun)
.... vrací vystup z programu PHP
- string GetList(const std::string& fileName,const std::string& caption)
.... vrací list souboru z adresáře v HTML
- string GetDate(void)
.... vrací aktuální datum a čas ve spravném formátu
- int getHTTPRequest(Connection &spojeni,Configuration &config)
.... obsluhuje jednotlivé dotazy
- int main(int argc, char *argv[])
.... hlavní část programu
konfigurace
Konfigurace programu má pouze 6 možných nastavení:
- indexFile ... jméno indexového souboru pro adresáře. Lze zadávat i více možností oddělených ",". Např.: index.html,index.php Implicitně: index.html
- port ... port na kterém myhttpd naslouchá. Např.: 80 Implicitně: 4040
- webroot ... kořenový adresář webserveru. Neboli adresář kde se hledají dotazované stránky. Implicitně: /webroot/html
- phpRun ... cesta k programu php. Pokud není nalezen, skripty se neprovádějí. Implicitně: /opt/php5/bin/php
- dirList ... prohlížet adresáře? Možné jsou hodnoty typu integer, ale berou se pouze hodnoty 1 a jiné. Kde 1 znamená ano. Implicitně: 0
- quietMode ... tichý režim, neboli pokud nemá mít program žádný debug výstup. Možné jsou hodnoty typu integer, ale berou se pouze hodnoty 1 a jiné. Kde 1 znamená ano. Implicitně: 0
Kromě těchto informací může soubor obsahovat neomezené množství mezer, nebo tabulátorů. Program také umí ignorovat komentáře (resp.: //).
spouštění aplikace
Aplikace má při spuštění jediný nepovinný přepínač:
- configName - cesta k souboru s konfigurací (implicitně ./myhttpd.conf)
Aplikace běží jako aktivní aplikace (na pozadí lze spustit pomocí přepínače &, resp.: ./myhttpd &)
kompilace
Program lze kompilovat (a byl zkompilován) programem g++ (resp. g++ -Wall -Wno-long-long -pedantic myhttpd.c -o myhttpd).
Testován byl na počítači Intel Core Duo 2GHz, 1.5GB RAM s operačním systémem Mac OS X, Tiger 10.4.10.
soubory ke stažení