mirror of
https://github.com/yoboujon/tsock.git
synced 2025-06-08 14:00:50 +02:00
Ajout de commentaires pour tsock.h. Changement de noms de fonctions. Bug recuperationParam corrigé.
This commit is contained in:
parent
9c85606371
commit
ce09883320
6 changed files with 180 additions and 49 deletions
|
@ -53,6 +53,7 @@ void afficheListeBAL(struct listeBAL listeActuel);
|
||||||
|
|
||||||
struct elementBAL * existInListBAL(struct listeBAL listeActuel, int idRecepteur, bool * boolRetour);
|
struct elementBAL * existInListBAL(struct listeBAL listeActuel, int idRecepteur, bool * boolRetour);
|
||||||
void nouveauMessage(struct listeBAL * b,int idEmetteur,int idRecepteur,char *data);
|
void nouveauMessage(struct listeBAL * b,int idEmetteur,int idRecepteur,char *data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Récupère la liste de message d'un recepteur précis
|
* @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,
|
* 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*
|
* @return struct listeMessage*
|
||||||
*/
|
*/
|
||||||
struct listeMessage * getMessages(struct listeBAL b, int idRecepteur);
|
struct listeMessage * getMessages(struct listeBAL b, int idRecepteur);
|
||||||
|
|
||||||
|
|
||||||
void formatListMessage(struct listeMessage l);
|
void formatListMessage(struct listeMessage l);
|
||||||
|
|
||||||
#endif
|
#endif
|
140
header/tsock.h
140
header/tsock.h
|
@ -14,19 +14,155 @@
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#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);
|
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[]);
|
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);
|
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[]);
|
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);
|
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);
|
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);
|
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);
|
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);
|
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);
|
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 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
|
#endif
|
|
@ -20,7 +20,6 @@ int bal(void){
|
||||||
messageBAL * creeMessage(char *data,int idEmetteur)
|
messageBAL * creeMessage(char *data,int idEmetteur)
|
||||||
{
|
{
|
||||||
messageBAL * message = malloc(sizeof(messageBAL));
|
messageBAL * message = malloc(sizeof(messageBAL));
|
||||||
|
|
||||||
message->idEmetteur=idEmetteur;
|
message->idEmetteur=idEmetteur;
|
||||||
message->tailleData=strlen(data);
|
message->tailleData=strlen(data);
|
||||||
message->data=(char*)malloc(sizeof(char)*message->tailleData);
|
message->data=(char*)malloc(sizeof(char)*message->tailleData);
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
int main (int argc, char **argv)
|
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();
|
//testProtocol();
|
||||||
//bal();
|
//bal();
|
||||||
char *ipAddress;
|
char *ipAddress;
|
||||||
extern char *optarg;
|
extern char *optarg;
|
||||||
|
@ -93,12 +93,10 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
if(source)
|
if(source)
|
||||||
{
|
{
|
||||||
//printf("Source : %d\n",nb_message);
|
|
||||||
launchSource(nb_message,tailleMessage,tcp,port,ipAddress,emetteur,recepteur);
|
launchSource(nb_message,tailleMessage,tcp,port,ipAddress,emetteur,recepteur);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//printf("Puit : %d\n",nb_message);
|
|
||||||
launchPuit(nb_message,tailleMessage,tcp,port,ipAddress,isBAL);
|
launchPuit(nb_message,tailleMessage,tcp,port,ipAddress,isBAL);
|
||||||
}
|
}
|
||||||
return(EXIT_SUCCESS);
|
return(EXIT_SUCCESS);
|
||||||
|
|
|
@ -53,10 +53,10 @@ int modeBoiteAuxLettres(struct sockaddr_in socketStruct, int socketType, int por
|
||||||
recuperationParam(paramRecu,¶m,&emetteur,&recepteur,&tailleMessage,&nbMessage);
|
recuperationParam(paramRecu,¶m,&emetteur,&recepteur,&tailleMessage,&nbMessage);
|
||||||
switch(param)
|
switch(param)
|
||||||
{
|
{
|
||||||
case 1:
|
case MODE_RECEPTEUR:
|
||||||
printf("Renvoi de la boite aux lettres en mode recepteur.");
|
printf("Renvoi de la boite aux lettres en mode recepteur.");
|
||||||
break;
|
break;
|
||||||
case 2:
|
case MODE_EMIS:
|
||||||
printf("Reception de messages en mode emission.");
|
printf("Reception de messages en mode emission.");
|
||||||
receptionEmetteur(sock,tailleMessage,&n,emetteur,recepteur,&boiteAuxLettres);
|
receptionEmetteur(sock,tailleMessage,&n,emetteur,recepteur,&boiteAuxLettres);
|
||||||
break;
|
break;
|
||||||
|
|
75
src/tsock.c
75
src/tsock.c
|
@ -1,10 +1,21 @@
|
||||||
#include "../header/tsock.h"
|
#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)
|
void setNbMessage(int * nb, int source)
|
||||||
{
|
{
|
||||||
if((*nb == -1) && (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){
|
int exitMax(int var,int tailleMax){
|
||||||
if(var>1500){
|
if(var>tailleMax){
|
||||||
printf("-l doit être <1500 \n");
|
printf("-l doit être <1500 \n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
return 0;
|
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 * formatTextParam(int modeParam, int numEmetteur, int numRecepteur, int tailleMessage, int nbMessage)
|
||||||
{
|
{
|
||||||
char * actualMessage = malloc(sizeof(char)*16);
|
char * actualMessage = malloc(sizeof(char)*16);
|
||||||
|
@ -134,17 +114,11 @@ char * formatTextMessage(char * message, int tailleMessage)
|
||||||
return actualMessage;
|
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 gestionOffset(char *actualMessage,int encadrementHaut,int encadrementBas,int nbr)
|
||||||
{
|
{
|
||||||
int taillechaine=0;
|
int taillechaine=0;
|
||||||
char numbuffer[30];
|
char numbuffer[30];
|
||||||
convertion(nbr,numbuffer);
|
sprintf(numbuffer, "%d", (nbr)%10000);
|
||||||
taillechaine=strlen(numbuffer);
|
taillechaine=strlen(numbuffer);
|
||||||
for(int i=encadrementBas;i<encadrementHaut-taillechaine+1;i++)
|
for(int i=encadrementBas;i<encadrementHaut-taillechaine+1;i++)
|
||||||
{
|
{
|
||||||
|
@ -158,3 +132,24 @@ int gestionOffset(char *actualMessage,int encadrementHaut,int encadrementBas,int
|
||||||
}
|
}
|
||||||
return encadrementHaut;
|
return encadrementHaut;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int recuperationParam(char * msgParam, int * messageOrPram, int * numEmetteurParam, int * numRecepeteurParam, int * numTailleMessageParam, int * nbMessageParam)
|
||||||
|
{
|
||||||
|
*messageOrPram=msgParam[0]-0x30;
|
||||||
|
*numEmetteurParam =protocol2int(msgParam,1);
|
||||||
|
*numRecepeteurParam=protocol2int(msgParam,MAX_MESSAGE+1);
|
||||||
|
*numTailleMessageParam=protocol2int(msgParam,(2*MAX_MESSAGE)+1);
|
||||||
|
*nbMessageParam=protocol2int(msgParam,(3*MAX_MESSAGE)+1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int protocol2int(char * data, int offset)
|
||||||
|
{
|
||||||
|
char buff[MAX_MESSAGE+1];
|
||||||
|
for(int i=offset,j=0;i<MAX_MESSAGE+offset;i++,j++)
|
||||||
|
{
|
||||||
|
buff[j]=data[i];
|
||||||
|
}
|
||||||
|
buff[MAX_MESSAGE+1]='\0';
|
||||||
|
return atoi(buff)%10000;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue