diff --git a/dep/server.c b/dep/server.c index 0a39bed..8227183 100644 --- a/dep/server.c +++ b/dep/server.c @@ -154,9 +154,9 @@ void MANAGE_REQUEST(char* pRequest, int* DUSER_SOCKET, int* DFTP_SOCKET){ int a1, a2, a3, a4 = 0; int p1, p2 = 0; - char serverHost[maxHostLen]; - char serverPort[maxPortLen]; - char BUFFER[maxBuffLen]; + char serverHost[maxHostLen] = {0}; + char serverPort[maxPortLen] = {0}; + char BUFFER[maxBuffLen] = {0}; sscanf(pRequest, "PORT %d,%d,%d,%d,%d,%d", &a1, &a2, &a3, &a4, &p1, &p2); // on récupère l'adresse en @@ -171,7 +171,7 @@ void MANAGE_REQUEST(char* pRequest, int* DUSER_SOCKET, int* DFTP_SOCKET){ if( DEBUGMOD&SCK ) printf("CONNECTED TO CLIENT %s:%s\n", serverHost, serverPort); // on envoie PASV car on veut être en mode passif entre le proxy et le serveur FTP - strcpy(pRequest, "PASV\n"); + strcpy(pRequest, "PASV\r\n"); } // WAIT_SOCKET_UPDATE(DFTP_SOCKET, BUFFER); // xPrint("FTPLIST: %s\n", BUFFER); @@ -260,7 +260,7 @@ void MANAGE_RESPONSE(int* USER_SOCKET, int* FTP_SOCKET, char* pAnswer, int* DUSE CONNECT_CLIENT(serverHost, serverPort, DFTP_SOCKET); if( DEBUGMOD&SCK ) printf("CONNECTED TO FTP %s:%s\n", serverHost, serverPort); - strcpy(response, "200 PORT command successful\n"); + strcpy(response, LIST_DAT_MSG); } @@ -268,11 +268,14 @@ void MANAGE_RESPONSE(int* USER_SOCKET, int* FTP_SOCKET, char* pAnswer, int* DUSE --------------------------------------------*/ else if( ftpCode == 150 ){ // on lit la SOCKET FTP du BUS DE DONNEES - char BUFFER[maxBuffLen]; + 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); + swrite(USER_SOCKET, READ_CON_MSG); + if( DEBUGMOD&CMD ) xPrint("P->C: %s\n", READ_CON_MSG); + /* 2. On lit la SOCKET FTP (BUS DE DONNEES)*/ int nbRead = WAIT_SOCKET_UPDATE(DFTP_SOCKET, BUFFER); @@ -289,31 +292,32 @@ void MANAGE_RESPONSE(int* USER_SOCKET, int* FTP_SOCKET, char* pAnswer, int* DUSE if( DEBUGMOD&DAT ) xPrint("BUS_FTP->BUS_CLIENT: %s\n", BUFFER); + /* 4. On ferme les SOCKETS du BUS DE DONNEES */ close(*DFTP_SOCKET); - if( DEBUGMOD&CMD ) printf("BUS_FTP fermé\n"); + if( DEBUGMOD&CMD ) printf("BUS_FTP fermé (%d)\n", *DFTP_SOCKET); close(*DUSER_SOCKET); - if( DEBUGMOD&CMD ) printf("BUS_USER fermé\n"); + if( DEBUGMOD&CMD ) printf("BUS_USER fermé (%d)\n", *DUSER_SOCKET); // on vide les SOCKET FTP des 2 BUS - WAIT_SOCKET_UPDATE(FTP_SOCKET, BUFFER); // command - if( DEBUGMOD&SCK ) printf("FTP[CMD] vidé: %s\n", BUFFER); - WAIT_SOCKET_UPDATE(DFTP_SOCKET, BUFFER); // données - if( DEBUGMOD&SCK ) printf("FTP[DAT] vidé: %s\n", BUFFER); + // WAIT_SOCKET_UPDATE(FTP_SOCKET, BUFFER); // command + // WAIT_SOCKET_UPDATE(DFTP_SOCKET, BUFFER); // données + // printf("") + + sread(FTP_SOCKET, BUFFER); - swrite(USER_SOCKET, "150 Connection établie!\n"); - if( DEBUGMOD&CMD ) xPrint("P->C: %s\n", "150 Connection établie!\n"); // fin de la transaction - strcpy(response, "226 Données reçues!\n"); + strcpy(response, STOP_DAT_MSG); } /* (10) Fin de transfert de données --------------------------------------------*/ else if( ftpCode == 226 ){ // on ferme les SOCKETS du BUS DE DONNEES - strcpy(response, "226 Fin de la transaction!\n"); + // strcpy(response, "226 Fin de la transaction!\r\n"); + strcpy(response, "\r\n"); close(*DUSER_SOCKET); close(*DFTP_SOCKET); } diff --git a/dep/utility.c b/dep/utility.c index 4dcf167..fd7d532 100644 --- a/dep/utility.c +++ b/dep/utility.c @@ -71,11 +71,19 @@ void formatBuffer(char* pBuffer){ /* [1] On retire les "\n" et "\r" de la fin de la chaine ============================================================*/ - int i = strlen(pBuffer); + unsigned long i = strlen(pBuffer) - 1; - while( pBuffer[strlen(pBuffer)-1] == '\r' || pBuffer[strlen(pBuffer)-1] == '\n' ) - pBuffer[strlen(pBuffer)-1] = '\0'; + revealString(pBuffer); + while( pBuffer[i] == '\r' || pBuffer[i] == '\n' ){ + printf("(%lu)\n", i); + if( pBuffer[i] != '\r' && pBuffer[i] != '\n' ) + break; + + pBuffer[i] = '\0'; + i = strlen(pBuffer) - 1; + } + revealString(pBuffer); /* [2] On ajoute "\r\n" à la fin ============================================================*/ strcpy(pBuffer, strcat(pBuffer, "\r\n")); @@ -102,11 +110,16 @@ int swrite(int* pSocket, char* pBuffer){ if( *pSocket == -1 ) return -1; // si SOCKET fermée, on retourne une erreur if( strlen(pBuffer) == 0 ) return 0; // si on a rien à écrire, on n'écrit rien :p + /* 1. On formatte le Buffer */ + // formatBuffer(pBuffer); + + /* 2. On evoie le Buffer */ if( DEBUGMOD&BUF ) printf("SENDLEN_1: %lu\n", strlen(pBuffer)); int nbSent = write(*pSocket, pBuffer, strlen(pBuffer)); if( DEBUGMOD&BUF ) printf("SENDLEN_2: %d\n", nbSent); + /* 3. On vérifie que le retour est correct */ // si on est déconnecté, on ferme la SOCKET if( nbSent <= 0 ){ if( DEBUGMOD&BUF ) printf("NOTHING TO SEND\n"); @@ -117,6 +130,8 @@ int swrite(int* pSocket, char* pBuffer){ if( DEBUGMOD&RVL ) revealString(pBuffer); if( DEBUGMOD&RVL ) printf("SEND_2\n"); + + /* 4. On retourne le nombre de envoyés */ return nbSent; } @@ -179,5 +194,5 @@ void revealString(char* pString){ } /* 3. On affiche la chaîne explicite */ - if( DEBUGMOD&RVL ) printf("REVEALED: %s\n", revealedString); + if( DEBUGMOD&RVL ) printf("[[%s]]\n", revealedString); } \ No newline at end of file diff --git a/proxy_ftp.c b/proxy_ftp.c index d64fdeb..3dcb12c 100644 --- a/proxy_ftp.c +++ b/proxy_ftp.c @@ -109,7 +109,8 @@ static void* testServer(char* localPort){ /* [6] Traitement de la réponse (FTP) ============================================================================*/ MANAGE_RESPONSE(&USER_SOCKET, &FTP_SOCKET, ftp_response, &DUSER_SOCKET, &DFTP_SOCKET); - + + /* [7] Redirection vers le CLIENT ============================================================================*/ @@ -119,8 +120,8 @@ static void* testServer(char* localPort){ /* [8] On vide les buffers ============================================================================*/ - memset(BUFFER, '\0', maxBuffLen); // on vide le buffer - memset(ftp_response, '\0', maxBuffLen); + // memset(BUFFER, '\0', maxBuffLen); // on vide le buffer + // memset(ftp_response, '\0', maxBuffLen); } /* [9] Fermeture des connections (SOCKETS) diff --git a/proxy_ftp.h b/proxy_ftp.h index d5d7782..4911a5d 100644 --- a/proxy_ftp.h +++ b/proxy_ftp.h @@ -29,6 +29,8 @@ #define BUF 0x10 // FILTRE pour ONLY_BUFFERS #define HDR 0x20 // FILTRE pour ONLY_HEADERS +// possibilité de cumuler les DEBUGMODES +/* DEBUGMOD ONLY_COMMAND + ONLY_DATA + .. */ #define DEBUGMOD ONLY_REVEALS @@ -59,10 +61,10 @@ // 220- Qui est tu ?!\n // 220-\n // 220\n -#define WLCM_MSG "220-\n220- +----------------------------+\n220- | Bienvenue sur PROXY FCP!!! |\n220- +----------------------------+\n220-\n220-\n220- (FCP=File Club Protocol)\n220-\n220-\n220- Qui est tu ?!\n220-\n220\n" +#define WLCM_MSG "220-\r\n220- +----------------------------+\r\n220- | Bienvenue sur PROXY FCP!!! |\r\n220- +----------------------------+\r\n220-\r\n220-\r\n220- (FCP=File Club Protocol)\r\n220-\r\n220-\r\n220- Qui est tu ?!\r\n220-\r\n220\r\n" -#define CON_MSG "220 Connecté au serveur\n" -#define USER_MSG "331 Tu connais la procédure.. Donne moi le mot de passe ?\n" +#define CON_MSG "220 Connecté au serveur\r\n" +#define USER_MSG "331 Tu connais la procédure.. Donne moi le mot de passe ?\r\n" // 230- Bienvenue au FILE CLUB!\n\n // 230- Les règles du File Club sont:\n // 230- ====================================\n @@ -75,14 +77,17 @@ // 230- 7. Le transfert dure aussi longtemps qu'il doit durer.\n // 230- 8. Si c'est votre premier soir au File Club, vous devez transférer.\n // 230\n -#define PASS_BON_MSG "230- Bienvenue au FILE CLUB!\n230-\n230- Les règles du File Club sont:\n230- ====================================\n230- 1. Il est interdit de parler du File Club.\n230- 2. Il est interdit de parler du File Club.\n230- 3. Si quelqu'un dit stop ou s'évanouit, le transfert s'arrête.\n230- 4. Seulement deux fichiers par transfert.\n230- 5. Un transfert à la fois.\n230- 6. Pas de '.log', pas de '.txt'.\n230- 7. Le transfert dure aussi longtemps qu'il doit durer.\n230- 8. Si c'est votre premier soir au File Club, vous devez transférer.\n230\n" -#define PASS_BAD_MSG "530- Mauvais mot de passe! Dégage!\n530\n" -// 221-\n -// 221- Fermeture des portes!\n -// 221- Tout le monde dehors!!\n -// 221- Et n'oublie pas la PREMIERE REGLE!!\n -// 221\n -#define EXIT_MSG "221-\n221- Fermeture des portes!\n221- Tout le monde dehors!!\n221- Et n'oublie pas la PREMIERE REGLE!!\n221\n" +#define PASS_BON_MSG "230- Bienvenue au FILE CLUB!\r\n230-\r\n230- Les règles du File Club sont:\r\n230- ====================================\r\n230- 1. Il est interdit de parler du File Club.\r\n230- 2. Il est interdit de parler du File Club.\r\n230- 3. Si quelqu'un dit stop ou s'évanouit, le transfert s'arrête.\r\n230- 4. Seulement deux fichiers par transfert.\r\n230- 5. Un transfert à la fois.\r\n230- 6. Pas de '.log', pas de '.txt'.\r\n230- 7. Le transfert dure aussi longtemps qu'il doit durer.\r\n230- 8. Si c'est votre premier soir au File Club, vous devez transférer.\r\n230\r\n" +#define PASS_BAD_MSG "530- Mauvais mot de passe! Dégage!\r\n530\r\n" +#define LIST_DAT_MSG "200 PORT command successful\r\n" +#define READ_CON_MSG "150 En attente\r\n" +#define STOP_DAT_MSG "226 Données reçues!\r\n" +// 221-\r\n +// 221- Fermeture des portes!\r\n +// 221- Tout le monde dehors!!\r\n +// 221- Et n'oublie pas la PREMIERE REGLE!!\r\n +// 221\r\n +#define EXIT_MSG "221-\r\n221- Fermeture des portes!\r\n221- Tout le monde dehors!!\r\n221- Et n'oublie pas la PREMIERE REGLE!!\r\n221\r\n" diff --git a/test b/test index 12a9002..80474b7 100755 Binary files a/test and b/test differ