151 lines
3.8 KiB
C
151 lines
3.8 KiB
C
#include "utility.h"
|
|
|
|
void splitFtpRequest(char* pRequest, char* pCommand, char* pContent){
|
|
/* [1] Vérification du format
|
|
===========================================*/
|
|
int firstSpaceIndex = indexOf(pRequest, ' ');
|
|
|
|
if( firstSpaceIndex != 3 && firstSpaceIndex != 4){ // contient aucun espace en position 3 ou 4, on quitte
|
|
strcpy(pCommand, "ERROR");
|
|
strcpy(pContent, "");
|
|
return;
|
|
}
|
|
|
|
|
|
/* [2] Séparation des 2 parties
|
|
===========================================*/
|
|
int i;
|
|
|
|
for( i = 0 ; i < strlen(pRequest) || pRequest[i] != '\0' ; i++ ){
|
|
|
|
if( i < firstSpaceIndex ) // première partie (pCommand)
|
|
strcpy( pCommand, strcat(pCommand, (char[2]) { (char) pRequest[i], '\0' }) );
|
|
if( i > firstSpaceIndex ) // seconde partie (pContent)
|
|
strcpy( pContent, strcat(pContent, (char[2]) { (char) pRequest[i], '\0' }) );
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void splitFtpResponse(char* pAnswer, char* ftpCode, char* ftpText){
|
|
/* [1] Vérification du format
|
|
===========================================*/
|
|
int codeLength = 3; // taille du code
|
|
|
|
/* [2] Séparation des 2 parties
|
|
===========================================*/
|
|
int i;
|
|
|
|
for( i = 0 ; i < strlen(pAnswer) || pAnswer[i] != '\0' ; i++ ){
|
|
|
|
if( i < codeLength ) // première partie (ftpCode)
|
|
strcpy( ftpCode, strcat(ftpCode, (char[2]) { (char) pAnswer[i], '\0' }) );
|
|
if( i > codeLength ) // seconde partie (ftpText)
|
|
strcpy( ftpText, strcat(ftpText, (char[2]) { (char) pAnswer[i], '\0' }) );
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int indexOf(char* haystack, char needle){
|
|
int i;
|
|
|
|
for( i = 0 ; i < strlen(haystack) || haystack[i] != '\0' ; i++ )
|
|
if( haystack[i] == needle ) // si on trouve le caractère
|
|
return i;
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
void formatBuffer(char* pBuffer){
|
|
if( DEBUGMOD ) printf( "BUFLEN (bef): %lu\n", strlen(pBuffer) );
|
|
if( DEBUGMOD ) printf( "BUFFER: (%s)\n", pBuffer );
|
|
|
|
/* [1] On retire les "\n" et "\r" de la fin de la chaine
|
|
============================================================*/
|
|
int i;
|
|
|
|
for( i = strlen(pBuffer)-1 ; i >= 0 || pBuffer[i] != '\0' ; i-- )
|
|
if( pBuffer[i] == '\n' || pBuffer[i] == '\r' ) // si c'est un retour chariot
|
|
pBuffer[i] = '\0'; // on efface
|
|
else
|
|
break;
|
|
|
|
// on ferme ensuite la chaîne
|
|
pBuffer[i] = '\0';
|
|
|
|
/* [2] On ajoute "\r\n" à la fin
|
|
============================================================*/
|
|
strcpy(pBuffer, strcat(pBuffer, "\r\n"));
|
|
|
|
if( DEBUGMOD ) printf( "BUFLEN (aft): %lu\n", strlen(pBuffer) );
|
|
}
|
|
|
|
|
|
|
|
void read_stdin(char* pBuffer, unsigned long pLength){
|
|
fgets(pBuffer, pLength, stdin); // on lit l'entrée standard
|
|
|
|
int i;
|
|
// on supprimes les retours à la ligne de la fin
|
|
for( i = strlen(pBuffer)-1 ; i >= 0 || pBuffer[i] != '\0' ; i-- )
|
|
if( pBuffer[i] == '\n' || pBuffer[i] == '\r' ) // si c'est un retour chariot
|
|
pBuffer[i] = '\0'; // on efface
|
|
else
|
|
break;
|
|
|
|
strcpy(pBuffer, strcat(pBuffer, "\r\n"));
|
|
}
|
|
|
|
|
|
int swrite(int* pSocket, char* pBuffer){
|
|
if( *pSocket == -1 ) return -1; // si SOCKET fermée, on retourne une erreur
|
|
|
|
return write(*pSocket, pBuffer, strlen(pBuffer), MSG_DONTROUTE);
|
|
}
|
|
|
|
|
|
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
|
|
memset(pBuffer, '\0', maxBuffLen);
|
|
int nbRead = read(*pSocket, pBuffer, maxBuffLen);
|
|
|
|
|
|
// si on est déconnecté, on ferme la SOCKET
|
|
if( nbRead == 0 ){
|
|
close(*pSocket);
|
|
return -1; // on retourne une erreur
|
|
}
|
|
|
|
return nbRead;
|
|
}
|
|
|
|
|
|
|
|
void xPrint(char* pPattern, char* pBuffer){
|
|
char tmpBuffer[maxBuffLen];
|
|
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, tmpBuffer);
|
|
} |