usr@srv presque totalement opérationnel, encore pb de buffer au niveau du -->LIST et des fois à la co + core dump si mauvais serveur
This commit is contained in:
parent
a61bb83c3a
commit
5cb2b373b4
120
dep/client.c
120
dep/client.c
|
@ -1,115 +1,13 @@
|
|||
#include "client.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void CLIENT_REQUEST(char* serverHost, char* serverPort, char* pRequest, char** pAnswer){
|
||||
if( DEBUGMOD&HDR ) printf("====== CLIENT_REQUEST(%s, %s, %s, %s) ======\n\n", serverHost, serverPort, pRequest, *pAnswer);
|
||||
|
||||
struct addrinfo hints; // contiendra le filtre/format
|
||||
struct addrinfo* addrinfo; // contiendra les infos
|
||||
int SOCKET, CONNECT; // file_desc(s)
|
||||
char BUFFER[maxBuffLen]; // BUFFER de communication
|
||||
// char pAnswer[maxBuffLen] = {0}; // on vide la réponse (contiendra la réponse du serveur)
|
||||
|
||||
/* [1] On définit le filtre/format
|
||||
=======================================================*/
|
||||
memset(&hints, 0, sizeof(struct addrinfo)); // on vide le filtre
|
||||
hints.ai_family = AF_UNSPEC; // Allow IPv4 ou IPv6
|
||||
hints.ai_socktype = SOCK_STREAM; // TCP (SOCK_DGRAM = UDP)
|
||||
hints.ai_flags = 0; // non spécifié
|
||||
hints.ai_protocol = 0; // non spécifié
|
||||
|
||||
if( DEBUGMOD&SCK ) printf("============HINTS===========\n");
|
||||
if( DEBUGMOD&SCK ) printf( "AI_FLAGS = %d\n", hints.ai_flags ); // int
|
||||
if( DEBUGMOD&SCK ) printf( "AI_FAMILY = %d\n", hints.ai_family ); // int
|
||||
if( DEBUGMOD&SCK ) printf( "AI_SOCKTYPE = %d\n", hints.ai_socktype ); // int
|
||||
if( DEBUGMOD&SCK ) printf( "AI_PROTOCOL = %d\n", hints.ai_protocol ); // int
|
||||
if( DEBUGMOD&SCK ) printf( "AI_ADDRLEN = %d\n", hints.ai_addrlen ); // int
|
||||
if( DEBUGMOD&SCK ) printf("\n");
|
||||
|
||||
|
||||
/* [2] On récupère les infos
|
||||
=======================================================*/
|
||||
getaddrinfo(serverHost, serverPort, &hints, &addrinfo);
|
||||
|
||||
if( DEBUGMOD&SCK ) printf("=============RES============\n");
|
||||
if( DEBUGMOD&SCK ) printf( "AI_FLAGS = %d\n", addrinfo->ai_flags ); // int
|
||||
if( DEBUGMOD&SCK ) printf( "AI_FAMILY = %d\n", addrinfo->ai_family ); // int
|
||||
if( DEBUGMOD&SCK ) printf( "AI_SOCKTYPE = %d\n", addrinfo->ai_socktype ); // int
|
||||
if( DEBUGMOD&SCK ) printf( "AI_PROTOCOL = %d\n", addrinfo->ai_protocol ); // int
|
||||
if( DEBUGMOD&SCK ) printf( "AI_ADDRLEN = %d\n", addrinfo->ai_addrlen ); // int
|
||||
if( DEBUGMOD&SCK ) printf("\n");
|
||||
|
||||
/* [3] Création de la socket
|
||||
=======================================================*/
|
||||
SOCKET = socket(addrinfo->ai_family, addrinfo->ai_socktype, 0);
|
||||
|
||||
if( DEBUGMOD&SCK ) printf("SOCKET = %d\n", SOCKET);
|
||||
|
||||
// si erreur
|
||||
if( SOCKET == -1 ) return;
|
||||
|
||||
/* [4] On établit la connection
|
||||
=======================================================*/
|
||||
CONNECT = connect(
|
||||
SOCKET,
|
||||
addrinfo->ai_addr,
|
||||
addrinfo->ai_addrlen
|
||||
);
|
||||
|
||||
if( DEBUGMOD&SCK ) printf("CONNECT = %d\n", CONNECT);
|
||||
|
||||
// si erreur
|
||||
if( CONNECT == -1 ) return;
|
||||
|
||||
// on a plus besoin des infos de l'adresse
|
||||
freeaddrinfo(addrinfo);
|
||||
|
||||
|
||||
/* [5] On écrit sur la socket
|
||||
=======================================================*/
|
||||
int nbSend = swrite(&SOCKET, pRequest);
|
||||
|
||||
if( DEBUGMOD&BUF ) printf("nbSend: %d\n", nbSend);
|
||||
if( DEBUGMOD&BUF ) printf("Message: %s\n", pRequest);
|
||||
|
||||
// si pas tout envoyé
|
||||
if( strlen(pRequest) != nbSend ) return;
|
||||
|
||||
/* [6] On lit la réponse
|
||||
=======================================================*/
|
||||
// memset(BUFFER, '\0', sizeof(BUFFER)); // on vide le buffer
|
||||
int nbRecup = sread(&SOCKET, BUFFER);
|
||||
|
||||
*pAnswer = malloc( maxBuffLen );
|
||||
strcpy(*pAnswer, BUFFER);
|
||||
|
||||
if( DEBUGMOD&BUF ) printf("nbReceived: %d\n", nbRecup);
|
||||
if( DEBUGMOD&BUF ) printf("Message: %s\n", *pAnswer);
|
||||
|
||||
|
||||
/* [7] On ferme la connection
|
||||
=======================================================*/
|
||||
int closeState = close(SOCKET);
|
||||
|
||||
// if( closeState == -1 ) return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void CONNECT_CLIENT(char* serverHost, char* serverPort, int* pSocket){
|
||||
if( DEBUGMOD&HDR ) printf("====== INIT_CLIENT(%s, %s, %d) ======\n\n", serverHost, serverPort, *pSocket);
|
||||
int CONNECT_CLIENT(char* serverHost, char* serverPort, int* pSocket){
|
||||
if( DEBUGMOD&HDR ) printf("====== CONNECT_CLIENT(%s, %s, %d) ======\n\n", serverHost, serverPort, *pSocket);
|
||||
|
||||
struct addrinfo hints; // contiendra le filtre/format
|
||||
struct addrinfo* addrinfo; // contiendra les infos
|
||||
int CONNECT; // file_desc(s)
|
||||
char BUFFER[maxBuffLen]; // BUFFER de communication
|
||||
// char pAnswer[maxBuffLen] = {0}; // on vide la réponse (contiendra la réponse du serveur)
|
||||
char BUFFER[maxBuffLen]; // BUFFER de communication
|
||||
|
||||
/* [1] On définit le filtre/format
|
||||
=======================================================*/
|
||||
|
@ -147,7 +45,7 @@ void CONNECT_CLIENT(char* serverHost, char* serverPort, int* pSocket){
|
|||
if( DEBUGMOD&SCK ) printf("SOCKET = %d\n", *pSocket);
|
||||
|
||||
// si erreur
|
||||
if( *pSocket == -1 ) return;
|
||||
if( *pSocket == -1 ) return -1;
|
||||
|
||||
/* [4] On établit la connection
|
||||
=======================================================*/
|
||||
|
@ -160,15 +58,17 @@ void CONNECT_CLIENT(char* serverHost, char* serverPort, int* pSocket){
|
|||
if( DEBUGMOD&SCK ) printf("CONNECT = %d\n", CONNECT);
|
||||
|
||||
// si erreur
|
||||
if( CONNECT == -1 ) return;
|
||||
if( CONNECT == -1 ) return -1;
|
||||
|
||||
// on a plus besoin des infos de l'adresse
|
||||
freeaddrinfo(addrinfo);
|
||||
freeaddrinfo(addrinfo);
|
||||
|
||||
return *pSocket;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CLIENT_SEND(int* pSocket, char* pRequest, char** pAnswer){
|
||||
int CLIENT_SEND(int* pSocket, char* pRequest, char** pAnswer){
|
||||
if( DEBUGMOD&HDR ) printf("====== CLIENT_SEND(%d, %s, %s) ======\n\n", *pSocket, pRequest, *pAnswer);
|
||||
char BUFFER[maxBuffLen] = {0};
|
||||
|
||||
|
@ -180,7 +80,7 @@ void CLIENT_SEND(int* pSocket, char* pRequest, char** pAnswer){
|
|||
if( DEBUGMOD&BUF ) printf("Message: %s\n", pRequest);
|
||||
|
||||
// si pas tout envoyé
|
||||
if( strlen(pRequest) != nbSend ) return;
|
||||
if( strlen(pRequest) != nbSend ) return -1;
|
||||
|
||||
/* [6] On lit la réponse
|
||||
=======================================================*/
|
||||
|
|
15
dep/client.h
15
dep/client.h
|
@ -2,16 +2,13 @@
|
|||
*
|
||||
* @serverHost<char*> Nom de l'hôte distant (server)
|
||||
* @serverPort<char*> Numéro du port distant (server)
|
||||
* @pRequest<char*> Requête à envoyer au serveur
|
||||
* @pSocket<int*> Pointeur sur la requête à créer
|
||||
*
|
||||
* @pAnswer<char**> Pointeur sur le <char*> à remplir => contiendra la réponse du serveur
|
||||
*
|
||||
*
|
||||
* @return error<int> retourne -1 en cas d'erreur, sinon la SOCKET
|
||||
*/
|
||||
void CLIENT_REQUEST(char* serverHost, char* serverPort, char* pRequest, char** pAnswer);
|
||||
int CONNECT_CLIENT(char* serverHost, char* serverPort, int* pSocket);
|
||||
|
||||
|
||||
|
||||
void CONNECT_CLIENT(char* serverHost, char* serverPort, int* pSocket);
|
||||
|
||||
|
||||
void CLIENT_SEND(int* pSocket, char* pRequest, char** pAnswer);
|
||||
// retourne -1 en cas d'erreur
|
||||
int CLIENT_SEND(int* pSocket, char* pRequest, char** pAnswer);
|
71
dep/server.c
71
dep/server.c
|
@ -127,30 +127,71 @@ void DROP_SERVER(char* serverHost, char** givenPort, int* listenSocket){
|
|||
// CMD: CLIENT (SRV) PROXY (CLT) FTP
|
||||
// DTA: CLIENT (CLT) PROXY (CLT) FTP
|
||||
//
|
||||
void MANAGE_REQUEST(char* pRequest, int* DUSER_SOCKET, int* DFTP_SOCKET){
|
||||
if( DEBUGMOD&HDR ) printf("====== MANAGE_REQUEST(%s, %d, %d) ======\n\n", pRequest, *DUSER_SOCKET, *DFTP_SOCKET);
|
||||
void 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);
|
||||
|
||||
char answer[maxBuffLen]; // contiendra la réponse
|
||||
|
||||
char response[maxBuffLen]; // contiendra la réponse
|
||||
int nbSend; // contiendra le nombre de données envoyées
|
||||
char rCommand[10]; // contiendra les commandes (1ère partie)
|
||||
char rCommand[5]; // contiendra les commandes (1ère partie)
|
||||
char rContent[maxBuffLen]; // contiendra le contenu associé à la commande (2ème partie)
|
||||
|
||||
// on vide les buffers
|
||||
memset(&rCommand, '\0', sizeof(rCommand));
|
||||
memset(&rContent, '\0', sizeof(rContent));
|
||||
memset(&answer, '\0', sizeof(answer));
|
||||
memset(&response, '\0', sizeof(response));
|
||||
|
||||
|
||||
/* [1] On découpe la requête en 2 parties
|
||||
================================================*/
|
||||
splitFtpRequest(pRequest, rCommand, rContent);
|
||||
|
||||
|
||||
/* [2] Selection en fonction de @rCommand
|
||||
================================================*/
|
||||
|
||||
/* (1) PORT a1,a2,a3,a4,p1,p2 => utilisateur (actif)
|
||||
/* (1) USER username@serveur => connection FTP (commande)
|
||||
--------------------------------------------*/
|
||||
if( strcmp(rCommand, "PORT") == 0 ){
|
||||
if( strcmp(rCommand, "USER") == 0 && indexOf(rContent, '@') >= 0 ){
|
||||
char userName[maxBuffLen] = {0};
|
||||
char hostName[maxHostLen] = {0};
|
||||
|
||||
sscanf(rContent, "%[^@]@%s\r\n", userName, hostName);
|
||||
|
||||
|
||||
if( DEBUGMOD&BUF ) printf("USERNAME [[%s]]\n", userName);
|
||||
if( DEBUGMOD&BUF ) printf("HOSTNAME [[%s]]\n", hostName);
|
||||
|
||||
/* 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");
|
||||
|
||||
if( DEBUGMOD&SCK ) printf("FTP SOCKET CONNECTED AT %s:%s\n", hostName, FTP_PORT);
|
||||
|
||||
/* On envoie la séquence d'initialisation */
|
||||
char BUFFER[maxBuffLen] = {0};
|
||||
char* ftp_response; ftp_response = malloc(maxBuffLen);
|
||||
memset(ftp_response, 0, maxBuffLen);
|
||||
|
||||
strcpy(BUFFER, "\r\n");
|
||||
CLIENT_SEND(FTP_SOCKET, BUFFER, &ftp_response);
|
||||
|
||||
if( DEBUGMOD&CMD ) xPrint("P->F: %s\n\n", BUFFER);
|
||||
if( DEBUGMOD&CMD ) xPrint("F->P: %s\n", ftp_response);
|
||||
|
||||
// char BUFF[maxBuffLen] = {0};
|
||||
// strcpy(BUFF, "");
|
||||
// swrite(FTP_SOCKET, BUFF);
|
||||
// sread(FTP_SOCKET, BUFF);
|
||||
// swrite(USER_SOCKET, strcat(BUFF, "\r\n"));
|
||||
|
||||
strcpy(response, "USER xdrm\r\n");
|
||||
printf("RESP: [[%s]]\n", response);
|
||||
}
|
||||
|
||||
/* (2) PORT a1,a2,a3,a4,p1,p2 => utilisateur (actif)
|
||||
--------------------------------------------*/
|
||||
else if( strcmp(rCommand, "PORT") == 0 ){
|
||||
int a1, a2, a3, a4 = 0;
|
||||
int p1, p2 = 0;
|
||||
|
||||
|
@ -171,19 +212,23 @@ 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\r\n");
|
||||
strcpy(response, "PASV\r\n");
|
||||
}
|
||||
// WAIT_SOCKET_UPDATE(DFTP_SOCKET, BUFFER);
|
||||
// xPrint("FTPLIST: %s\n", BUFFER);
|
||||
|
||||
/* [3] Envoi de la réponse
|
||||
/* (n) Si aucun traitement on recopie la requête telquel
|
||||
--------------------------------------------*/
|
||||
else
|
||||
strcpy(response, pRequest);
|
||||
|
||||
/* [3] Retour de la réponse
|
||||
================================================*/
|
||||
strcpy(pRequest, response);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void MANAGE_RESPONSE(int* USER_SOCKET, int* FTP_SOCKET, char* pAnswer, int* DUSER_SOCKET, int* DFTP_SOCKET){
|
||||
if( DEBUGMOD&HDR ) printf("====== MANAGE_RESPONSE(%d, %s, %d, %d) ======\n\n", *USER_SOCKET, pAnswer, *DUSER_SOCKET, *DFTP_SOCKET);
|
||||
void MANAGE_RESPONSE(char* pAnswer, int* USER_SOCKET, int* FTP_SOCKET, int* DUSER_SOCKET, int* DFTP_SOCKET){
|
||||
if( DEBUGMOD&HDR ) printf("====== MANAGE_RESPONSE(%s, %d, %d, %d, %d) ======\n\n", pAnswer, *USER_SOCKET, *FTP_SOCKET, *DUSER_SOCKET, *DFTP_SOCKET);
|
||||
|
||||
char response[maxBuffLen]; // contiendra la réponse
|
||||
char ftpCodeStr[4]; // contiendra le code FTP (1ère partie)
|
||||
|
|
|
@ -13,6 +13,8 @@ void DROP_SERVER(char* serverHost, char** givenPort, int* listenSocket);
|
|||
/* Gestion de la requête du client
|
||||
*
|
||||
* @pBuffer<char*> Requête en question
|
||||
* @USER_SOCKET<int*> Pointeur sur la SOCKET du BUS DE COMMANDES utilisateur
|
||||
* @FTP_SOCKET<int*> Pointeur sur la SOCKET du BUS DE COMMANDES FTP
|
||||
* @DUSER_SOCKET<int*> Pointeur sur la SOCKET du BUS DE DONNEES utilisateur
|
||||
* @DFTP_SOCKET<int*> Pointeur sur la SOCKET du BUS DE DONNEES FTP
|
||||
*
|
||||
|
@ -21,13 +23,15 @@ void DROP_SERVER(char* serverHost, char** givenPort, int* listenSocket);
|
|||
* [2]
|
||||
* [3]
|
||||
*/
|
||||
void MANAGE_REQUEST(char* pRequest, int* DUSER_SOCKET, int* DFTP_SOCKET);
|
||||
void MANAGE_REQUEST(char* pRequest, int* USER_SOCKET, int* FTP_SOCKET, int* DUSER_SOCKET, int* DFTP_SOCKET);
|
||||
|
||||
|
||||
|
||||
/* Gestion de la réponse du serveur FTP et modification de la réponse
|
||||
*
|
||||
* @pAnswer<char**> Pointeur sur le buffer de réponse du serveur FTP
|
||||
* @USER_SOCKET<int*> Pointeur sur la SOCKET du BUS DE COMMANDES utilisateur
|
||||
* @FTP_SOCKET<int*> Pointeur sur la SOCKET du BUS DE COMMANDES FTP
|
||||
* @DUSER_SOCKET<int*> Pointeur sur la SOCKET du BUS DE DONNEES utilisateur
|
||||
* @DFTP_SOCKET<int*> Pointeur sur la SOCKET du BUS DE DONNEES FTP
|
||||
*
|
||||
|
@ -43,7 +47,7 @@ void MANAGE_REQUEST(char* pRequest, int* DUSER_SOCKET, int* DFTP_SOCKET);
|
|||
* [4] SI 226, on ferme les SOCKETS du BUS DE DONNEES
|
||||
*
|
||||
*/
|
||||
void MANAGE_RESPONSE(int* USER_SOCKET, int* FTP_SOCKET, char* pAnswer, int* DUSER_SOCKET, int* DFTP_SOCKET);
|
||||
void MANAGE_RESPONSE(char* pAnswer, int* USER_SOCKET, int* FTP_SOCKET, int* DUSER_SOCKET, int* DFTP_SOCKET);
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -114,13 +114,12 @@ int swrite(int* pSocket, char* pBuffer){
|
|||
// formatBuffer(pBuffer);
|
||||
|
||||
|
||||
/* 2. On evoie le Buffer */
|
||||
/* 2. On écrit sur la SOCKET */
|
||||
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
|
||||
/* 3. Si on est déconnecté, on retourne une erreur */
|
||||
if( nbSent <= 0 ){
|
||||
if( DEBUGMOD&BUF ) printf("NOTHING TO SEND\n");
|
||||
return -1; // on retourne une erreur
|
||||
|
@ -140,13 +139,16 @@ int sread(int* pSocket, char* pBuffer){
|
|||
if( *pSocket == -1 ) return -1; // si SOCKET fermée, on retourne une erreur
|
||||
|
||||
|
||||
// on vide le buffer avant de lire
|
||||
/* 1. On vide le buffer avant de lire */
|
||||
memset(pBuffer, '\0', maxBuffLen);
|
||||
if( DEBUGMOD&BUF ) printf("READLEN_1: %lu\n", strlen(pBuffer));
|
||||
|
||||
/* 2. On lit la SOCKET */
|
||||
int nbRead = read(*pSocket, pBuffer, maxBuffLen);
|
||||
if( DEBUGMOD&BUF ) printf("READLEN_3: %d\n", nbRead);
|
||||
|
||||
// si on est déconnecté, on ferme la SOCKET
|
||||
|
||||
/* 3. Si on est déconnecté, on retourne une erreur */
|
||||
if( nbRead <= 0 ){
|
||||
if( DEBUGMOD&BUF ) printf("NOTHING TO READ\n");
|
||||
return -1; // on retourne une erreur
|
||||
|
@ -156,6 +158,7 @@ int sread(int* pSocket, char* pBuffer){
|
|||
if( DEBUGMOD&RVL ) revealString(pBuffer);
|
||||
if( DEBUGMOD&RVL ) printf("READ_2\n");
|
||||
|
||||
/* 4. On retourne le nombre de caractères lus */
|
||||
return nbRead;
|
||||
}
|
||||
|
||||
|
|
41
proxy_ftp.c
41
proxy_ftp.c
|
@ -1,9 +1,7 @@
|
|||
#include "proxy_ftp.h"
|
||||
|
||||
// DECLARATIONS
|
||||
static pthread_t userServer;
|
||||
static short unsigned int userServerState = 1;
|
||||
static char remoteAssignedPort[maxPortLen] = {'\0'};
|
||||
static pthread_t managers[maxListLen];
|
||||
|
||||
/* headers */
|
||||
static void* testServer();
|
||||
|
@ -42,10 +40,10 @@ int main(int argc, char* argv[]){
|
|||
|
||||
|
||||
static void* testServer(char* localPort){
|
||||
int USER_SOCKET; // contiendra le BUS DE COMMANDE utilisateur
|
||||
int FTP_SOCKET; // contiendra le BUS DE COMMANDE FTP
|
||||
int DUSER_SOCKET; // contiendra le BUS DE DONNES utilisateur
|
||||
int DFTP_SOCKET; // contiendra le BUS DE DONNEES FTP
|
||||
int USER_SOCKET = -1; // contiendra le BUS DE COMMANDE utilisateur
|
||||
int FTP_SOCKET = -1; // contiendra le BUS DE COMMANDE FTP
|
||||
int DUSER_SOCKET = -1; // contiendra le BUS DE DONNES utilisateur
|
||||
int DFTP_SOCKET = -1; // contiendra le BUS DE DONNEES FTP
|
||||
|
||||
char BUFFER[maxBuffLen]; // contiendra le BUFFER
|
||||
struct sockaddr_storage clientInfo; // contiendra les infos client
|
||||
|
@ -67,27 +65,23 @@ static void* testServer(char* localPort){
|
|||
|
||||
|
||||
DROP_SERVER(remoteHost, &serverPort, &LISTENSOCK);
|
||||
CONNECT_CLIENT(FTP_HOST, FTP_PORT, &FTP_SOCKET);
|
||||
|
||||
printf("Port: %s\n", serverPort);
|
||||
strcpy(remoteAssignedPort, serverPort);// PORT GLOBAL
|
||||
|
||||
|
||||
|
||||
/* [1] Attente d'une demande de connection, puis création d'une socket
|
||||
============================================================================*/
|
||||
USER_SOCKET = accept(LISTENSOCK, (struct sockaddr *) &clientInfo, &len);
|
||||
|
||||
/* [2] On envoie la séquence d'initialisation
|
||||
============================================================================*/
|
||||
strcpy(BUFFER, "");
|
||||
CLIENT_SEND(&FTP_SOCKET, BUFFER, &ftp_response);
|
||||
MANAGE_RESPONSE(&USER_SOCKET, &FTP_SOCKET, ftp_response, &DUSER_SOCKET, &DFTP_SOCKET);
|
||||
swrite(&USER_SOCKET, ftp_response);
|
||||
|
||||
if( DEBUGMOD&CMD ) xPrint("P->F: %s\n\n", BUFFER);
|
||||
if( DEBUGMOD&CMD ) xPrint("F->P: %s\n", ftp_response);
|
||||
// static void* manageConnection(int* USER_SOCKET){
|
||||
|
||||
/* [2] Envoi de la séquence de Bienvenue
|
||||
============================================================================*/
|
||||
swrite(&USER_SOCKET, WLCM_MSG);
|
||||
|
||||
/* BOUCLE DE COMMANDES */
|
||||
while( USER_SOCKET != -1 && FTP_SOCKET != -1 ){
|
||||
while( USER_SOCKET != -1 ){
|
||||
|
||||
/* [3] On récupère les données reçues (+attente)
|
||||
============================================================================*/
|
||||
|
@ -97,7 +91,10 @@ static void* testServer(char* localPort){
|
|||
|
||||
/* [4] Traitement de la requête
|
||||
============================================================================*/
|
||||
MANAGE_REQUEST(BUFFER, &DUSER_SOCKET, &DFTP_SOCKET);
|
||||
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;
|
||||
|
||||
|
||||
/* [5] Redirection vers le serveur FTP
|
||||
|
@ -108,7 +105,7 @@ static void* testServer(char* localPort){
|
|||
|
||||
/* [6] Traitement de la réponse (FTP)
|
||||
============================================================================*/
|
||||
MANAGE_RESPONSE(&USER_SOCKET, &FTP_SOCKET, ftp_response, &DUSER_SOCKET, &DFTP_SOCKET);
|
||||
MANAGE_RESPONSE(ftp_response, &USER_SOCKET, &FTP_SOCKET, &DUSER_SOCKET, &DFTP_SOCKET);
|
||||
|
||||
|
||||
|
||||
|
@ -126,10 +123,10 @@ static void* testServer(char* localPort){
|
|||
|
||||
/* [9] Fermeture des connections (SOCKETS)
|
||||
============================================================================*/
|
||||
printf("CLOSING CONNECTIONS\n");
|
||||
close(USER_SOCKET);
|
||||
close(FTP_SOCKET);
|
||||
close(LISTENSOCK);
|
||||
strcpy(remoteAssignedPort, "\0");
|
||||
}
|
||||
|
||||
|
||||
|
|
14
proxy_ftp.h
14
proxy_ftp.h
|
@ -15,12 +15,12 @@
|
|||
|
||||
|
||||
/* debug */
|
||||
#define ONLY_SOCKETS 0x01 // debug RESEAU
|
||||
#define ONLY_COMMAND 0x02 // debug COMMANDES
|
||||
#define ONLY_DATA 0x04 // debug DONNEES
|
||||
#define ONLY_REVEALS 0x08 // debug EXPLICITATION des strings
|
||||
#define ONLY_BUFFERS 0x10 // debug des BUFFERS
|
||||
#define ONLY_HEADERS 0x20 // debug des HEADERS de fonctions
|
||||
#define SOCKETS 0x01 // debug RESEAU
|
||||
#define COMMAND 0x02 // debug COMMANDES
|
||||
#define DATA 0x04 // debug DONNEES
|
||||
#define REVEALS 0x08 // debug EXPLICITATION des strings
|
||||
#define BUFFERS 0x10 // debug des BUFFERS
|
||||
#define HEADERS 0x20 // debug des HEADERS de fonctions
|
||||
|
||||
#define SCK 0x01 // FILTRE pour ONLY_SOCKET
|
||||
#define CMD 0x02 // FILTRE pour ONLY_COMMAND
|
||||
|
@ -31,7 +31,7 @@
|
|||
|
||||
// possibilité de cumuler les DEBUGMODES
|
||||
/* DEBUGMOD ONLY_COMMAND + ONLY_DATA + .. */
|
||||
#define DEBUGMOD ONLY_REVEALS
|
||||
#define DEBUGMOD COMMAND // REVEALS + HEADER
|
||||
|
||||
|
||||
/* vars */
|
||||
|
|
Loading…
Reference in New Issue