2017-04-01 15:01:36 +00:00
|
|
|
#include "server.h"
|
2017-03-28 16:45:18 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 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
|
2017-04-01 15:01:36 +00:00
|
|
|
* @DUSER_SOCKET<int*> Pointeur sur la SOCKET du BUS DE DONNEES utilisateur
|
|
|
|
* @DFTP_SOCKET<int*> Pointeur sur la SOCKET du BUS DE DONNEES FTP
|
|
|
|
*
|
2017-03-28 16:45:18 +00:00
|
|
|
*
|
|
|
|
*
|
|
|
|
* @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
|
2017-04-01 15:01:36 +00:00
|
|
|
*
|
2017-03-28 16:45:18 +00:00
|
|
|
* [3] Retour de la réponse
|
2017-04-01 15:01:36 +00:00
|
|
|
*
|
2017-03-28 16:45:18 +00:00
|
|
|
*/
|
|
|
|
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
|
2017-04-01 15:01:36 +00:00
|
|
|
* @DUSER_SOCKET<int*> Pointeur sur la SOCKET du BUS DE DONNEES utilisateur
|
|
|
|
* @DFTP_SOCKET<int*> Pointeur sur la SOCKET du BUS DE DONNEES FTP
|
|
|
|
*
|
2017-03-28 16:45:18 +00:00
|
|
|
*
|
|
|
|
*
|
|
|
|
* @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
|
2017-04-01 15:01:36 +00:00
|
|
|
*
|
2017-03-28 16:45:18 +00:00
|
|
|
* (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)
|
2017-04-01 15:01:36 +00:00
|
|
|
*
|
2017-03-28 16:45:18 +00:00
|
|
|
* (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
|
|
|
|
*
|
2017-04-01 15:01:36 +00:00
|
|
|
*
|
|
|
|
*
|
2017-03-28 16:45:18 +00:00
|
|
|
* @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);
|