diff --git a/header/puit.h b/header/puit.h index 49276ab..3819ae6 100644 --- a/header/puit.h +++ b/header/puit.h @@ -12,11 +12,10 @@ * @param tailleMessage int, la taille de chacun de ces messages. * @param isTCP int, 1 -> TCP, 0 -> UDP * @param port int, numéro du port - * @param ipAddress char *, adresse IP * @param isBAL int, 1-> Mode Boite aux Lettres * @return int 0-> si réussite, autre sinon */ -int launchPuit(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipAddress,int isBAL); +int launchPuit(int nombreMessage,int tailleMessage,int isTCP,int port,int isBAL); /** * @brief Pour un nombre de message donné (-1 -> infini) recevra des messages avec une taille précise. @@ -24,12 +23,12 @@ int launchPuit(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipA * Dans le cas d'UDP si nombreMessage = -1 (infini) écoutera à l'infini la source. Pour TCP fermera la connexion * une fois la connexion finie [A améliorer]. * - * @param nombreMessages - * @param tailleMessage - * @param sock - * @param socketStruct - * @param isTCP - * @return int + * @param nombreMessage int, le nombre de message à envoyer. + * @param tailleMessage int, la taille de chacun de ces messages. + * @param sock int, socket premettant d'utiliser la primitive readRecvFrom(). + * @param socketStruct struct sockaddr_in , la structure du socket. + * @param isTCP int, 1 -> TCP, 0 -> UDP. + * @return int 0 si réussi. */ int receiveMultipleData(int nombreMessages, int tailleMessage, int sock, struct sockaddr_in socketStruct, int isTCP); diff --git a/header/tsock.h b/header/tsock.h index bad70e8..46e955f 100644 --- a/header/tsock.h +++ b/header/tsock.h @@ -69,8 +69,9 @@ void initStructSocket(struct sockaddr_in *socketTempStruct, int source, int port * @param argc int, nombre d'arguments (IP -> argc-1 et Port -> argc-2) * @param portNumber int *, numéro du port retourné * @param ipAddress char **, pointeur faire une chaîne de caractère de l'adresse ip retournée + * @param portOnly bool, mode portOnly pour -s ou -b */ -void getNonOtpArgs(char ** argv, int argc, int * portNumber, char * ipAddress[]); +void getNonOtpArgs(char ** argv, int argc, int * portNumber, char * ipAddress[], bool portOnly); /** * @brief [utile pour source.c] à partir d'un numéro, d'un message et d'une taille diff --git a/src/main.c b/src/main.c index 3e145e0..408e2d0 100644 --- a/src/main.c +++ b/src/main.c @@ -5,7 +5,7 @@ int main (int argc, char **argv) { - char usageChar[100]="usage: cmd [-p|-s]|[-u][-u|-r ##|-e ##|-b][-n ##][-l ##] port ipAdress\n"; + char usageChar[100]="usage: cmd [-p|-s][-u]|[-u|-r ##|-e ##|-b][-n ##][-l ##] port ipAdress\n"; //testProtocol(); //bal(); char *ipAddress; @@ -71,25 +71,29 @@ int main (int argc, char **argv) break; } } - if (source == -1) { + bool serverMode = (isBAL || source==0); + if (source == -1){ printf("-p|-s non present !\n"); printf("%s",usageChar); exit(EXIT_FAILURE); } - if(argc != optind+2) - { + if((argc != optind+1) && serverMode){ + printf("ip non present !\n"); + printf("%s",usageChar); + exit(EXIT_FAILURE); + } + else if((argc != optind+2) && !serverMode){ printf("ip ou port non present !\n"); printf("%s",usageChar); exit(EXIT_FAILURE); } - if(tailleMessage == -1) - { + if(tailleMessage == -1){ tailleMessage = 30; } - getNonOtpArgs(argv, argc, &port, &ipAddress); + getNonOtpArgs(argv, argc, &port, &ipAddress, serverMode); setNbMessage(&nb_message,source); - printInfo(source,tcp,nb_message,tailleMessage,port,ipAddress); + serverMode ? printInfo(source,tcp,nb_message,tailleMessage,port,"non precise") : printInfo(source,tcp,nb_message,tailleMessage,port,ipAddress); if(source) { @@ -97,7 +101,7 @@ int main (int argc, char **argv) } else { - launchPuit(nb_message,tailleMessage,tcp,port,ipAddress,isBAL); + launchPuit(nb_message,tailleMessage,tcp,port,isBAL); } return(EXIT_SUCCESS); } \ No newline at end of file diff --git a/src/puit.c b/src/puit.c index b076de0..c5754fa 100644 --- a/src/puit.c +++ b/src/puit.c @@ -1,6 +1,6 @@ #include "../header/puit.h" -int launchPuit(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipAddress,int isBAL) +int launchPuit(int nombreMessage,int tailleMessage,int isTCP,int port,int isBAL) { int sock,socketType; struct sockaddr_in socketPuit; @@ -11,11 +11,11 @@ int launchPuit(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipA if(isBAL) { printf("Mode Boîte aux Lettres\n"); - modeBoiteAuxLettres(socketPuit,SOCK_STREAM,port,ipAddress); + modeBoiteAuxLettres(socketPuit,SOCK_STREAM,port,"localhost"); return 0; } /*Sinon on initialise le socket de base et on rentre dans receiveMultipleData() -> on ferme le socket avant*/ - sock = initSocket(socketType,&socketPuit,port,ipAddress); + sock = initSocket(socketType,&socketPuit,port,"localhost"); receiveMultipleData(nombreMessage,tailleMessage,sock,socketPuit,isTCP); close(sock); return 0; diff --git a/src/tsock.c b/src/tsock.c index 0e78970..9ada20a 100644 --- a/src/tsock.c +++ b/src/tsock.c @@ -56,12 +56,19 @@ void initStructSocket(struct sockaddr_in *socketTempStruct, int source, int port } } -void getNonOtpArgs(char ** argv, int argc, int * portNumber, char ** ipAddress) +void getNonOtpArgs(char ** argv, int argc, int * portNumber, char * ipAddress[], bool portOnly) { - *portNumber = atoi(argv[argc-2]); - *ipAddress = NULL; - *ipAddress = (char *)malloc(sizeof(argv[argc-1])); - strcpy(*ipAddress,argv[argc-1]); + if(portOnly) + { + *portNumber = atoi(argv[argc-1]); + } + else + { + *portNumber = atoi(argv[argc-2]); + *ipAddress = NULL; + *ipAddress = (char *)malloc(sizeof(argv[argc-1])); + strcpy(*ipAddress,argv[argc-1]); + } } void formatText(char * actualMessage, int num, int tailleMessage, char messageChar)