proxy-ftp/proxy_ftp.c

152 lines
3.7 KiB
C
Raw Normal View History

2015-12-14 20:48:19 +00:00
#include "proxy_ftp.h"
// DECLARATIONS
static pthread_t managers[maxListLen];
2015-12-14 20:48:19 +00:00
/* headers */
static void* testServer();
/*****************/
/* CORPS DU PROG */
/*****************/
int main(int argc, char* argv[]){
if( argc > 1 )
testServer(argv[1]);
else
testServer("");
2015-12-14 20:48:19 +00:00
return EXIT_SUCCESS;
}
static void* testServer(char* localPort){
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
2015-12-14 20:48:19 +00:00
char BUFFER[maxBuffLen]; // contiendra le BUFFER
struct sockaddr_storage clientInfo; // contiendra les infos client
char repeat; // sert à sortir de la boucle
int nbReceived, nbSend; // contiendra les nb reçu && envoyé
socklen_t len = sizeof(struct sockaddr_storage);
// retour de @DROP_SERVER
char* serverPort; // contiendra le port
int LISTENSOCK; // contiendra la socket d'écoute
char* ftp_response;
2015-12-14 21:00:05 +00:00
/* [0] On démarre le SERVEUR + le CLIENT
2015-12-14 20:48:19 +00:00
==========================================================*/
serverPort = malloc(maxPortLen);
if( strlen(localPort) != 0 )
strcpy(serverPort, localPort);
2015-12-14 20:48:19 +00:00
DROP_SERVER(remoteHost, &serverPort, &LISTENSOCK);
printf("Port: %s\n", serverPort);
2015-12-14 20:48:19 +00:00
/* [1] Attente d'une demande de connection, puis création d'une socket
============================================================================*/
USER_SOCKET = accept(LISTENSOCK, (struct sockaddr *) &clientInfo, &len);
// static void* manageConnection(int* USER_SOCKET){
/* [2] Envoi de la séquence de Bienvenue
============================================================================*/
swrite(&USER_SOCKET, WLCM_MSG);
2015-12-14 20:48:19 +00:00
/* BOUCLE DE COMMANDES */
while( USER_SOCKET != -1 ){
2015-12-14 20:48:19 +00:00
/* [3] On récupère les données reçues (+attente)
============================================================================*/
if( WAIT_SOCKET_UPDATE(&USER_SOCKET, BUFFER) == -1 ) break;
if( DEBUGMOD&CMD ) xPrint("C->P: %s\n", BUFFER);
2015-12-14 20:48:19 +00:00
2015-12-14 21:00:05 +00:00
/* [4] Traitement de la requête
============================================================================*/
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;
2015-12-14 21:00:05 +00:00
/* [5] Redirection vers le serveur FTP
2015-12-14 20:48:19 +00:00
============================================================================*/
if( DEBUGMOD&CMD ) xPrint("P->F: %s\n\n", BUFFER);
CLIENT_SEND(&FTP_SOCKET, BUFFER, &ftp_response);
if( DEBUGMOD&CMD ) xPrint("F->P: %s\n", ftp_response);
2015-12-14 20:48:19 +00:00
2015-12-14 21:00:05 +00:00
/* [6] Traitement de la réponse (FTP)
2015-12-14 20:48:19 +00:00
============================================================================*/
MANAGE_RESPONSE(ftp_response, &USER_SOCKET, &FTP_SOCKET, &DUSER_SOCKET, &DFTP_SOCKET);
2015-12-14 21:00:05 +00:00
/* [7] Redirection vers le CLIENT
============================================================================*/
2015-12-14 20:48:19 +00:00
if( swrite(&USER_SOCKET, ftp_response) == -1 ) break;
if( DEBUGMOD&CMD ) xPrint("P->C: %s\n", ftp_response);
2015-12-14 20:48:19 +00:00
2015-12-14 21:00:05 +00:00
/* [8] On vide les buffers
2015-12-14 20:48:19 +00:00
============================================================================*/
// memset(BUFFER, '\0', maxBuffLen); // on vide le buffer
// memset(ftp_response, '\0', maxBuffLen);
2015-12-14 20:48:19 +00:00
}
2015-12-14 21:00:05 +00:00
/* [9] Fermeture des connections (SOCKETS)
============================================================================*/
printf("CLOSING CONNECTIONS\n");
2015-12-14 20:48:19 +00:00
close(USER_SOCKET);
close(FTP_SOCKET);
close(LISTENSOCK);
}
/*
* DROP_SERVER
* INIT_CLIENT
*
* while(){
* accept();
* client_send()
* }
*
* EXIT_CLIENT
* HALT_SERVER
*
*
*
*
*
*
*
*
*/