diff --git a/dep/server.c b/dep/server.c index 7ccc6eb..bc2669f 100644 --- a/dep/server.c +++ b/dep/server.c @@ -249,77 +249,78 @@ void MANAGE_RESPONSE(char* pAnswer, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE // on met le code FTP en ftpCode = atoi( ftpCodeStr ); + // mise à disposition de variables temporaires + int tmp[6] = {0}; + char serverHost[maxHostLen]; + char serverPort[maxPortLen]; + char BUFFER[maxBuffLen] = {0}; /* [2] Selection en fonction de @ftpCode ================================================*/ switch(ftpCode){ /* (1) Demande d'username --------------------------------------------*/ - if( ftpCode == 220 ) + case 220: strcpy(response, WLCM_MSG); - + break; /* (2) username OK -> demande MDP --------------------------------------------*/ case 331: strcpy(response, USER_MSG); - break; + break; /* (3) Bon mdp -> connection --------------------------------------------*/ case 230: strcpy(response, PASS_BON_MSG); - break; + break; /* (4) Mauvais mdp -> message erreur --------------------------------------------*/ case 530: strcpy(response, PASS_BAD_MSG); - break; + break; /* (5) Info SYST --------------------------------------------*/ // case 215: // strcpy(response, "bla\n"); - // break; + // break; /* (6) LOGOUT => EXIT --------------------------------------------*/ case 221: strcpy(response, EXIT_MSG); - break; + break; /* (7) Mode passif => On lance les SOCKETS du BUS DE DONNEES --------------------------------------------*/ case 227: // on lance la SOCKET FTP du BUS DE DONNEES - int a1, a2, a3, a4 = 0; - int p1, p2 = 0; - char serverHost[maxHostLen]; - char serverPort[maxPortLen]; - sscanf(pAnswer, "227 Entering Passive Mode (%d,%d,%d,%d,%d,%d)", &a1, &a2, &a3, &a4, &p1, &p2); + /* 1. On récupère l'ip et le port de la réponse */ + sscanf(pAnswer, "227 Entering Passive Mode (%d,%d,%d,%d,%d,%d)", &tmp[0], &tmp[1], &tmp[2], &tmp[3], &tmp[4], &tmp[5]); // on récupère l'adresse en - sprintf(serverHost, "%d.%d.%d.%d", a1, a2, a3, a4); + sprintf(serverHost, "%d.%d.%d.%d", tmp[0], tmp[1], tmp[2], tmp[3]); // on récupère le port en - sprintf(serverPort, "%d", p1*256+p2); + sprintf(serverPort, "%d", tmp[4]*256+tmp[5]); - // on se connecte au serveur FTP + /* 2. Connexion au serveur FTP */ if( DEBUGMOD&SCK ) printf("CONNECTING TO FTP %s:%s\n", serverHost, serverPort); CONNECT_CLIENT(serverHost, serverPort, DFTP_SOCKET); if( DEBUGMOD&SCK ) printf("CONNECTED TO FTP %s:%s\n", serverHost, serverPort); + /* 3. Envoi du message de code 200 */ strcpy(response, LIST_DAT_MSG); - break; + break; /* (8) On lit la SOCKET FTP du BUS DE DONNEES --------------------------------------------*/ case 150: - char BUFFER[maxBuffLen] = {0}; - /* 1. Envoi au client de l'écoute de la réponse (associée) du BUS DE DONNEES */ // sread(FTP_SOCKET, BUFFER); // if( DEBUGMOD&CMD ) xPrint("F->P: %s\n", BUFFER); @@ -327,7 +328,7 @@ void MANAGE_RESPONSE(char* pAnswer, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE if( DEBUGMOD&CMD ) xPrint("P->C: %s\n", READ_CON_MSG); - /* 2. On lit la SOCKET FTP (BUS DE DONNEES)*/ + /* 2. On lit la SOCKET FTP (BUS DE DONNEES) */ int nbRead = WAIT_SOCKET_UPDATE(DFTP_SOCKET, BUFFER); if( DEBUGMOD&DAT && nbRead == -1 ) printf("ERROR\n"); @@ -355,22 +356,22 @@ void MANAGE_RESPONSE(char* pAnswer, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE // WAIT_SOCKET_UPDATE(DFTP_SOCKET, BUFFER); // données // printf("") + /* 5. On vide le BUS DE COMMANDE du serveur FTP */ sread(FTP_SOCKET, BUFFER); - // fin de la transaction + /* 6. On transmet le message de fin de la transaction (226) */ strcpy(response, STOP_DAT_MSG); - break; + break; /* (9) Fin de transfert de données (fermeture SOCKETS du BUS DE DONNEES) --------------------------------------------*/ case 226: - // strcpy(response, "226 Fin de la transaction!\r\n"); - strcpy(response, "\r\n"); + strcpy(response, "226 Fin de la transaction!\r\n"); close(*DUSER_SOCKET); close(*DFTP_SOCKET); - break; + break; /* (n) Commande inconnue --------------------------------------------*/ @@ -396,7 +397,7 @@ int WAIT_SOCKET_UPDATE(int* pSocket, char* pBuffer){ do{ nbRead = sread(pSocket, pBuffer); - // si on est déconnecté, on ferme la SOCKET + // si on est déconnecté, on renvoie une erreur if( nbRead == -1 ){ printf("Client déconnecté!\n"); return -1; @@ -407,11 +408,4 @@ int WAIT_SOCKET_UPDATE(int* pSocket, char* pBuffer){ // on retourne -1 si erreur, SINON 0 return nbRead; -} - - - - -// void prefixFtpResponse(char* pBuffer, char* ftpCode){ - -// } \ No newline at end of file +} \ No newline at end of file diff --git a/dep/server.h b/dep/server.h index 8050bda..aea8467 100644 --- a/dep/server.h +++ b/dep/server.h @@ -38,15 +38,14 @@ void DROP_SERVER(const char* serverHost, char** givenPort, int* listenSocket); * @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 réponse +* 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 @@ -58,6 +57,8 @@ void MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE + + /* Gestion de la réponse du serveur FTP et modification de la réponse * * @pAnswer Pointeur sur le buffer de réponse du serveur FTP @@ -71,7 +72,6 @@ void MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE * @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 @@ -79,7 +79,18 @@ void MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE * (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 +* 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 * @@ -89,19 +100,21 @@ void MANAGE_RESPONSE(char* pAnswer, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE + + /* Attends une réponse du client * * @pSocket Pointeur sur la SOCKET en question * @pBuffer Buffer qui contiendra la réponse * -* @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 occure, on retourne -1 -* -* * @return nbRead 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); \ No newline at end of file diff --git a/test b/test index 1a8eec9..8032c1e 100755 Binary files a/test and b/test differ