diff --git a/tsock_v3.c b/tsock_v3.c index c201aa7..5c1dc08 100644 --- a/tsock_v3.c +++ b/tsock_v3.c @@ -42,8 +42,9 @@ int main (int argc, char **argv) int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */ int source = -1 ; /* 0=puits, 1=source */ int udp=0; /* 0=TCP, 1=UDP */ - - while ((c = getopt(argc, argv, "pn:su")) != -1) { + int lg=-1; + + while ((c = getopt(argc, argv, "pn:sul:")) != -1) { switch (c) { case 'p': if (source == 1) { @@ -63,11 +64,27 @@ int main (int argc, char **argv) case 'n': nb_message = atoi(optarg); + //Indice packet limite to 5 characters + if(n >= 100000) { + printf("Too many packets"); + exit(1); + } + break; case 'u': - udp=1; - break; + udp=1; + break; + + case 'l': + lg=atoi(optarg); + // A TCP packet is roughly 1500 bytes. We allow for some overhead. + // We provide an MTU of 1400 bytes. + if(lg >= 1400) { + printf("Messages too long"); + exit(1); + } + break; default: printf("usage: cmd [-p|-s][-n ##]\n"); @@ -80,8 +97,14 @@ int main (int argc, char **argv) // Recuperation du port int port=atoi(argv[argc-1]); port = htons(port); + - char* message = malloc(BASE_SIZE * sizeof(char)); + if (lg == -1) { + lg=30; + } + + char* message = malloc(lg * sizeof(char)); + if (source == -1) { printf("usage: cmd [-p|-s][-n ##]\n"); @@ -111,6 +134,7 @@ int main (int argc, char **argv) } + if (udp==1){ // Creation du socket local int sock= socket(AF_INET,SOCK_DGRAM,0); @@ -124,7 +148,7 @@ int main (int argc, char **argv) struct sockaddr_in adr_dest; int longueur_adr_dest = sizeof(adr_dest); - int longueur_message = BASE_SIZE; + int longueur_message = lg; memset((char *)& adr_dest, 0, sizeof(adr_dest)) ; @@ -143,7 +167,7 @@ int main (int argc, char **argv) for (int i = 0; i < nb_message; i++) { // Construction du message - construire_message(message, 'a' + (i % 26), BASE_SIZE); + construire_message(message, 'a' + (i % 26), lg); // Envoi du message @@ -160,7 +184,7 @@ int main (int argc, char **argv) struct sockaddr_in adr_locale; int longueur_adr_locale = sizeof(adr_locale); - int longueur_message = BASE_SIZE; + int longueur_message = lg; memset((char *)& adr_locale, 0, sizeof(adr_locale)) ; @@ -202,7 +226,7 @@ int main (int argc, char **argv) struct sockaddr_in adr_dest; int longueur_adr_dest = sizeof(adr_dest); - int longueur_message = BASE_SIZE; + int longueur_message = lg; memset((char *)& adr_dest, 0, sizeof(adr_dest)) ; @@ -229,7 +253,7 @@ int main (int argc, char **argv) // Envoie des messages for (int i = 0; i < nb_message; i++) { // Construction du message - construire_message(message, 'a' + (i % 26), BASE_SIZE); + construire_message(message, 'a' + (i % 26), lg); // Envoi du message write(sock,message,longueur_message); @@ -248,7 +272,7 @@ int main (int argc, char **argv) struct sockaddr_in adr_locale; socklen_t longueur_adr_locale = sizeof(adr_locale); - int longueur_message = BASE_SIZE; + int longueur_message = lg; memset((char *)& adr_locale, 0, sizeof(adr_locale)) ; @@ -280,10 +304,6 @@ int main (int argc, char **argv) } close(sock_bis); close(sock); - - - - } }