No Description

client.c 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #include "client.h"
  2. int CONNECT_CLIENT(char* serverHost, char* serverPort, int* pSocket){
  3. if( DEBUGMOD&HDR ) printf("====== CONNECT_CLIENT(%s, %s, %d) ======\n\n", serverHost, serverPort, *pSocket);
  4. struct addrinfo hints; // contiendra le filtre/format
  5. struct addrinfo* addrinfo; // contiendra les infos
  6. int CONNECT; // file_desc(s)
  7. int GETADDRINFO; // contiendra l'erreur ou pas de getaddrinfo()
  8. char BUFFER[maxBuffLen]; // BUFFER de communication
  9. /* [1] On définit le filtre/format
  10. =======================================================*/
  11. memset(&hints, 0, sizeof(struct addrinfo)); // on vide le filtre
  12. hints.ai_family = AF_UNSPEC; // Allow IPv4 ou IPv6
  13. hints.ai_socktype = SOCK_STREAM; // TCP (SOCK_DGRAM = UDP)
  14. hints.ai_flags = 0; // non spécifié
  15. hints.ai_protocol = 0; // non spécifié
  16. if( DEBUGMOD&SCK ) printf("============HINTS===========\n");
  17. if( DEBUGMOD&SCK ) printf( "AI_FLAGS = %d\n", hints.ai_flags ); // int
  18. if( DEBUGMOD&SCK ) printf( "AI_FAMILY = %d\n", hints.ai_family ); // int
  19. if( DEBUGMOD&SCK ) printf( "AI_SOCKTYPE = %d\n", hints.ai_socktype ); // int
  20. if( DEBUGMOD&SCK ) printf( "AI_PROTOCOL = %d\n", hints.ai_protocol ); // int
  21. if( DEBUGMOD&SCK ) printf( "AI_ADDRLEN = %d\n", hints.ai_addrlen ); // int
  22. if( DEBUGMOD&SCK ) printf("\n");
  23. /* [2] On récupère les infos
  24. =======================================================*/
  25. GETADDRINFO = getaddrinfo(serverHost, serverPort, &hints, &addrinfo);
  26. // si erreur
  27. if( GETADDRINFO < 0 ) return -1;
  28. if( DEBUGMOD&SCK ) printf("=============RES============\n");
  29. if( DEBUGMOD&SCK ) printf( "AI_FLAGS = %d\n", addrinfo->ai_flags ); // int
  30. if( DEBUGMOD&SCK ) printf( "AI_FAMILY = %d\n", addrinfo->ai_family ); // int
  31. if( DEBUGMOD&SCK ) printf( "AI_SOCKTYPE = %d\n", addrinfo->ai_socktype ); // int
  32. if( DEBUGMOD&SCK ) printf( "AI_PROTOCOL = %d\n", addrinfo->ai_protocol ); // int
  33. if( DEBUGMOD&SCK ) printf( "AI_ADDRLEN = %d\n", addrinfo->ai_addrlen ); // int
  34. if( DEBUGMOD&SCK ) printf("\n");
  35. /* [3] Création de la socket
  36. =======================================================*/
  37. *pSocket = socket(addrinfo->ai_family, addrinfo->ai_socktype, 0);
  38. if( DEBUGMOD&SCK ) printf("SOCKET = %d\n", *pSocket);
  39. // si erreur
  40. if( *pSocket == -1 ) return -1;
  41. /* [4] On établit la connection
  42. =======================================================*/
  43. CONNECT = connect(
  44. *pSocket,
  45. addrinfo->ai_addr,
  46. addrinfo->ai_addrlen
  47. );
  48. if( DEBUGMOD&SCK ) printf("CONNECT = %d\n", CONNECT);
  49. // si erreur
  50. if( CONNECT == -1 ) return -1;
  51. // on a plus besoin des infos de l'adresse
  52. freeaddrinfo(addrinfo);
  53. /* [5] On retourne la SOCKET
  54. =======================================================*/
  55. return *pSocket;
  56. }
  57. int CLIENT_SEND(int* pSocket, char* pRequest, char** pAnswer){
  58. if( DEBUGMOD&HDR ) printf("====== CLIENT_SEND(%d, %s, %s) ======\n\n", *pSocket, pRequest, *pAnswer);
  59. char BUFFER[maxBuffLen] = {0};
  60. /* [1] On écrit sur la socket
  61. =======================================================*/
  62. int nbSend = swrite(pSocket, pRequest);
  63. if( DEBUGMOD&BUF ) printf("nbSend: %d\n", nbSend);
  64. if( DEBUGMOD&BUF ) printf("Message: %s\n", pRequest);
  65. // si pas tout envoyé
  66. if( strlen(pRequest) != nbSend ) return -1;
  67. /* [2] On attends et lit la réponse
  68. =======================================================*/
  69. int nbRecup = WAIT_SOCKET_UPDATE(pSocket, BUFFER);
  70. /* [3] On retourne la réponse par référence
  71. =======================================================*/
  72. *pAnswer = malloc( maxBuffLen );
  73. strcpy(*pAnswer, BUFFER);
  74. if( DEBUGMOD&BUF ) printf("nbReceived: %d\n", nbRecup);
  75. if( DEBUGMOD&BUF ) printf("Message: %s\n", *pAnswer);
  76. }