diff --git a/src/mictcp.c b/src/mictcp.c index 5218602..8c65e86 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -3,7 +3,8 @@ #include #include -#define TIMEOUT 10 +#define TIMEOUT 100 +#define SIZE 1000 /* * Permet de créer un socket entre l’application et MIC-TCP @@ -13,10 +14,22 @@ mic_tcp_pdu pdu; int PE,PA = 0; float lostpdu = 0.0; - float lostrate = 0.0; + float lostrate = 15.0; float pduemis =0.0; - mic_tcp_pdu ack; + int fenetre[SIZE]; + void init (int* tab,int size){ + for(int i=0;i= lostrate && test){ - while(count < max && test){ - count++; - printf("Count: %d \n", count); - if((sent=IP_send(pdu,sock.addr))==-1){ - printf("Erreur d'envoi du pdu"); - exit(-1); - } - test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + PE = (PE +1) %2; + + pduemis++; + test = (IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + + if (test){ + lostpdu++; + printf("Lost Pdu : %f\n",lostpdu); } - if(count == max) - exit(-1); - count = 0; - while(pdu.header.ack_num!=PE){ - count++; - if(count == max){exit(-1);} - printf("Paquet message perdu \n"); - - if((sent=IP_send(pdu,sock.addr))==-1){ - printf("Erreur d'envoi du pdu"); - exit(1); - } - test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + printf("Lost rate= %f \n",(lostpdu/pduemis)*100.0); + + if((lostpdu/pduemis)*100.0 >= lostrate && test){ while(count < max && test){ + count++; + printf("Count: %d \n", count); + if((sent=IP_send(pdu,sock.addr))==-1){ + printf("Erreur d'envoi du pdu"); + exit(-1); + } + test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + } + if(count == max) + exit(-1); + count = 0; + while(pdu.header.ack_num!=PE){ count++; if(count == max){exit(-1);} - if(IP_send(mem,sock.addr)==-1){ + printf("Paquet message perdu \n"); + + if((sent=IP_send(pdu,sock.addr))==-1){ printf("Erreur d'envoi du pdu"); exit(1); } - test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); - } - printf("Count : %d\n",count); - if(count == max) - exit(-1); - } + test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + while(count < max && test){ + count++; + if(count == max){exit(-1);} + if(IP_send(mem,sock.addr)==-1){ + printf("Erreur d'envoi du pdu"); + exit(1); + } + test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + } + printf("Count : %d\n",count); + if(count == max) + exit(-1); + } + } } + return sent; } @@ -258,78 +270,92 @@ int mic_tcp_close (int socket) void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) { printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); - printf("Paquet recu \n"); - printf("ACK NUM %d\n",pdu.header.seq_num); - mic_tcp_pdu ack; - - if(pdu.header.seq_num == PA){ - app_buffer_put(pdu.payload); - PA = (PA+1) %2; - }else{ - printf("Paquet Ack perdu\n"); - } - ack.header.ack=1; - ack.header.ack_num=PA; - ack.payload.data =""; - ack.payload.size=0; + 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){ + app_buffer_put(pdu.payload); + PA = (PA+1) %2; + }else{ + printf("Paquet Ack perdu\n"); + } + printf("avant send\n"); + ack.header.ack=1; + ack.header.ack_num=PA; + ack.payload.data=""; + ack.payload.size=0; + if (IP_send(ack,addr)==-1) + { + printf("Erreur d'envoi du pdu"); + exit(1); + } + printf("Ack envoyé \n"); + }else{ + printf("Paquet Ack perdu\n"); + } + ack.header.ack=1; + ack.header.ack_num=PA; + ack.payload.data =""; + ack.payload.size=0; 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); + 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);} + 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++; - if (count == 0) - printf("Paquet message perdu \n"); - if((sent=IP_send(sack,sock.addr))==-1){ + 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,TIMEOUT) ==-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,TIMEOUT) ==-1); - } - - printf("Count : %d\n",count); - if(count == max) - exit(-1); + test=(IP_recv(&paqu,&sock.addr,TIMEOUT) ==-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;