sysdis-project/central-manager/lib/util.c

104 lines
3.1 KiB
C

#include "util.h"
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 é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);
/* 2. 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
}
if( DEBUGMOD&RVL ) printf("SEND_1\n");
if( DEBUGMOD&RVL ) revealString(pBuffer);
if( DEBUGMOD&RVL ) printf("SEND_2\n");
/* 3. On retourne le nombre de <char> envoyés */
return nbSent;
}
int sread(int* pSocket, char* pBuffer){
if( *pSocket == -1 ) return -1; // si SOCKET fermée, on retourne une erreur
/* 1. On vide le buffer avant de lire */
memset(pBuffer, '\0', MAX_BUF_LEN);
if( DEBUGMOD&BUF ) printf("READLEN_1: %lu\n", strlen(pBuffer));
/* 2. On lit la SOCKET */
int nbRead = read(*pSocket, pBuffer, MAX_BUF_LEN);
if( DEBUGMOD&BUF ) printf("READLEN_3: %d\n", nbRead);
/* 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
}
if( DEBUGMOD&RVL ) printf("READ_1\n");
if( DEBUGMOD&RVL ) revealString(pBuffer);
if( DEBUGMOD&RVL ) printf("READ_2\n");
/* 4. On retourne le nombre de caractères lus */
return nbRead;
}
void setSocketTimeout(int* pSocket, const int pSec, const int pUSec){
/* 1. On créé la structure contenant le timeout */
struct timeval timeout;
timeout.tv_sec = pSec;
timeout.tv_usec = pUSec;
setsockopt(*pSocket, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(struct timeval));
if( DEBUGMOD&SCK ) printf("Set socket(%d) timeout to %lus\n", *pSocket, (long unsigned) timeout.tv_sec );
}
void xPrint(char* pPattern, char* pBuffer){
char tmpBuffer[MAX_BUF_LEN];
strcpy(tmpBuffer, pBuffer);
int i;
// on supprimes les retours à la ligne de la fin
for( i = strlen(tmpBuffer)-1 ; i >= 0 && tmpBuffer[i] != '\0' ; i-- )
if( tmpBuffer[i] == '\n' || tmpBuffer[i] == '\r' ) // si c'est un retour chariot
tmpBuffer[i] = '\0'; // on efface
else
break;
printf(pPattern, pBuffer);
}
void revealString(char* pString){
/* 1. On créé une copie de @pString */
char revealedString[MAX_BUF_LEN] = {0};
/* 2. On rend visible tous les caractères "invisibles" */
int i;
for( i = 0 ; i < strlen(pString) && pString[i] != '\0' ; i++ ){
if( pString[i] == '\r' ){ revealedString[strlen(revealedString)] = '\\'; revealedString[strlen(revealedString)] = 'r'; }
else if( pString[i] == '\n' ){ revealedString[strlen(revealedString)] = '\\'; revealedString[strlen(revealedString)] = 'n'; }
else revealedString[strlen(revealedString)] = pString[i];
revealedString[strlen(revealedString)] = '\0';
}
/* 3. On affiche la chaîne explicite */
if( DEBUGMOD&RVL ) printf("[[%s]]\n", revealedString);
}