diff --git a/header/bal.h b/header/bal.h index a173347..10a4d87 100644 --- a/header/bal.h +++ b/header/bal.h @@ -53,6 +53,7 @@ void afficheListeBAL(struct listeBAL listeActuel); struct elementBAL * existInListBAL(struct listeBAL listeActuel, int idRecepteur, bool * boolRetour); void nouveauMessage(struct listeBAL * b,int idEmetteur,int idRecepteur,char *data); + /** * @brief Récupère la liste de message d'un recepteur précis * Attention de vérifier si la liste est vide -> si c'est le cas, @@ -63,6 +64,8 @@ void nouveauMessage(struct listeBAL * b,int idEmetteur,int idRecepteur,char *dat * @return struct listeMessage* */ struct listeMessage * getMessages(struct listeBAL b, int idRecepteur); + + void formatListMessage(struct listeMessage l); #endif \ No newline at end of file diff --git a/header/tsock.h b/header/tsock.h index ef94e93..44127b1 100644 --- a/header/tsock.h +++ b/header/tsock.h @@ -14,19 +14,155 @@ #include #include +#define NBMESSAGE_DEFAULT 10 +#define MAX_MESSAGE 4 +#define MODE_PARAMETRE 0 +#define MODE_RECEPTEUR 1 +#define MODE_EMIS 2 + +/** + * @brief Permet de gérer le nombre de message envoyés s'ils ne sont pas précisés + * par l'utilisateur (uniquement en mode source). + * Ici le nombre par défaut est définie par NBMESSAGE_DEFAULT. + * A noter que pour le puit, ce nombre est laissé à -1 car le nombre de message recu + * est infini. + * @author Yohan Boujon + * + * @param nb int *, pointeur sur l'entier à modifier + * @param source source, vérifie si nous sommes bien en mode source + */ void setNbMessage(int * nb, int source); + +/** + * @brief Affiche les informations principales rentrées par l'utilisateur, notamment : le mode, le nombre de messages, + * la taille des messages, le port, l'adresse IP, le mode (TCP/UDP). + * @author Yohan Boujon + * + * @param source int, source ou puit + * @param isTCP int, TCP ou UDP + * @param nbMessage int, le nombre de message à envoyer/à recevoir (-1 en reception est lu comme infini) + * @param taille int, la taille de chaque message + * @param portNumber int, numéro du port + * @param ipAddress char*, l'adresse IP sous chaîne de caractère + */ void printInfo(int source, int isTCP, int nbMessage, int taille, int portNumber, char ipAddress[]); + +/** + * @brief Initialise la structure du socket pour avoir le port et l'ip. Si le mode choisi est reception : l'ip est ignorée. + * Utilise la fonction gethostbyname pour récupérer l'IPv4 à partir d'une chaîne de caractère quelconque. + * @author Yohan Boujon + * + * @param socketTempStruct struct sockaddr_in*, pointeur sur la structure (doit être initialisée au préalable). + * @param source int, source ou puit -> si à 0 alors ipAddress sera ignoré et défini par INADDR_ANY. + * @param port int, le port du socket. + * @param ipAddress char *, l'Adresse IP du socket. + */ void initStructSocket(struct sockaddr_in *socketTempStruct, int source, int port, char * ipAddress); + +/** + * @brief Récupère toutes les informations qui n'utilisent pas getopt, + * notamment le port ainsi que l'ip. + * @author Yohan Boujon + * + * @param argv char **, liste de chaîne de caractère des arguments + * @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 + */ void getNonOtpArgs(char ** argv, int argc, int * portNumber, char * ipAddress[]); + +/** + * @brief [utile pour source.c] à partir d'un numéro, d'un message et d'une taille + * Créer une trame avec 5 caractères pour le numéro du message, et le reste pour le message + * @author Yohan Boujon + * + * @param actualMessage char *, Doit être initialisé. Message modifié. + * @param num int, numéro du message, ne doit pas dépasser 9999. + * @param tailleMessage int, taille du message final. + * @param messageChar char, caractère du message, sera répété pour 4-tailleMessage fois. + */ void formatText(char * actualMessage, int num, int tailleMessage, char messageChar); + +/** + * @brief Permet, pour une taille max donnée. De quitter le programme si cette valeur est dépassée. + * @author Simon Paris + * + * @param var int, variable à tester. + * @param tailleMax int, le test. + * @return int retourne 0 si cela s'est bien executé. + */ int exitMax(int var,int tailleMax); +/** + * @brief Converti plusieurs paramètres en une chaîne de caractère. Couche protocolaire de l'application. + * Sous la forme suivante : [messageType[1],numEmetteur[4],numRecepteur[4],tailleMessage[4],nbMessage[4]] + * @author Simon Paris + * + * @param modeParam int, MODE_PARAMETRE pour un paramètre pure, MODE_RECEPTEUR -> -r ##, MODE_EMIS -> -e ##. + * @param numEmetteur int, numéro de l'émetteur (-e ##, ou idEmetteur). + * @param numRecepteur int, numéro du recepteur (-r ##, ou idRecepteur). + * @param tailleMessage int, taille du message à envoyer. + * @param nbMessage int, nombre de message à envoyer [inutilisé]. + * @return char* chaîne de caractère à envoyer via TCP. + */ char * formatTextParam(int modeParam, int numEmetteur, int numRecepteur, int tailleMessage, int nbMessage); + +/** + * @brief Ajoute un numéro au début du message à envoyer. + * @author Simon Paris + * + * @param message char *, chaîne de caractère du message originel. + * @param tailleMessage int, taille du message "message". + * @return char* renvoi la chaîne modifiée. + */ char * formatTextMessage(char * message, int tailleMessage); -int convertion(int nbr,char *numbuffer); + +/** + * @brief Converti un nombre en chaîne de caractre et le place dans la chaîne actualMessage. + * La taille de ce dernier doit être connu au préalable + * @author Simon Paris + * + * @param actualMessage char *, message à modifier. + * @param encadrementHaut int, offset du début du nombre. + * @param encadrementBas int, offset de la fin du nombre. + * @param nbr int, nombre à convertir en chaîne de caractère, ne doit pas dépasser 9999. + * @return int retourne encadrementHaut. + */ int gestionOffset(char *actualMessage,int encadrementHaut,int encadrementBas,int nbr); + +/** + * @brief Teste les différentes fonctions permettant de gérer le protocole, + * autant en lecture qu'écriture + * @author Simon Paris + * + * @return int 0 si réussi + */ int testProtocol(void); +/** + * @brief Récupération de chaque paramètres grâce à la trame précédente. + * @author Simon Paris + * + * @param msgParam char *, chaîne reçue avant le message, couche protocolaire. + * @param messageOrPram int *, renvoi MODE_PARAM,MODE_SOURCE ou MODE_EMIS. + * @param numEmetteurParam int *, renvoi le numéro de l'émetteur. + * @param numRecepeteurParam int *, renvoi le numéro du recepteur. + * @param numTailleMessageParam int *, renvoi la taille du message émis. + * @param nbMessageParam int *, renvoi le nombre de message a recevoir [Inutilisé] + * @return int + */ int recuperationParam(char * msgParam, int * messageOrPram, int * numEmetteurParam, int * numRecepeteurParam, int * numTailleMessageParam, int * nbMessageParam); -int int2String(char *msgParam, int offset); + +/** + * @brief converti une chaîne de caractère spécifique (protocolaire) en entiers avec une gestion d'offset. + * La taille lue entre chaque offset est définie par MAX_MESSAGE. + * @author Simon Paris + * @author Yohan Boujon + * + * @param data char *, la chaîne de caractère à lire. + * @param offset int, offset : décalage de n caractère sur la chaîne data. + * @return int nombre récupéré entre 0 et 9999. + */ +int protocol2int(char * data, int offset); + #endif \ No newline at end of file diff --git a/src/bal.c b/src/bal.c index b013abc..e396b0b 100644 --- a/src/bal.c +++ b/src/bal.c @@ -20,7 +20,6 @@ int bal(void){ messageBAL * creeMessage(char *data,int idEmetteur) { messageBAL * message = malloc(sizeof(messageBAL)); - message->idEmetteur=idEmetteur; message->tailleData=strlen(data); message->data=(char*)malloc(sizeof(char)*message->tailleData); diff --git a/src/main.c b/src/main.c index 7d3586b..3e145e0 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,7 @@ int main (int argc, char **argv) { char usageChar[100]="usage: cmd [-p|-s]|[-u][-u|-r ##|-e ##|-b][-n ##][-l ##] port ipAdress\n"; - testProtocol(); + //testProtocol(); //bal(); char *ipAddress; extern char *optarg; @@ -93,12 +93,10 @@ int main (int argc, char **argv) if(source) { - //printf("Source : %d\n",nb_message); launchSource(nb_message,tailleMessage,tcp,port,ipAddress,emetteur,recepteur); } else { - //printf("Puit : %d\n",nb_message); launchPuit(nb_message,tailleMessage,tcp,port,ipAddress,isBAL); } return(EXIT_SUCCESS); diff --git a/src/puit.c b/src/puit.c index 7d407f1..21e4920 100644 --- a/src/puit.c +++ b/src/puit.c @@ -53,10 +53,10 @@ int modeBoiteAuxLettres(struct sockaddr_in socketStruct, int socketType, int por recuperationParam(paramRecu,¶m,&emetteur,&recepteur,&tailleMessage,&nbMessage); switch(param) { - case 1: + case MODE_RECEPTEUR: printf("Renvoi de la boite aux lettres en mode recepteur."); break; - case 2: + case MODE_EMIS: printf("Reception de messages en mode emission."); receptionEmetteur(sock,tailleMessage,&n,emetteur,recepteur,&boiteAuxLettres); break; diff --git a/src/tsock.c b/src/tsock.c index bfb19e5..1ed2f89 100644 --- a/src/tsock.c +++ b/src/tsock.c @@ -1,10 +1,21 @@ #include "../header/tsock.h" +int testProtocol(void) +{ + char * msg,*msg2; + msg=formatTextParam(0,7, 8, 64, 1); + printf("%s\n",msg); + msg2=formatTextMessage("aaaaaa",6); + printf("%s\n",msg2); + //recuperationParam(msg); + return 0; +} + void setNbMessage(int * nb, int source) { if((*nb == -1) && (source)) { - *nb = 10; + *nb = NBMESSAGE_DEFAULT; } } @@ -74,44 +85,13 @@ void formatText(char * actualMessage, int num, int tailleMessage, char messageCh } int exitMax(int var,int tailleMax){ - if(var>1500){ + if(var>tailleMax){ printf("-l doit être <1500 \n"); exit(EXIT_FAILURE); } return 0; } -int testProtocol(void) -{ - char * msg,*msg2; - msg=formatTextParam(0,7, 8, 64, 1); - printf("%s\n",msg); - msg2=formatTextMessage("aaaaaa",6); - printf("%s\n",msg2); - //recuperationParam(msg); - return 0; -} - -int recuperationParam(char * msgParam, int * messageOrPram, int * numEmetteurParam, int * numRecepeteurParam, int * numTailleMessageParam, int * nbMessageParam) -{ - *messageOrPram=msgParam[0]-0x30; - *numEmetteurParam = int2String(msgParam,1); - *numRecepeteurParam= int2String(msgParam,5); - *numTailleMessageParam= int2String(msgParam,9); - *nbMessageParam=int2String(msgParam,13); - return 0; -} - -int int2String(char *msgParam, int offset) -{ - int taille =4; - char buffEntier[taille]; - for(int i=offset,j=0;i<=offset+taille;i++,j++){ - buffEntier[j]=msgParam[i]; - } - return atoi(buffEntier); -} - char * formatTextParam(int modeParam, int numEmetteur, int numRecepteur, int tailleMessage, int nbMessage) { char * actualMessage = malloc(sizeof(char)*16); @@ -134,17 +114,11 @@ char * formatTextMessage(char * message, int tailleMessage) return actualMessage; } -int convertion(int nbr,char *numbuffer) -{ - sprintf(numbuffer, "%d", (nbr)%10000); - return 0; -} - int gestionOffset(char *actualMessage,int encadrementHaut,int encadrementBas,int nbr) { int taillechaine=0; char numbuffer[30]; - convertion(nbr,numbuffer); + sprintf(numbuffer, "%d", (nbr)%10000); taillechaine=strlen(numbuffer); for(int i=encadrementBas;i