Tjs ce pb de buffer mais sinon tout marche, maintenant => MULTITHREADS
This commit is contained in:
parent
bfe3d33355
commit
a61bb83c3a
36
dep/server.c
36
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 <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);
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
|
|
@ -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 <char> 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);
|
||||
}
|
|
@ -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)
|
||||
|
|
27
proxy_ftp.h
27
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"
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue