= Handlers = Voici de quoi mieux comprendre quand sont appelés les Handlers et comment les utiliser. == Handlers server: == {{{onServerStart}}} et {{{onServerStop}}}, au démarage et à l'arrêt du serveur. == Handler module: == {{{onLoadModule}}} et {{{onUnloadModule}}} quand on charge ou décharge un module. == Handler send/recv == {{{onSend}}} et {{{onRecv}}}, à chaque fois que des données sont envoyées ou reçues. == Handlers pour clients: == {{{ EV - onAccept EV - onConnectionStart Pour chaque SubRequest | HttpTransaction tr; | | EV - onSubrequestStart | | // Verification de la requette reçue | // HttpRequest est remplis et parser.checkRequest() vérifie qu'elle est valide (dans le sens "elle respecte la rfc") | // L'url telle quelle est donnée dans la requête est mise dans HttpRequest.getUri() | parser.checkRequest() | EV - onUriRaw | parser.cleanUri() // L'url est "clean". Il n'y a plus de char htmlentitisés, ou de choses du genre ../ | EV - onUriClean | | EV - onDocRoot // Recherche du DocumentRoot (par défaut, |zia|server|doc-root) | EV - onPhysicalAccess // le path du fichier sur le disque est mis dans HttpResponse.getPhysicalPath(), par mod_static ou mod_browsedir par exemple | EV - onTypeCheck // Le type mime du module est cherché (mod_mime) | EV - onProcessContent // Le contenu du fichier est manipulé (mod_php par exemple) | EV - onFilter // Le contenu du fichier peut être modifié (mod_compress) | // Il est important de noter que tant qu'on a pase besoin du contenu du fichier, il n'est pas lu. Ainsi si il n'y pas de contenu dans HttpRequest, alors il suffira d'utiliser IClientSocket.sendfile(HttpResponse.getPhysicalPath()) | | buildResponse(tr); | sendResponse(tr); | | onSubrequestEnd EV - onConnectionStart }}}