Connect fonctionne normalement. Fenetre à ajouter si possible

This commit is contained in:
Newglear 2022-04-11 09:10:17 +02:00
parent 1c6c75ddeb
commit e4e11c34e2

View file

@ -3,7 +3,8 @@
#include <mictcp.h> #include <mictcp.h>
#include <api/mictcp_core.h> #include <api/mictcp_core.h>
#define TIMEOUT 10 #define TIMEOUT 100
#define SIZE 1000
/* /*
* Permet de créer un socket entre lapplication et MIC-TCP * Permet de créer un socket entre lapplication et MIC-TCP
@ -13,10 +14,22 @@
mic_tcp_pdu pdu; mic_tcp_pdu pdu;
int PE,PA = 0; int PE,PA = 0;
float lostpdu = 0.0; float lostpdu = 0.0;
float lostrate = 0.0; float lostrate = 15.0;
float pduemis =0.0; float pduemis =0.0;
mic_tcp_pdu ack; int fenetre[SIZE];
void init (int* tab,int size){
for(int i=0;i<size;i++){
tab[i]=0;
}
}
float rate(int* tab, int size){
int s =0;
for(int i=0; i<size;i++){
s += tab[i];
}
return (float)((s/SIZE)*100);
}
pthread_mutex_t mutex= PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutex= PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond= PTHREAD_COND_INITIALIZER; pthread_cond_t cond= PTHREAD_COND_INITIALIZER;
@ -70,35 +83,31 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr)
{ {
printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n");
//Encpsulation SYN //Encpsulation SYN
mic_tcp_pdu pdusyn; mic_tcp_pdu pdusyn;
mic_tcp_pdu ack;
int sent= -1; int sent= -1;
int max = 20; int max = 20;
int count = 0; int count = 0;
int test=0; int test=0;
//syn.header.dest_port= ;
pdusyn.header.seq_num = PE; // Création du header et setup PA et PE pdusyn.header.seq_num = PE; // Création du header et setup PA et PE
pdusyn.header.ack_num = PA; pdusyn.header.ack_num = PA;
pdusyn.header.syn= 1; pdusyn.header.syn= 1;
pdusyn.header.ack=0; pdusyn.header.ack=0;
pdusyn.header.fin=0; pdusyn.header.fin=0;
//int lr = (int)lostrate;
//itoa(lostrate,pdu.payload.data,10); //Encapsulation du payload vide
char jpp[] = ""; char jpp[] = "";
memcpy(&(pdu.payload.data),&jpp,sizeof(jpp)); memcpy(&(pdu.payload.data),&jpp,sizeof(jpp));
pdusyn.payload.size = 0; pdusyn.payload.size = 0;
pdu.header.ack = 0; pdu.header.ack = 0;
pdu.header.syn = 0; pdu.header.syn = 0;
printf("Test1\n");
while(pdu.header.syn != 1 && pdu.header.ack !=1){ while(pdu.header.syn != 1 && pdu.header.ack !=1){
count = 0;
if(count == max){return(-1);} if(count == max){return(-1);}
if (count != 0) if (count != 0)
printf("Paquet message perdu \n"); printf("Paquet message perdu \n");
@ -107,8 +116,8 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr)
printf("Erreur d'envoi du pdu\n"); printf("Erreur d'envoi du pdu\n");
exit(1); exit(1);
} }
test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1);
test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1);
while(count < max && test){ while(count < max && test){
count++; count++;
@ -123,7 +132,15 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr)
if(count == max) if(count == max)
exit(-1); exit(-1);
} }
ack.header.ack = 1; printf("Test2\n");
ack.header.ack = 1;
ack.header.ack_num= PA;
ack.header.seq_num=PE;
ack.header.syn=0;
ack.header.fin=0;
ack.payload.data="";
ack.payload.size=0;
if(IP_send(ack,sock.addr)==-1){ if(IP_send(ack,sock.addr)==-1){
printf("Erreur d'envoi du pdu"); printf("Erreur d'envoi du pdu");
@ -136,87 +153,82 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr)
/* /*
* Permet de réclamer lenvoi dune donnée applicative * Permet de réclamer lenvoi dune donnée applicative
* Retourne la taille des données envoyées, et -1 en cas d'erreur * Retourne la taille des données envoyées, et -1 en cas d'erreur
*/ */
int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) int mic_tcp_send (int mic_sock, char* mesg, int mesg_size)
{ {
int sent= -1;
int max = 20;
int count = 0;
int test;
printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n");
int sent= -1;
pdu.header.syn = 0;
pdu.header.ack = 0;
pdu.header.fin = 0;
pdu.header.seq_num= PE;
pdu.payload.data = mesg;
pdu.payload.size=mesg_size;
mic_tcp_pdu mem = pdu; if(sock.state==CONNECTED){
printf("%d\n",pdu.header.seq_num); int max = 20;
if((sent=IP_send(pdu,sock.addr))==-1){ int count = 0;
printf("Erreur d'envoi du pdu"); int test;
exit(1);
}
PE = (PE +1) %2;
pduemis++;
test = (IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1);
pdu.header.syn = 0;
pdu.header.ack = 0;
pdu.header.fin = 0;
pdu.header.seq_num= PE;
pdu.payload.data = mesg;
pdu.payload.size=mesg_size;
if(pdu.header.ack ==1 ){ mic_tcp_pdu mem = pdu;
if(IP_send(ack,sock.addr)==-1){ printf("%d\n",pdu.header.seq_num);
if((sent=IP_send(pdu,sock.addr))==-1){
printf("Erreur d'envoi du pdu"); printf("Erreur d'envoi du pdu");
exit(1); exit(1);
} }
} PE = (PE +1) %2;
if (test){ pduemis++;
lostpdu++; test = (IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1);
printf("Lost Pdu : %f\n",lostpdu);
} if (test){
printf("Lost rate= %f \n",(lostpdu/pduemis)*100.0); lostpdu++;
printf("Lost Pdu : %f\n",lostpdu);
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) printf("Lost rate= %f \n",(lostpdu/pduemis)*100.0);
exit(-1);
count = 0; if((lostpdu/pduemis)*100.0 >= lostrate && test){
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);
while(count < max && 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++; count++;
if(count == max){exit(-1);} 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"); printf("Erreur d'envoi du pdu");
exit(1); exit(1);
} }
test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1);
} while(count < max && test){
printf("Count : %d\n",count); count++;
if(count == max) if(count == max){exit(-1);}
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; return sent;
} }
@ -271,6 +283,8 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr)
printf("avant send\n"); printf("avant send\n");
ack.header.ack=1; ack.header.ack=1;
ack.header.ack_num=PA; ack.header.ack_num=PA;
ack.payload.data="";
ack.payload.size=0;
if (IP_send(ack,addr)==-1) if (IP_send(ack,addr)==-1)
{ {
printf("Erreur d'envoi du pdu"); printf("Erreur d'envoi du pdu");