diff --git a/include/mictcp.h b/include/mictcp.h index 4a87e4d..cf1d252 100644 --- a/include/mictcp.h +++ b/include/mictcp.h @@ -72,7 +72,6 @@ typedef struct mic_tcp_header unsigned char ack; /* flag ACK (valeur 1 si activé et 0 si non) */ unsigned char fin; /* flag FIN (valeur 1 si activé et 0 si non) */ } mic_tcp_header; - /* * Structure d'un PDU MIC-TCP */ diff --git a/src/mictcp.c b/src/mictcp.c index 8c65e86..40cd9a9 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -3,8 +3,11 @@ #include #include -#define TIMEOUT 100 -#define SIZE 1000 +#define TIMEOUT 10 +#define TIMEOUT2 100 +#define SIZE 100 +#define LOST 10 +#define LOSTRATE "15" /* * Permet de créer un socket entre l’application et MIC-TCP @@ -16,7 +19,7 @@ float lostpdu = 0.0; float lostrate = 15.0; - float pduemis =0.0; + int pduemis =0; int fenetre[SIZE]; void init (int* tab,int size){ for(int i=0;i= lostrate && test){ + if(truc>= lostrate && test){ while(count < max && test){ count++; printf("Count: %d \n", count); @@ -272,7 +277,6 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); if (sock.state == CONNECTED){ printf("Paquet recu \n"); - printf("ACK NUM %d\n",pdu.header.ack); mic_tcp_pdu ack; if(pdu.header.seq_num == PA){ @@ -292,71 +296,57 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) exit(1); } printf("Ack envoyé \n"); - }else{ - printf("Paquet Ack perdu\n"); + }else{ + int test=0; + int sent= -1; + int max = 20; + int count = 0; + mic_tcp_pdu paqu; + while(paqu.header.syn != 1){ + test=(IP_recv(&paqu,&sock.addr,TIMEOUT) ==-1); + if(test){} + //printf("En attente\n"); } - ack.header.ack=1; - ack.header.ack_num=PA; - ack.payload.data =""; - ack.payload.size=0; + mic_tcp_pdu sack; + + sack.header.seq_num = PE; // Création du header et setup PA et PE + sack.header.ack_num = PA; + sack.header.syn= 1; + sack.header.ack=1; + sack.header.fin=0; + + sack.payload.data = pdu.payload.data; + sack.payload.size = sizeof(pdu.payload.data); - if (IP_send(ack,addr)==-1) - { - printf("Erreur d'envoi du pdu"); - exit(1); - } - printf("Ack envoyé \n"); - printf("Je me connecte\n"); - int test=0; - int sent= -1; - int max = 20; - int count = 0; - mic_tcp_pdu paqu; - while(paqu.header.syn != 1){ - test=(IP_recv(&paqu,&sock.addr,TIMEOUT) ==-1); - if(test){} - //printf("En attente\n"); - } - mic_tcp_pdu sack; - - sack.header.seq_num = PE; // Création du header et setup PA et PE - sack.header.ack_num = PA; - sack.header.syn= 1; - sack.header.ack=1; - sack.header.fin=0; - - sack.payload.data = pdu.payload.data; - sack.payload.size = sizeof(pdu.payload.data); - - while(paqu.header.ack != 1){ - - if(count == max){exit(-1);} - count++; - if (count == 0) - printf("Paquet message perdu \n"); - if((sent=IP_send(sack,sock.addr))==-1){ - printf("Erreur d'envoi du pdu"); - exit(1); - } - test=(IP_recv(&paqu,&sock.addr,TIMEOUT) ==-1); - while(count < max && test){ - count++; + while(paqu.header.ack != 1){ + if(count == max){exit(-1);} - if(IP_send(sack,sock.addr)==-1){ + count++; + if (count == 0) + printf("Paquet message perdu \n"); + if((sent=IP_send(sack,sock.addr))==-1){ printf("Erreur d'envoi du pdu"); exit(1); } - test=(IP_recv(&paqu,&sock.addr,TIMEOUT) ==-1); + test=(IP_recv(&paqu,&sock.addr,TIMEOUT2) ==-1); + while(count < max && test){ + count++; + if(count == max){exit(-1);} + if(IP_send(sack,sock.addr)==-1){ + printf("Erreur d'envoi du pdu"); + exit(1); + } + test=(IP_recv(&paqu,&sock.addr,TIMEOUT2) ==-1); + } + + printf("Count : %d\n",count); + if(count == max) + exit(-1); } + printf("Connected\n"); + pthread_cond_broadcast(&cond); + sock.state = CONNECTED; - printf("Count : %d\n",count); - if(count == max) - exit(-1); } - printf("Connected\n"); - pthread_cond_broadcast(&cond); - sock.state = CONNECTED; - - }