Fin de connexion. A nettoyer

This commit is contained in:
Newglear 2022-04-11 10:44:36 +02:00
parent e4e11c34e2
commit dcba7e7368
2 changed files with 33 additions and 29 deletions

View file

@ -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
*/

View file

@ -3,8 +3,11 @@
#include <mictcp.h>
#include <api/mictcp_core.h>
#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 lapplication 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<size;i++){
@ -24,11 +27,11 @@
}
}
float rate(int* tab, int size){
int s =0;
float s =0.0;
for(int i=0; i<size;i++){
s += tab[i];
s += (float)tab[i];
}
return (float)((s/SIZE)*100);
return ((s/(float)SIZE)*100.0);
}
pthread_mutex_t mutex= PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond= PTHREAD_COND_INITIALIZER;
@ -40,7 +43,7 @@ int mic_tcp_socket(start_mode sm)
printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n");
result = initialize_components(sm); /* Appel obligatoire */
sock.fd=result;
set_loss_rate(0);
set_loss_rate(LOST);
return result;
}
@ -67,9 +70,9 @@ int mic_tcp_bind(int socket, mic_tcp_sock_addr addr)
int mic_tcp_accept(int socket, mic_tcp_sock_addr* addr)
{
printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n");
printf("Je vais dormir\n");
//printf("Je vais dormir\n");
pthread_cond_wait(&cond,&mutex);
printf("Je suis réveillé\n");
//printf("Je suis réveillé\n");
sock.state = CONNECTED;
return 0;
@ -88,7 +91,7 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr)
mic_tcp_pdu ack;
int sent= -1;
int max = 20;
int max = 300;
int count = 0;
int test=0;
@ -97,26 +100,25 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr)
pdusyn.header.syn= 1;
pdusyn.header.ack=0;
pdusyn.header.fin=0;
char jpp[] = "";
memcpy(&(pdu.payload.data),&jpp,sizeof(jpp));
pdusyn.payload.data= LOSTRATE;
pdusyn.payload.size = 0;
pdu.header.ack = 0;
pdu.header.syn = 0;
printf("Test1\n");
while(pdu.header.syn != 1 && pdu.header.ack !=1){
count = 0;
while(pdu.header.syn != 1 && pdu.header.ack !=1){
if(count == max){return(-1);}
if (count != 0)
printf("Paquet message perdu \n");
count++;
printf("Test2\n");
if((sent=IP_send(pdusyn,addr))==-1){
printf("Erreur d'envoi du pdu\n");
exit(1);
}
test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1);
printf("Test2\n");
test=(IP_recv(&pdu,&sock.addr,TIMEOUT2) ==-1);
while(count < max && test){
@ -126,7 +128,7 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr)
printf("Erreur d'envoi du pdu");
return(1);
}
test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1);
test=(IP_recv(&pdu,&sock.addr,TIMEOUT2) ==-1);
}
printf("Count : %d\n",count);
if(count == max)
@ -147,6 +149,7 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr)
exit(1);
}
printf("Connected\n");
init(fenetre,SIZE);
sock.state=CONNECTED;
return 0;
}
@ -159,12 +162,12 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size)
{
printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n");
int sent= -1;
if(sock.state==CONNECTED){
int max = 20;
int count = 0;
int test;
pdu.header.syn = 0;
pdu.header.ack = 0;
pdu.header.fin = 0;
@ -174,7 +177,6 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size)
pdu.payload.size=mesg_size;
mic_tcp_pdu mem = pdu;
printf("%d\n",pdu.header.seq_num);
if((sent=IP_send(pdu,sock.addr))==-1){
printf("Erreur d'envoi du pdu");
exit(1);
@ -185,12 +187,16 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size)
test = (IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1);
if (test){
lostpdu++;
fenetre[pduemis%SIZE]=1;
printf("Lost Pdu : %f\n",lostpdu);
}
printf("Lost rate= %f \n",(lostpdu/pduemis)*100.0);
else{
fenetre[pduemis%SIZE]=0;
}
float truc =rate(fenetre,SIZE);
printf("Lost rate= %f \n",truc);
if((lostpdu/pduemis)*100.0 >= lostrate && test){
if(truc>= lostrate && test){
while(count < max && test){
count++;
printf("Count: %d \n", count);
@ -271,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){
@ -323,7 +328,7 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr)
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);}
@ -331,7 +336,7 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr)
printf("Erreur d'envoi du pdu");
exit(1);
}
test=(IP_recv(&paqu,&sock.addr,TIMEOUT) ==-1);
test=(IP_recv(&paqu,&sock.addr,TIMEOUT2) ==-1);
}
printf("Count : %d\n",count);