Commentaires <SERVER.H>

This commit is contained in:
xdrm-brackets 2015-12-17 00:30:30 +01:00
parent 9e9f09d796
commit 801821f3e4
3 changed files with 51 additions and 44 deletions

View File

@ -249,15 +249,20 @@ void MANAGE_RESPONSE(char* pAnswer, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE
// on met le code FTP en <int> // on met le code FTP en <int>
ftpCode = atoi( ftpCodeStr ); 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 /* [2] Selection en fonction de @ftpCode
================================================*/ ================================================*/
switch(ftpCode){ switch(ftpCode){
/* (1) Demande d'username /* (1) Demande d'username
--------------------------------------------*/ --------------------------------------------*/
if( ftpCode == 220 ) case 220:
strcpy(response, WLCM_MSG); strcpy(response, WLCM_MSG);
break;
/* (2) username OK -> demande MDP /* (2) username OK -> demande MDP
--------------------------------------------*/ --------------------------------------------*/
@ -294,22 +299,20 @@ void MANAGE_RESPONSE(char* pAnswer, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE
/* (7) Mode passif => On lance les SOCKETS du BUS DE DONNEES /* (7) Mode passif => On lance les SOCKETS du BUS DE DONNEES
--------------------------------------------*/ --------------------------------------------*/
case 227: // on lance la SOCKET FTP 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]; /* 1. On récupère l'ip et le port de la réponse */
char serverPort[maxPortLen]; sscanf(pAnswer, "227 Entering Passive Mode (%d,%d,%d,%d,%d,%d)", &tmp[0], &tmp[1], &tmp[2], &tmp[3], &tmp[4], &tmp[5]);
sscanf(pAnswer, "227 Entering Passive Mode (%d,%d,%d,%d,%d,%d)", &a1, &a2, &a3, &a4, &p1, &p2);
// on récupère l'adresse en <char*> // on récupère l'adresse en <char*>
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 <char*> // on récupère le port en <char*>
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); if( DEBUGMOD&SCK ) printf("CONNECTING TO FTP %s:%s\n", serverHost, serverPort);
CONNECT_CLIENT(serverHost, serverPort, DFTP_SOCKET); CONNECT_CLIENT(serverHost, serverPort, DFTP_SOCKET);
if( DEBUGMOD&SCK ) printf("CONNECTED TO FTP %s:%s\n", serverHost, serverPort); if( DEBUGMOD&SCK ) printf("CONNECTED TO FTP %s:%s\n", serverHost, serverPort);
/* 3. Envoi du message de code 200 */
strcpy(response, LIST_DAT_MSG); strcpy(response, LIST_DAT_MSG);
break; break;
@ -318,8 +321,6 @@ void MANAGE_RESPONSE(char* pAnswer, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE
--------------------------------------------*/ --------------------------------------------*/
case 150: case 150:
char BUFFER[maxBuffLen] = {0};
/* 1. Envoi au client de l'écoute de la réponse (associée) du BUS DE DONNEES */ /* 1. Envoi au client de l'écoute de la réponse (associée) du BUS DE DONNEES */
// sread(FTP_SOCKET, BUFFER); // sread(FTP_SOCKET, BUFFER);
// if( DEBUGMOD&CMD ) xPrint("F->P: %s\n", BUFFER); // if( DEBUGMOD&CMD ) xPrint("F->P: %s\n", BUFFER);
@ -355,10 +356,11 @@ void MANAGE_RESPONSE(char* pAnswer, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE
// WAIT_SOCKET_UPDATE(DFTP_SOCKET, BUFFER); // données // WAIT_SOCKET_UPDATE(DFTP_SOCKET, BUFFER); // données
// printf("") // printf("")
/* 5. On vide le BUS DE COMMANDE du serveur FTP */
sread(FTP_SOCKET, BUFFER); sread(FTP_SOCKET, BUFFER);
// fin de la transaction /* 6. On transmet le message de fin de la transaction (226) */
strcpy(response, STOP_DAT_MSG); strcpy(response, STOP_DAT_MSG);
break; break;
@ -366,8 +368,7 @@ void MANAGE_RESPONSE(char* pAnswer, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE
/* (9) Fin de transfert de données (fermeture SOCKETS du BUS DE DONNEES) /* (9) Fin de transfert de données (fermeture SOCKETS du BUS DE DONNEES)
--------------------------------------------*/ --------------------------------------------*/
case 226: case 226:
// strcpy(response, "226 Fin de la transaction!\r\n"); strcpy(response, "226 Fin de la transaction!\r\n");
strcpy(response, "\r\n");
close(*DUSER_SOCKET); close(*DUSER_SOCKET);
close(*DFTP_SOCKET); close(*DFTP_SOCKET);
break; break;
@ -396,7 +397,7 @@ int WAIT_SOCKET_UPDATE(int* pSocket, char* pBuffer){
do{ do{
nbRead = sread(pSocket, pBuffer); 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 ){ if( nbRead == -1 ){
printf("Client déconnecté!\n"); printf("Client déconnecté!\n");
return -1; return -1;
@ -408,10 +409,3 @@ int WAIT_SOCKET_UPDATE(int* pSocket, char* pBuffer){
// on retourne -1 si erreur, SINON 0 // on retourne -1 si erreur, SINON 0
return nbRead; return nbRead;
} }
// void prefixFtpResponse(char* pBuffer, char* ftpCode){
// }

View File

@ -38,7 +38,6 @@ void DROP_SERVER(const char* serverHost, char** givenPort, int* listenSocket);
* @history * @history
* [1] On découpe la requête en 2 parties (rCommand, rContent) * [1] On découpe la requête en 2 parties (rCommand, rContent)
* [2] Selection en fonction de @rCommand * [2] Selection en fonction de @rCommand
*
* (1) USER username@serveur => connection FTP (commande) * (1) USER username@serveur => connection FTP (commande)
* 1. On extrait @username et @hostname * 1. On extrait @username et @hostname
* 2. On se connecte au serveur FTP (commandes) * 2. On se connecte au serveur FTP (commandes)
@ -46,7 +45,7 @@ void DROP_SERVER(const char* serverHost, char** givenPort, int* listenSocket);
* 4. On envoie la requête USER au serveur FTP auquel on vient de se connecter * 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) * (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 * 2. On se connecte au client
* 3. Envoi de "PASV" car on veut être en mode passif entre le proxy et le serveur FTP * 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 * (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 /* 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 * @pAnswer<char**> 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 * @history
* [1] On découpe la requête en 2 parties (ftpCode, ftpText) * [1] On découpe la requête en 2 parties (ftpCode, ftpText)
* [2] Selection en fonction de @ftpCode * [2] Selection en fonction de @ftpCode
*
* (1) 220- Demande d'username * (1) 220- Demande d'username
* (2) 331- username OK -> demande MDP * (2) 331- username OK -> demande MDP
* (3) 230- Bon mdp -> connection * (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É] * (5) 215- Info SYST [COMMENTÉ]
* (6) 221- LOGOUT => EXIT (commande QUIT) * (6) 221- LOGOUT => EXIT (commande QUIT)
* (7) 227- Mode passif => On lance les SOCKETS du BUS DE DONNEES * (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 * (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) * (9) 226- Fin de transfert de données (fermeture SOCKETS du BUS DE DONNEES)
* (n) xxx- Commande inconnue * (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 /* Attends une réponse du client
* *
* @pSocket<int*> Pointeur sur la SOCKET en question * @pSocket<int*> Pointeur sur la SOCKET en question
* @pBuffer<char*> Buffer qui contiendra la réponse * @pBuffer<char*> 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<int> On retourne le nombre de char lus, sinon -1 si erreur * @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); int WAIT_CLIENT(int* pSocket, char* pBuffer);

BIN
test

Binary file not shown.