From a61bb83c3a912ae7264292b3234741086b78c080 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Wed, 16 Dec 2015 19:24:07 +0100 Subject: [PATCH] Tjs ce pb de buffer mais sinon tout marche, maintenant => MULTITHREADS --- dep/server.c | 36 ++++++++++++++++++++---------------- dep/utility.c | 23 +++++++++++++++++++---- proxy_ftp.c | 7 ++++--- proxy_ftp.h | 27 ++++++++++++++++----------- test | Bin 22902 -> 22902 bytes 5 files changed, 59 insertions(+), 34 deletions(-) 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 12a900291586ae6ca6ff9f665a4d687cddcb84a8..80474b72eec9456b70ac7af62da37cdeb03359e1 100755 GIT binary patch delta 3871 zcmZuz3vg3a8onnjrH#fUeI}(fx345^8fXgwDnhCa9B6@3L^=Z6N`ru0z|8s5%MK?1!|God? z`=95Wdtn#3u#0Ryn$S8{;J?=AkA;k_1<{uRm&$}4>p7xhC1qp`DR+m7-2SiT7WjXC1-?TW!Pg^2{%I+Z=a7U;djf7`Q|PA@nxm zb_{{ec&8>j1hb48#mD}i^**LIZG`ntSh~<*#?6Npjc(&77ZEuq4Gthd@beepw6TS3 zf;EXrXb;73xj*lNAs)*@+7VO<80r zB$_8&&mzm=U9%;*8bJb5_s@#brNNqD-QOOB%Vslq0#efLqzR^`XZtsy z>-P>Vpz;a2zJGraj<~#U`G>4cyK6XUt42~s18QN}<|^Kgt=xv(cQAON3;$>oj(7&p z3a8;K6tG;b2`ZujW^sdH{D9&|lQw2TgFyy~wNt(Gy->-@p!(|i1iQ`LJcwx0e!VmU zM>#BQKpPf7SZa+v(ctd4@R9fLop>JGMJj)Ej=m9=Hb-@qg{3Y0k;Vjf55ilCss4%} z$D+Y~>rjHxJjqGhT1KKl1$Q$iRQBe^qnC~Rc|z`N`M^whsH zGrRzY3#e#8i3M0HUn-Rcy9QJz*@$T5A?*#2Ln7Sau934Lhrgf(#I+EK?7|y zD8O);9Mu>yRS%L~cz8r34-1v0^Y2?0cE#$nM_h62%(-DCpF9l(84LaQoaPukzv^H? zRDj?&cF@QLZOj5=*w35?BwjK#hS`H0kqfYQ2T>ij3#zT($JWoWJ-)dZb`P^mkPq$= zY%Za540LB&AR}{(VSB6~sH)}IZr@s%k-5swa+o6YW?qw>WH1wlVGyN5R9;;~_ck^)XJw&2s!pbz%*yQ*8xY1tyKIfVhw4{&MAW1-w7Rxg ztgjU-sl2w5?yYjqp6RY~qpZ4`c2>D(RJaib?P|iV<;*>%SkFqCH1jHjU8ZHedL0Iqp%r=;VrSI`ZRIhsZo-?1 z>3$p~wiCMMsNqFc3@}%1{1O>HCjN6R?h=HNr9EtruIa31Z!*(~6r!;#{f#kH+W;Pj zYIZv#oXM20GhdGQMznrw6ON<2mI69c~+6rVBlAeK532f^%B#0!_Rr;{wW zJI6_qV0BK)BR(d4h}~#GX$mWXe6Y)pybu=@oMoP*N-j7OdIkk*c~ei`AP`GygvhQF z?3`0ChBnFz8m!@#A7HOKPQqZ$IL-01kd<3VF2kH$Q(S+aqV(>B`rK^tI&8|dXny-6 zklb4}g{o2oQ}W-1N-aa|5>5|DlMxSJy!rr-79aJ}Z3^?tB*V@B(|3%+(i!Hw#5pXs zVa~J2;kj%aw%y1i~M9v%$=;1srawMTO$^CZSL2K@+rO>zfqJzd@uS| zQSL>Wj&*$!>2pY5Mfx-j&0(ZvI8fgq{WsEBJke@!#&eODXC+U8d{O| z_bbYqNWVO-+^PH%A8dFl^&`ClNA_ks^&R+)I|1n)r1v7dij>_3TP`cg%SdCdpu-sW zp&*-3FgnJOYAAKsG+*?DTar!%DV7r^A-@CFXD*a}i2!F+8ieM;E6VxOsHE zAY>qm-FCZx6k5ranBHd;^{CaS2S*6J{pnb;1&Yhl$TnP4VhpHLTb`yt+2iF_ zO@f@G>OKcMX4}X{_-OWPWHbC`&V%OiR8``{L14cQq=|w~SPN(7JZA1Ux;VFwuYwSV zc_a$AV3h0UK1TlAerfJ#LRJEqmu9Ywss^H}E^N3_&k{s%j`b7%kn delta 3769 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