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,77 +249,78 @@ 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
--------------------------------------------*/ --------------------------------------------*/
case 331: case 331:
strcpy(response, USER_MSG); strcpy(response, USER_MSG);
break; break;
/* (3) Bon mdp -> connection /* (3) Bon mdp -> connection
--------------------------------------------*/ --------------------------------------------*/
case 230: case 230:
strcpy(response, PASS_BON_MSG); strcpy(response, PASS_BON_MSG);
break; break;
/* (4) Mauvais mdp -> message erreur /* (4) Mauvais mdp -> message erreur
--------------------------------------------*/ --------------------------------------------*/
case 530: case 530:
strcpy(response, PASS_BAD_MSG); strcpy(response, PASS_BAD_MSG);
break; break;
/* (5) Info SYST /* (5) Info SYST
--------------------------------------------*/ --------------------------------------------*/
// case 215: // case 215:
// strcpy(response, "bla\n"); // strcpy(response, "bla\n");
// break; // break;
/* (6) LOGOUT => EXIT /* (6) LOGOUT => EXIT
--------------------------------------------*/ --------------------------------------------*/
case 221: case 221:
strcpy(response, EXIT_MSG); strcpy(response, EXIT_MSG);
break; break;
/* (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;
/* (8) On lit la SOCKET FTP du BUS DE DONNEES /* (8) On lit la SOCKET FTP du BUS DE DONNEES
--------------------------------------------*/ --------------------------------------------*/
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);
@ -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); 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); int nbRead = WAIT_SOCKET_UPDATE(DFTP_SOCKET, BUFFER);
if( DEBUGMOD&DAT && nbRead == -1 ) printf("ERROR\n"); 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 // 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;
/* (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;
/* (n) Commande inconnue /* (n) Commande inconnue
--------------------------------------------*/ --------------------------------------------*/
@ -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;
@ -407,11 +408,4 @@ 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,15 +38,14 @@ 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)
* 3. On envoie la séquence d'initialisation * 3. On envoie la séquence d'initialisation
* 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.