proxy-ftp/dep/client.c

99 lines
3.7 KiB
C
Raw Normal View History

2015-12-14 20:48:19 +00:00
#include "client.h"
int CONNECT_CLIENT(char* serverHost, char* serverPort, int* pSocket){
if( DEBUGMOD&HDR ) printf("====== CONNECT_CLIENT(%s, %s, %d) ======\n\n", serverHost, serverPort, *pSocket);
2015-12-14 20:48:19 +00:00
struct addrinfo hints; // contiendra le filtre/format
struct addrinfo* addrinfo; // contiendra les infos
int CONNECT; // file_desc(s)
char BUFFER[maxBuffLen]; // BUFFER de communication
2015-12-14 20:48:19 +00:00
/* [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");
2015-12-14 20:48:19 +00:00
/* [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");
2015-12-14 20:48:19 +00:00
/* [3] Création de la socket
=======================================================*/
*pSocket = socket(addrinfo->ai_family, addrinfo->ai_socktype, 0);
if( DEBUGMOD&SCK ) printf("SOCKET = %d\n", *pSocket);
2015-12-14 20:48:19 +00:00
// si erreur
if( *pSocket == -1 ) return -1;
2015-12-14 20:48:19 +00:00
/* [4] On établit la connection
=======================================================*/
CONNECT = connect(
*pSocket,
addrinfo->ai_addr,
addrinfo->ai_addrlen
);
if( DEBUGMOD&SCK ) printf("CONNECT = %d\n", CONNECT);
2015-12-14 20:48:19 +00:00
// si erreur
if( CONNECT == -1 ) return -1;
2015-12-14 20:48:19 +00:00
// on a plus besoin des infos de l'adresse
freeaddrinfo(addrinfo);
return *pSocket;
2015-12-14 20:48:19 +00:00
}
2015-12-16 23:34:24 +00:00
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};
2015-12-14 20:48:19 +00:00
2015-12-16 23:34:24 +00:00
/* [1] On écrit sur la socket
2015-12-14 20:48:19 +00:00
=======================================================*/
int nbSend = swrite(pSocket, pRequest);
if( DEBUGMOD&BUF ) printf("nbSend: %d\n", nbSend);
if( DEBUGMOD&BUF ) printf("Message: %s\n", pRequest);
2015-12-14 20:48:19 +00:00
// si pas tout envoyé
if( strlen(pRequest) != nbSend ) return -1;
2015-12-14 20:48:19 +00:00
2015-12-16 23:34:24 +00:00
/* [2] On attends et lit la réponse
2015-12-14 20:48:19 +00:00
=======================================================*/
int nbRecup = WAIT_SOCKET_UPDATE(pSocket, BUFFER);
2015-12-14 20:48:19 +00:00
2015-12-16 23:34:24 +00:00
/* [3] On retourne la réponse par référence
=======================================================*/
*pAnswer = malloc( maxBuffLen );
2015-12-14 20:48:19 +00:00
strcpy(*pAnswer, BUFFER);
if( DEBUGMOD&BUF ) printf("nbReceived: %d\n", nbRecup);
if( DEBUGMOD&BUF ) printf("Message: %s\n", *pAnswer);
2015-12-14 20:48:19 +00:00
}