Previous Contents Next

A.2.1   Serveur Web en Bourne Shell

#!/bin/sh
#
# Exemple de serveur HTTP en shell
#

#
# Quelques constantes
#

NC=/usr/bin/nc
PORT=8080
TTY_PREFIXE=/dev/tty
PTY_PREFIXE=/dev/pty
TTY_NUMERO=q3
REPERTOIRE=${HOME}/Scripts/Web

#
# Boucle principale
# (ecoute sur le port, traitement de la requete, envoi du fichier)
#

while true ; do
    #
    # On ecoute sur le cote maitre du terminal virtuel
    #
    ${NC} -l -p ${PORT} 4<>${PTY_PREFIXE}${TTY_NUMERO} >&4 2>&4 <&4 &
    PID=$!
    #
    # On lance un sous-shell sur le cote esclave
    #
    (
    stty -echo igncr
    #
    # Lecture de la requete HTTP
    #
    read requete
    #
    # Lecture des entetes (mises a la poubelle)
    #
    while read line ; do 
 if [ -z "${line}" ] ; then break ; fi
    done
    #
    # Analyse de la requete
    #
    set -- ${requete}
    commande=$1 ; file=$2 ; protocole=$3
    #
    # Reponse a la requete
    #
    if [ "${commande}" != "GET" -o ! -f "${REPERTOIRE}/${file}" ] ; then
 echo "${protocole} 400 erreur"
 echo
 echo "Erreur !!"
    else
 echo "${protocole} 200 OK"
 echo "Content-type: text/html"
 echo
 cat "${REPERTOIRE}/${file}"
    fi
    ) 4<>${TTY_PREFIXE}${TTY_NUMERO} >&4 2>&4 <&4
    #
    # On stoppe l'ecoute
    #
    kill ${PID}
    sleep 2
done

Previous Contents Next