sysdis-project/central-manager/lib/server.h

100 lines
3.4 KiB
C

#include "server.h"
/* Gestion de la requête du client
* ==IN/OUT==
* @pBuffer<char*> Requête en question
* @USER_SOCKET<int*> Pointeur sur la SOCKET du BUS DE COMMANDES utilisateur
* @FTP_SOCKET<int*> Pointeur sur la SOCKET du BUS DE COMMANDES FTP
* @DUSER_SOCKET<int*> Pointeur sur la SOCKET du BUS DE DONNEES utilisateur
* @DFTP_SOCKET<int*> Pointeur sur la SOCKET du BUS DE DONNEES FTP
*
*
*
* @history
* [1] On découpe la requête en 2 parties (rCommand, rContent)
* [2] Selection en fonction de @rCommand
* (1) USER username@serveur => connection FTP (commande)
* 1. On extrait @username et @hostname
* 2. On se connecte au serveur FTP (commandes)
* 3. On envoie la séquence d'initialisation
* 4. On envoie la requête USER au serveur FTP auquel on vient de se connecter
*
* (2) PORT a1,a2,a3,a4,p1,p2 => utilisateur (actif)
* 1. On récupère l'ip et le port de la requête
* 2. On se connecte au client
* 3. Envoi de "PASV" car on veut être en mode passif entre le proxy et le serveur FTP
* (n) Si aucun traitement on recopie la requête telquel
*
* [3] Retour de la réponse
*
*/
int MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSER_SOCKET, int* DFTP_SOCKET);
/* Gestion de la réponse du serveur FTP et modification de la réponse
*
* @pAnswer<char**> Pointeur sur le buffer de réponse du serveur FTP
* @USER_SOCKET<int*> Pointeur sur la SOCKET du BUS DE COMMANDES utilisateur
* @FTP_SOCKET<int*> Pointeur sur la SOCKET du BUS DE COMMANDES FTP
* @DUSER_SOCKET<int*> Pointeur sur la SOCKET du BUS DE DONNEES utilisateur
* @DFTP_SOCKET<int*> Pointeur sur la SOCKET du BUS DE DONNEES FTP
*
*
*
* @history
* [1] On découpe la requête en 2 parties (ftpCode, ftpText)
* [2] Selection en fonction de @ftpCode
* (1) 220- Demande d'username
* (2) 331- username OK -> demande MDP
* (3) 230- Bon mdp -> connection
* (4) 530- Mauvais mdp -> message erreur
* (5) 215- Info SYST [COMMENTÉ]
* (6) 221- LOGOUT => EXIT (commande QUIT)
* (7) 227- Mode passif => On lance les SOCKETS du BUS DE DONNEES
* 1. On récupère l'ip et le port de la réponse
* 2. Connexion au serveur FTP
* 3. Envoi du message de code 200
*
* (8) 150- On lit la SOCKET FTP du BUS DE DONNEES
* 1. Envoi au client de l'écoute de la réponse (associée) du BUS DE DONNEES
* 2. On lit la SOCKET FTP (BUS DE DONNEES)
* 3. On redirige sur la SOCKET utilisateur (BUS DE DONNEES)
* 4. On ferme les SOCKETS du BUS DE DONNEES
* 5. On vide le BUS DE COMMANDE du serveur FTP
* A. On définit un TIMEOUT (1 sec
* B. On attends une réponse
* C. On enlève le TIMEOUT (default)
* 6. On transmet le message de fin de la transaction (226)
*
* (9) 226- Fin de transfert de données (fermeture SOCKETS du BUS DE DONNEES)
* (n) xxx- Commande inconnue
*
* [3] Retour de la réponse
*/
void MANAGE_RESPONSE(char* pAnswer, int* USER_SOCKET, int* FTP_SOCKET, int* DUSER_SOCKET, int* DFTP_SOCKET);
/* Attends une réponse du client
*
* @pSocket<int*> Pointeur sur la SOCKET en question
* @pBuffer<char*> Buffer qui contiendra la réponse
*
* @return nbRead<int> On retourne le nombre de char lus, sinon -1 si erreur
*
*
*
* @history
* [1] On read() tant qu'on a pas les symboles de fin "\r\n"
* [2] On écrit sur le BUFFER
* [3] Si une erreur se produit, on retourne -1
*
*/
int WAIT_CLIENT(int* pSocket, char* pBuffer);