Le serveur accepte des commandes GET selon le protocole HTTP. En général, le
serveur retourne au client le contenu du fichier indiqué dans le
GET, mais le traitement exact depend de l'extention du fichier demandé. Vous devez pouvoir
traiter les types de fichiers suivants ( et retourner le "type"
approprié dans l'en-tête de la réponse):
.html ou .htm ( retourner text/html). .txt, .c, .java ( ... text/plain) .gif ( ... image/gif). .jpg ou jpeg ( ... image/jpeg). .pdf ( ... application/pdf).
Si le fichier demandé est un répertoire, votre serveur doit se comporter
comme un serveur WEB et afficher le fichier "index.html" (ou
``index.htm'') du répertoire. S'il n'existe pas de fichier
pourtant un de ces deux noms, il faut alors retourner une liste des
fichiers contenuent dans le répertoire (il faut retourner une page html
avec une liste de liens vers les fichiers dans le repertoire). Note:
vous pourrez utiliser la fonction stat() pour vérifier si
un fichier est un répertoire.
Si le client demande un fichier d'un autre type que ceux
énumérés ci-dessus, votre serveur doit refuser la
requête en envoyant un message d'erreur approprié dans un
fichier html.
Dans l'environnement du DIRO, chaque usager à la possibilité d'avoir
un petit site web. Les fichiers de ce site web se trouvent dans le
répertoire $HOME/HTML/. Notre serveur va donc utiliser ce répertoire
pour y chercher ces fichiers. Le PATH donne dans le GET est donc
consideré comme étant relatif au répertoire WWW du serveur du DIRO,
c'est à dire que votre serveur trouve les fichiers en concatenant le
Path du GET avec $HOME/HTML/Projet.
NOTE IMPORTANTE La fonction suivante devra être utilisée afin d'éviter qu'un client quelconque puisse lister tous vos fichiers privés. L'idée est de s'assurer que les appelés se trouvent bel et bien dans le répertoire HTML.
int fichierDangereux(char *strFile) { int i, nLength; nLength = strlen(strFile) - 1; if (*strFile == '/') return 1; for(i = 0; i < nLength; i++) if (strFile[i] == '.' && strFile[i+1] == '.') return 1; return 0; }
Cette fonction retournera TRUE si le path soumis contiend des
"..". Dans ce cas, c'est qu'un client essait d'accéder à un
fichier interdit. Vous devez alors retourner un message d'erreur dans
un fichier HTML.