diff --git a/dep/client.c b/dep/client.c index 09ceb6b..14bf8d0 100644 --- a/dep/client.c +++ b/dep/client.c @@ -7,6 +7,7 @@ int CONNECT_CLIENT(char* serverHost, char* serverPort, int* pSocket){ struct addrinfo hints; // contiendra le filtre/format struct addrinfo* addrinfo; // contiendra les infos int CONNECT; // file_desc(s) + int GETADDRINFO; // contiendra l'erreur ou pas de getaddrinfo() char BUFFER[maxBuffLen]; // BUFFER de communication /* [1] On définit le filtre/format @@ -28,7 +29,10 @@ int CONNECT_CLIENT(char* serverHost, char* serverPort, int* pSocket){ /* [2] On récupère les infos =======================================================*/ - getaddrinfo(serverHost, serverPort, &hints, &addrinfo); + GETADDRINFO = getaddrinfo(serverHost, serverPort, &hints, &addrinfo); + + // si erreur + if( GETADDRINFO < 0 ) return -1; if( DEBUGMOD&SCK ) printf("=============RES============\n"); if( DEBUGMOD&SCK ) printf( "AI_FLAGS = %d\n", addrinfo->ai_flags ); // int diff --git a/dep/server.c b/dep/server.c index 93bb19b..137e99c 100644 --- a/dep/server.c +++ b/dep/server.c @@ -128,7 +128,7 @@ void DROP_SERVER(const char* serverHost, char** givenPort, int* listenSocket){ -void MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSER_SOCKET, int* DFTP_SOCKET){ +int MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSER_SOCKET, int* DFTP_SOCKET){ if( DEBUGMOD&HDR ) printf("====== MANAGE_REQUEST(%s, %d, %d, %d, %d) ======\n\n", pRequest, *USER_SOCKET, *FTP_SOCKET, *DUSER_SOCKET, *DFTP_SOCKET); @@ -168,14 +168,19 @@ void MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE /* 2. On se connecte au serveur FTP (commandes) */ - CONNECT_CLIENT(hostName, FTP_PORT, FTP_SOCKET); - if( *FTP_SOCKET == -1 ) printf("CAN'T CONNECT TO GIVEN SERVER!!\n"); + int error = CONNECT_CLIENT(hostName, FTP_PORT, FTP_SOCKET); + + if( error == -1 || *FTP_SOCKET == -1 ){ // si erreur + printf("Impossible de se connecter au serveur (%s:%s)\n", hostName, FTP_PORT); + strcpy(pRequest, "421 ERREUR: impossible de se connecter au serveur!!\r\n"); + return -1; + } if( DEBUGMOD&SCK ) printf("FTP SOCKET CONNECTED AT %s:%s\n", hostName, FTP_PORT); /* 3. On envoie la séquence d'initialisation */ - CLIENT_SEND(FTP_SOCKET, "\r\n", &ftp_response); + CLIENT_SEND(FTP_SOCKET, "", &ftp_response); if( DEBUGMOD&CMD ) xPrint("P->F: %s\n\n", "\r\n"); if( DEBUGMOD&CMD ) xPrint("F->P: %s\n", ftp_response); @@ -189,6 +194,9 @@ void MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE strcpy(response, "USER xdrm\r\n"); } + else if( strcmp(rCommand, "USER") == 0 ) // si oubli serveur + strcpy(response, "421 'username@FTPserver' attendu\n"); + /* (2) PORT a1,a2,a3,a4,p1,p2 => utilisateur (actif) --------------------------------------------*/ else if( strcmp(rCommand, "PORT") == 0 ){ @@ -224,6 +232,10 @@ void MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSE /* [3] Retour de la réponse ================================================*/ strcpy(pRequest, response); + printf("RESP: %s\n", pRequest); + + + return 0; } diff --git a/dep/server.h b/dep/server.h index 434d260..58d7184 100644 --- a/dep/server.h +++ b/dep/server.h @@ -53,7 +53,7 @@ void DROP_SERVER(const char* serverHost, char** givenPort, int* listenSocket); * [3] Retour de la réponse * */ -void MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSER_SOCKET, int* DFTP_SOCKET); +int MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSER_SOCKET, int* DFTP_SOCKET); diff --git a/proxy_ftp.c b/proxy_ftp.c index bee0801..84b8b6c 100644 --- a/proxy_ftp.c +++ b/proxy_ftp.c @@ -126,6 +126,8 @@ void* manageConnection(void* THREADABLE_SOCKET){ char* ftp_response; // contiendra le BUFFER de réponse du serveur FTP (commandes) int nbReceived, nbSend; // contiendra les nb reçu && envoyé BUFFER = malloc( maxBuffLen ); + int error; + /* [2] Envoi de la séquence de bienvenue ============================================================================*/ swrite(&USER_SOCKET, WLCM_MSG); @@ -141,10 +143,10 @@ void* manageConnection(void* THREADABLE_SOCKET){ /* [4] Traitement de la requête ============================================================================*/ - MANAGE_REQUEST(BUFFER, &USER_SOCKET, &FTP_SOCKET, &DUSER_SOCKET, &DFTP_SOCKET); + error = MANAGE_REQUEST(BUFFER, &USER_SOCKET, &FTP_SOCKET, &DUSER_SOCKET, &DFTP_SOCKET); // si on a pas la connection FTP (commande) initialisée, on quitte - // if( FTP_SOCKET == -1 ) break; + if( error == -1 ) break; /* [5] Redirection vers le serveur FTP diff --git a/proxy_ftp.h b/proxy_ftp.h index 1847708..9744060 100644 --- a/proxy_ftp.h +++ b/proxy_ftp.h @@ -33,7 +33,7 @@ #define THR 0x40 // FILTRE pour THREADS // possibilité de cumuler les DEBUGMODES -#define DEBUGMOD THREADS // REVEALS + HEADER + THREADS +#define DEBUGMOD SOCKETS + THREADS // REVEALS + HEADER + THREADS /* vars */ diff --git a/test b/test index 4c9d26d..2997a01 100755 Binary files a/test and b/test differ