Commentaires <SERVER.H>
This commit is contained in:
parent
9e9f09d796
commit
801821f3e4
60
dep/server.c
60
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 <int>
|
||||
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 <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*>
|
||||
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){
|
||||
|
||||
// }
|
||||
}
|
35
dep/server.h
35
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<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
|
||||
* [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<int*> Pointeur sur la SOCKET en question
|
||||
* @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
|
||||
*
|
||||
*
|
||||
*
|
||||
* @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);
|
Loading…
Reference in New Issue