Tjs ce pb de buffer mais sinon tout marche, maintenant => MULTITHREADS

This commit is contained in:
xdrm-brackets 2015-12-16 19:24:07 +01:00
parent bfe3d33355
commit a61bb83c3a
5 changed files with 59 additions and 34 deletions

View File

@ -154,9 +154,9 @@ void MANAGE_REQUEST(char* pRequest, int* DUSER_SOCKET, int* DFTP_SOCKET){
int a1, a2, a3, a4 = 0; int a1, a2, a3, a4 = 0;
int p1, p2 = 0; int p1, p2 = 0;
char serverHost[maxHostLen]; char serverHost[maxHostLen] = {0};
char serverPort[maxPortLen]; char serverPort[maxPortLen] = {0};
char BUFFER[maxBuffLen]; char BUFFER[maxBuffLen] = {0};
sscanf(pRequest, "PORT %d,%d,%d,%d,%d,%d", &a1, &a2, &a3, &a4, &p1, &p2); sscanf(pRequest, "PORT %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*>
@ -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); 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 // 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); // WAIT_SOCKET_UPDATE(DFTP_SOCKET, BUFFER);
// xPrint("FTPLIST: %s\n", 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); 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);
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 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 */ /* 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);
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)*/ /* 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);
@ -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); if( DEBUGMOD&DAT ) xPrint("BUS_FTP->BUS_CLIENT: %s\n", BUFFER);
/* 4. On ferme les SOCKETS du BUS DE DONNEES */ /* 4. On ferme les SOCKETS du BUS DE DONNEES */
close(*DFTP_SOCKET); 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); 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 // on vide les SOCKET FTP des 2 BUS
WAIT_SOCKET_UPDATE(FTP_SOCKET, BUFFER); // command // 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
WAIT_SOCKET_UPDATE(DFTP_SOCKET, BUFFER); // données // printf("")
if( DEBUGMOD&SCK ) printf("FTP[DAT] vidé: %s\n", BUFFER);
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 // fin de la transaction
strcpy(response, "226 Données reçues!\n"); strcpy(response, STOP_DAT_MSG);
} }
/* (10) Fin de transfert de données /* (10) Fin de transfert de données
--------------------------------------------*/ --------------------------------------------*/
else if( ftpCode == 226 ){ // on ferme les SOCKETS du BUS DE DONNEES 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(*DUSER_SOCKET);
close(*DFTP_SOCKET); close(*DFTP_SOCKET);
} }

View File

@ -71,11 +71,19 @@ void formatBuffer(char* pBuffer){
/* [1] On retire les "\n" et "\r" de la fin de la chaine /* [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' ) revealString(pBuffer);
pBuffer[strlen(pBuffer)-1] = '\0'; 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 /* [2] On ajoute "\r\n" à la fin
============================================================*/ ============================================================*/
strcpy(pBuffer, strcat(pBuffer, "\r\n")); 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( *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 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)); if( DEBUGMOD&BUF ) printf("SENDLEN_1: %lu\n", strlen(pBuffer));
int nbSent = write(*pSocket, pBuffer, strlen(pBuffer)); int nbSent = write(*pSocket, pBuffer, strlen(pBuffer));
if( DEBUGMOD&BUF ) printf("SENDLEN_2: %d\n", nbSent); 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 // si on est déconnecté, on ferme la SOCKET
if( nbSent <= 0 ){ if( nbSent <= 0 ){
if( DEBUGMOD&BUF ) printf("NOTHING TO SEND\n"); 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 ) revealString(pBuffer);
if( DEBUGMOD&RVL ) printf("SEND_2\n"); if( DEBUGMOD&RVL ) printf("SEND_2\n");
/* 4. On retourne le nombre de <char> envoyés */
return nbSent; return nbSent;
} }
@ -179,5 +194,5 @@ void revealString(char* pString){
} }
/* 3. On affiche la chaîne explicite */ /* 3. On affiche la chaîne explicite */
if( DEBUGMOD&RVL ) printf("REVEALED: %s\n", revealedString); if( DEBUGMOD&RVL ) printf("[[%s]]\n", revealedString);
} }

View File

@ -109,7 +109,8 @@ static void* testServer(char* localPort){
/* [6] Traitement de la réponse (FTP) /* [6] Traitement de la réponse (FTP)
============================================================================*/ ============================================================================*/
MANAGE_RESPONSE(&USER_SOCKET, &FTP_SOCKET, ftp_response, &DUSER_SOCKET, &DFTP_SOCKET); MANAGE_RESPONSE(&USER_SOCKET, &FTP_SOCKET, ftp_response, &DUSER_SOCKET, &DFTP_SOCKET);
/* [7] Redirection vers le CLIENT /* [7] Redirection vers le CLIENT
============================================================================*/ ============================================================================*/
@ -119,8 +120,8 @@ static void* testServer(char* localPort){
/* [8] On vide les buffers /* [8] On vide les buffers
============================================================================*/ ============================================================================*/
memset(BUFFER, '\0', maxBuffLen); // on vide le buffer // memset(BUFFER, '\0', maxBuffLen); // on vide le buffer
memset(ftp_response, '\0', maxBuffLen); // memset(ftp_response, '\0', maxBuffLen);
} }
/* [9] Fermeture des connections (SOCKETS) /* [9] Fermeture des connections (SOCKETS)

View File

@ -29,6 +29,8 @@
#define BUF 0x10 // FILTRE pour ONLY_BUFFERS #define BUF 0x10 // FILTRE pour ONLY_BUFFERS
#define HDR 0x20 // FILTRE pour ONLY_HEADERS #define HDR 0x20 // FILTRE pour ONLY_HEADERS
// possibilité de cumuler les DEBUGMODES
/* DEBUGMOD ONLY_COMMAND + ONLY_DATA + .. */
#define DEBUGMOD ONLY_REVEALS #define DEBUGMOD ONLY_REVEALS
@ -59,10 +61,10 @@
// 220- Qui est tu ?!\n // 220- Qui est tu ?!\n
// 220-\n // 220-\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 CON_MSG "220 Connecté au serveur\r\n"
#define USER_MSG "331 Tu connais la procédure.. Donne moi le mot de passe ?\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- Bienvenue au FILE CLUB!\n\n
// 230- Les règles du File Club sont:\n // 230- Les règles du File Club sont:\n
// 230- ====================================\n // 230- ====================================\n
@ -75,14 +77,17 @@
// 230- 7. Le transfert dure aussi longtemps qu'il doit durer.\n // 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- 8. Si c'est votre premier soir au File Club, vous devez transférer.\n
// 230\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_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!\n530\n" #define PASS_BAD_MSG "530- Mauvais mot de passe! Dégage!\r\n530\r\n"
// 221-\n #define LIST_DAT_MSG "200 PORT command successful\r\n"
// 221- Fermeture des portes!\n #define READ_CON_MSG "150 En attente\r\n"
// 221- Tout le monde dehors!!\n #define STOP_DAT_MSG "226 Données reçues!\r\n"
// 221- Et n'oublie pas la PREMIERE REGLE!!\n // 221-\r\n
// 221\n // 221- Fermeture des portes!\r\n
#define EXIT_MSG "221-\n221- Fermeture des portes!\n221- Tout le monde dehors!!\n221- Et n'oublie pas la PREMIERE REGLE!!\n221\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"

BIN
test

Binary file not shown.