From f24472df74bd3c88f323b3b524ad9ce2bf7c8b0a Mon Sep 17 00:00:00 2001 From: g_robert Date: Fri, 18 Mar 2022 09:43:49 +0100 Subject: [PATCH 01/18] =?UTF-8?q?V1=20impl=C3=A9ment=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/mictcp.h | 2 +- src/mictcp.c | 44 +++++++++++++++++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/include/mictcp.h b/include/mictcp.h index 36a4d38..4a87e4d 100644 --- a/include/mictcp.h +++ b/include/mictcp.h @@ -21,7 +21,7 @@ */ typedef enum protocol_state { - IDLE, CLOSED, SYN_SENT, SYN_RECEIVED, ESTABLISHED, CLOSING + IDLE, CLOSED, SYN_SENT, SYN_RECEIVED, CONNECTED, CLOSING } protocol_state; /* diff --git a/src/mictcp.c b/src/mictcp.c index b94107c..8afcb7c 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -5,13 +5,16 @@ * Permet de créer un socket entre l’application et MIC-TCP * Retourne le descripteur du socket ou bien -1 en cas d'erreur */ + mic_tcp_sock sock; + mic_tcp_pdu pdu; + int mic_tcp_socket(start_mode sm) { - int result = -1; + int result=-1; printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); result = initialize_components(sm); /* Appel obligatoire */ + sock.fd=result; set_loss_rate(0); - return result; } @@ -21,8 +24,14 @@ int mic_tcp_socket(start_mode sm) */ int mic_tcp_bind(int socket, mic_tcp_sock_addr addr) { - printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); - return -1; + printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); + if(sock.fd == socket){ + sock.addr=addr; + sock.state= IDLE; + return 0; + }else { + return -1; + } } /* @@ -32,7 +41,8 @@ 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"); - return -1; + sock.state=CONNECTED; + return 0; } /* @@ -42,7 +52,8 @@ int mic_tcp_accept(int socket, mic_tcp_sock_addr* addr) int mic_tcp_connect(int socket, mic_tcp_sock_addr addr) { printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); - return -1; + sock.state=CONNECTED; + return 0; } /* @@ -52,7 +63,16 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr) int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) { printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); - return -1; + + pdu.header.syn = 0; + pdu.header.ack = 0; + pdu.header.fin = 0; + + pdu.payload.data = mesg; + pdu.payload.size=mesg_size; + + + return IP_send(pdu,sock.addr); } /* @@ -64,7 +84,9 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) int mic_tcp_recv (int socket, char* mesg, int max_mesg_size) { printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); - return -1; + pdu.payload.data=mesg; + pdu.payload.size=max_mesg_size; + return app_buffer_get(pdu.payload); } /* @@ -75,7 +97,8 @@ int mic_tcp_recv (int socket, char* mesg, int max_mesg_size) int mic_tcp_close (int socket) { printf("[MIC-TCP] Appel de la fonction : "); printf(__FUNCTION__); printf("\n"); - return -1; + sock.state=CLOSED; + return 0; } /* @@ -87,4 +110,7 @@ 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"); + return app_buffer_put(pdu.payload); + + } From 75b32735c416a0ef6575a07854af4e4bb38e4dc0 Mon Sep 17 00:00:00 2001 From: Newglear Date: Fri, 18 Mar 2022 10:46:40 +0100 Subject: [PATCH 02/18] =?UTF-8?q?V2=20|=20=C3=A0=20lanccer=20et=20v=C3=A9r?= =?UTF-8?q?ififer=20=20que=20tout=20finctionne=20avec=20les=20pertes=20et?= =?UTF-8?q?=20les=20reprises=20de=20pertes.=20Faudra=20aussi=20rajouter=20?= =?UTF-8?q?des=20msgs=20de=20debug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mictcp.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 3 deletions(-) diff --git a/src/mictcp.c b/src/mictcp.c index 8afcb7c..43050f4 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -1,5 +1,6 @@ #include #include +#define TIMEOUT 5000 /* * Permet de créer un socket entre l’application et MIC-TCP @@ -7,6 +8,7 @@ */ mic_tcp_sock sock; mic_tcp_pdu pdu; + int PE,PA = 0; int mic_tcp_socket(start_mode sm) { @@ -52,6 +54,32 @@ int mic_tcp_accept(int socket, mic_tcp_sock_addr* addr) int mic_tcp_connect(int socket, mic_tcp_sock_addr addr) { printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); + //Encpsulation SYN + /* + mic_tcp_pdu syn; + //syn.header.dest_port= ; + + syn.header.seq_num = PE; // Création du header et setup PA et PE + syn.header.ack_num = PA; + syn.header.syn= 1; + syn.header.ack=0; + syn.header.fin=0; + + syn.payload.data = ""; //Encapsulation du payload vide + syn.payload.size = 0; + + if(IP_send(pdu,sock.addr)==-1){ + printf("Erreur d'envoi de SYN"); + exit(1); + } + + if(IP_recv(&pdu,&sock.addr,TIMEOUT)==-1){ + + } + + */ + + sock.state=CONNECTED; return 0; } @@ -63,6 +91,7 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr) int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) { printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); + pdu.header.syn = 0; pdu.header.ack = 0; @@ -71,8 +100,40 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) pdu.payload.data = mesg; pdu.payload.size=mesg_size; + mic_tcp_pdu mem = pdu; - return IP_send(pdu,sock.addr); + if(IP_send(pdu,sock.addr)==-1){ + printf("Erreur d'envoi du pdu"); + exit(1); + } + PE = (PE +1) %2; + int test = (IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + + while(test){ + if(IP_send(pdu,sock.addr)==-1){ + printf("Erreur d'envoi du pdu"); + exit(1); + } + test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + } + + if(pdu.header.ack_num==PE){ + PE = (PE-1)%2; + if(IP_send(mem,sock.addr)==-1){ + printf("Erreur d'envoi du pdu"); + exit(1); + } + PE = (PE +1) %2; + test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + while(test){ + if(IP_send(mem,sock.addr)==-1){ + printf("Erreur d'envoi du pdu"); + exit(1); + } + test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + } + } + return 0; } /* @@ -84,6 +145,7 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) int mic_tcp_recv (int socket, char* mesg, int max_mesg_size) { printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); + pdu.payload.data=mesg; pdu.payload.size=max_mesg_size; return app_buffer_get(pdu.payload); @@ -109,8 +171,20 @@ int mic_tcp_close (int socket) */ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) { + mic_tcp_pdu ack; printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); - return app_buffer_put(pdu.payload); - + if(pdu.header.ack_num == PA){ + PA= (PA+1) %2; + } + app_buffer_put(pdu.payload); + ack.header.ack=1; + ack.header.ack_num=PA; + if (IP_send(ack,addr)==-1) + { + printf("Erreur d'envoi du pdu"); + exit(1); + } + + } From 36bdb2b66dbf0709bd4105a49cb293ba7ef44ed7 Mon Sep 17 00:00:00 2001 From: g_robert Date: Mon, 21 Mar 2022 08:24:36 +0100 Subject: [PATCH 03/18] Debug de la v2 --- include/.mictcp.h.swp | Bin 0 -> 4096 bytes src/mictcp.c | 12 ++++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 include/.mictcp.h.swp diff --git a/include/.mictcp.h.swp b/include/.mictcp.h.swp new file mode 100644 index 0000000000000000000000000000000000000000..8d27ee8be232129db7bba13c1ee677218408c6b9 GIT binary patch literal 4096 zcmYc?2=nw+u+TGP00IF9h952_N&mLktlY`Vz>pqal%JGZR05L12Qu@D6LpOYjEs%& zsbXNLgBhrwo0(jaT%ezsmz-0Yk_zSOW#HF7Dmxkiqai?12=Fo(8yOmaj8IlmR1g*l lrO32V&7&bO8UmvsFd71*Aut*OqaiRF0;3@?8UjNr1OR5997X^D literal 0 HcmV?d00001 diff --git a/src/mictcp.c b/src/mictcp.c index 43050f4..8c4eab1 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -1,6 +1,6 @@ #include #include -#define TIMEOUT 5000 +#define TIMEOUT 1000 /* * Permet de créer un socket entre l’application et MIC-TCP @@ -16,7 +16,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(5); return result; } @@ -96,6 +96,7 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) 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; @@ -117,7 +118,8 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); } - if(pdu.header.ack_num==PE){ + if(pdu.header.ack_num==PE){ + printf("Paquet message perdu \n"); PE = (PE-1)%2; if(IP_send(mem,sock.addr)==-1){ printf("Erreur d'envoi du pdu"); @@ -173,8 +175,10 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) { mic_tcp_pdu ack; printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); - if(pdu.header.ack_num == PA){ + if(pdu.header.seq_num != PA){ PA= (PA+1) %2; + }else{ + printf("Paquet Ack perdu\n"); } app_buffer_put(pdu.payload); ack.header.ack=1; From b21bee3494e947715e6928c338f89c91dc99b96c Mon Sep 17 00:00:00 2001 From: g_robert Date: Mon, 21 Mar 2022 09:10:51 +0100 Subject: [PATCH 04/18] Ajout de compteur de retransmission et correction de PE et PA --- .vscode/settings.json | 7 +++++ src/mictcp.c | 59 ++++++++++++++++++++++++++++--------------- 2 files changed, 45 insertions(+), 21 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3556bc5 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "files.associations": { + "bitset": "c", + "chrono": "c", + "algorithm": "c" + } +} \ No newline at end of file diff --git a/src/mictcp.c b/src/mictcp.c index 8c4eab1..cdbc690 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -1,6 +1,6 @@ #include #include -#define TIMEOUT 1000 +#define TIMEOUT 500 /* * Permet de créer un socket entre l’application et MIC-TCP @@ -9,14 +9,16 @@ mic_tcp_sock sock; mic_tcp_pdu pdu; int PE,PA = 0; - + int lostpdu = 0; + int lostrate = 10; + // lost sur int mic_tcp_socket(start_mode sm) { int result=-1; printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); result = initialize_components(sm); /* Appel obligatoire */ sock.fd=result; - set_loss_rate(5); + set_loss_rate(10); return result; } @@ -90,6 +92,9 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr) */ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) { + int sent= 0; + int max = 20; + int count = 0; printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); @@ -103,39 +108,50 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) mic_tcp_pdu mem = pdu; - if(IP_send(pdu,sock.addr)==-1){ + if((sent=IP_send(pdu,sock.addr))==-1){ printf("Erreur d'envoi du pdu"); exit(1); } PE = (PE +1) %2; int test = (IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); - while(test){ - if(IP_send(pdu,sock.addr)==-1){ - printf("Erreur d'envoi du pdu"); - exit(1); - } - test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); - } - - if(pdu.header.ack_num==PE){ - printf("Paquet message perdu \n"); - PE = (PE-1)%2; - if(IP_send(mem,sock.addr)==-1){ + while(test && count < max){ + 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){break;} + printf("Paquet message perdu \n"); + + if((sent=IP_send(pdu,sock.addr))==-1){ printf("Erreur d'envoi du pdu"); exit(1); } - PE = (PE +1) %2; test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); while(test){ + count++; + if(count == max){break;} if(IP_send(mem,sock.addr)==-1){ printf("Erreur d'envoi du pdu"); exit(1); } test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + } - } - return 0; + printf("Count : %d\n",count); + + } + return sent; } /* @@ -175,12 +191,13 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) { mic_tcp_pdu ack; printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); - if(pdu.header.seq_num != PA){ + if(pdu.header.seq_num == PA){ + app_buffer_put(pdu.payload); PA= (PA+1) %2; }else{ printf("Paquet Ack perdu\n"); } - app_buffer_put(pdu.payload); + ack.header.ack=1; ack.header.ack_num=PA; if (IP_send(ack,addr)==-1) From 4ea17a3053bf343c93589f893d079793c862009f Mon Sep 17 00:00:00 2001 From: g_robert Date: Mon, 21 Mar 2022 10:47:59 +0100 Subject: [PATCH 05/18] V3 fini let's go --- src/mictcp.c | 86 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 37 deletions(-) diff --git a/src/mictcp.c b/src/mictcp.c index cdbc690..01c2903 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -1,6 +1,8 @@ +// V3 avec vrai pourcentage + #include #include -#define TIMEOUT 500 +#define TIMEOUT 100 /* * Permet de créer un socket entre l’application et MIC-TCP @@ -9,8 +11,9 @@ mic_tcp_sock sock; mic_tcp_pdu pdu; int PE,PA = 0; - int lostpdu = 0; - int lostrate = 10; + float lostpdu = 0; + float lostrate = 10.0; + float pduemis =1; // lost sur int mic_tcp_socket(start_mode sm) { @@ -18,7 +21,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(10); + set_loss_rate(5); return result; } @@ -95,9 +98,9 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) int sent= 0; int max = 20; int count = 0; - printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); - + printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); + pdu.header.syn = 0; pdu.header.ack = 0; pdu.header.fin = 0; @@ -113,44 +116,53 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) exit(1); } PE = (PE +1) %2; + pduemis++; int test = (IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); - - while(test && count < max){ - 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){break;} - printf("Paquet message perdu \n"); - - if((sent=IP_send(pdu,sock.addr))==-1){ - printf("Erreur d'envoi du pdu"); - exit(1); + if (test){ + lostpdu++; + printf("Lost Pdu : %f\n",lostpdu); + } + printf("Lost rate= %f \n",(lostpdu/pduemis)*100.0); + + if((lostpdu/pduemis)*100 > 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); } - test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); - while(test){ + if(count == max) + exit(-1); + count = 0; + while(pdu.header.ack_num!=PE){ count++; - if(count == max){break;} - if(IP_send(mem,sock.addr)==-1){ + 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("Count : %d\n",count); - - } + 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; } From c72daaf2ec450dbe40d97282735ad4cc02be9b82 Mon Sep 17 00:00:00 2001 From: Newg <92101871+Newglear@users.noreply.github.com> Date: Mon, 21 Mar 2022 11:19:34 +0100 Subject: [PATCH 06/18] Update Timeout <3 --- src/mictcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mictcp.c b/src/mictcp.c index 01c2903..d4a9a90 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -2,7 +2,7 @@ #include #include -#define TIMEOUT 100 +#define TIMEOUT 10 /* * Permet de créer un socket entre l’application et MIC-TCP From cea5d0bdab751acb83e047fea3af889bf39d08b3 Mon Sep 17 00:00:00 2001 From: Newglear Date: Thu, 24 Mar 2022 14:51:52 +0100 Subject: [PATCH 07/18] fix --- src/mictcp.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/mictcp.c b/src/mictcp.c index 01c2903..429cadf 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -11,9 +11,9 @@ mic_tcp_sock sock; mic_tcp_pdu pdu; int PE,PA = 0; - float lostpdu = 0; - float lostrate = 10.0; - float pduemis =1; + float lostpdu = 0.0; + float lostrate = 70.0; + float pduemis =1.0; // lost sur int mic_tcp_socket(start_mode sm) { @@ -21,7 +21,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(5); + set_loss_rate(10); return result; } @@ -125,7 +125,7 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) } printf("Lost rate= %f \n",(lostpdu/pduemis)*100.0); - if((lostpdu/pduemis)*100 > lostrate && test){ + if((lostpdu/pduemis)*100.0 > lostrate && test){ while(count < max && test){ count++; printf("Count: %d \n", count); From 5e1c7e4f9439be479c0762b00f32d39afc09a046 Mon Sep 17 00:00:00 2001 From: Newglear Date: Thu, 24 Mar 2022 15:11:01 +0100 Subject: [PATCH 08/18] Essai de correction non concluante --- src/mictcp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mictcp.c b/src/mictcp.c index 14f8d75..c865fbf 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -12,7 +12,7 @@ mic_tcp_pdu pdu; int PE,PA = 0; float lostpdu = 0.0; - float lostrate = 70.0; + float lostrate = 25.0; float pduemis =1.0; // lost sur int mic_tcp_socket(start_mode sm) @@ -21,7 +21,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(10); + set_loss_rate(5); return result; } @@ -95,7 +95,7 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr) */ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) { - int sent= 0; + int sent= -1; int max = 20; int count = 0; From b8abbb726a947e2ef2e88bbadf9b24e1b67c65f1 Mon Sep 17 00:00:00 2001 From: Newglear Date: Thu, 24 Mar 2022 15:26:04 +0100 Subject: [PATCH 09/18] =?UTF-8?q?Je=20sais=20pas=20si=20=C3=A7a=20marche?= =?UTF-8?q?=20j'ai=20fait=20des=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mictcp.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mictcp.c b/src/mictcp.c index c865fbf..8ac36f2 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -12,8 +12,8 @@ mic_tcp_pdu pdu; int PE,PA = 0; float lostpdu = 0.0; - float lostrate = 25.0; - float pduemis =1.0; + float lostrate = 15.0; + float pduemis =0.0; // lost sur int mic_tcp_socket(start_mode sm) { @@ -21,7 +21,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(5); + set_loss_rate(25); return result; } @@ -205,7 +205,7 @@ 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(pdu.header.seq_num == PA){ app_buffer_put(pdu.payload); - PA= (PA+1) %2; + PA = (PA+1) %2; }else{ printf("Paquet Ack perdu\n"); } From 7a2878e315920dbc64792d1d9f5bab8c4edbf6b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9onie?= Date: Wed, 6 Apr 2022 15:32:40 +0200 Subject: [PATCH 10/18] test --- src/mictcp.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mictcp.c b/src/mictcp.c index 8ac36f2..9740e24 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -172,6 +172,7 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) * Retourne le nombre d’octets lu ou bien -1 en cas d’erreur * NB : cette fonction fait appel à la fonction app_buffer_get() */ + //test commentaire int mic_tcp_recv (int socket, char* mesg, int max_mesg_size) { printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); From aba9fd19a58e40349993b10935b9455fa58b0503 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9onie?= Date: Wed, 6 Apr 2022 15:57:05 +0200 Subject: [PATCH 11/18] test undo --- src/mictcp.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mictcp.c b/src/mictcp.c index 9740e24..8ac36f2 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -172,7 +172,6 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) * Retourne le nombre d’octets lu ou bien -1 en cas d’erreur * NB : cette fonction fait appel à la fonction app_buffer_get() */ - //test commentaire int mic_tcp_recv (int socket, char* mesg, int max_mesg_size) { printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); From 48472bac027854e026a3a52afbb29527aaf89b16 Mon Sep 17 00:00:00 2001 From: Newglear Date: Wed, 6 Apr 2022 17:22:15 +0200 Subject: [PATCH 12/18] ajout connexion --- src/api/mictcp_core.c | 4 +- src/mictcp.c | 202 ++++++++++++++++++++++++++++++++---------- 2 files changed, 157 insertions(+), 49 deletions(-) diff --git a/src/api/mictcp_core.c b/src/api/mictcp_core.c index 0a1136d..0c25c63 100644 --- a/src/api/mictcp_core.c +++ b/src/api/mictcp_core.c @@ -105,9 +105,7 @@ int IP_send(mic_tcp_pdu pk, mic_tcp_sock_addr addr) } else { mic_tcp_payload tmp = get_full_stream(pk); int sent_size = mic_tcp_core_send(tmp); - free (tmp.data); - /* Correct the sent size */ result = (sent_size == -1) ? -1 : sent_size - API_HD_Size; } @@ -170,10 +168,10 @@ mic_tcp_payload get_full_stream(mic_tcp_pdu pk) mic_tcp_payload tmp; tmp.size = API_HD_Size + pk.payload.size; tmp.data = malloc (tmp.size); - memcpy (tmp.data, &pk.header, API_HD_Size); memcpy (tmp.data + API_HD_Size, pk.payload.data, pk.payload.size); + return tmp; } diff --git a/src/mictcp.c b/src/mictcp.c index 8ac36f2..74ab72a 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -2,6 +2,7 @@ #include #include + #define TIMEOUT 10 /* @@ -12,17 +13,22 @@ mic_tcp_pdu pdu; int PE,PA = 0; float lostpdu = 0.0; - float lostrate = 15.0; + float lostrate = 0.0; + float pduemis =0.0; - // lost sur + mic_tcp_pdu ack; + pthread_mutex_t mutex= PTHREAD_MUTEX_INITIALIZER; + pthread_cond_t cond= PTHREAD_COND_INITIALIZER; + + int mic_tcp_socket(start_mode sm) { int result=-1; - printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); - result = initialize_components(sm); /* Appel obligatoire */ - sock.fd=result; - set_loss_rate(25); - return result; + printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); + result = initialize_components(sm); /* Appel obligatoire */ + sock.fd=result; + set_loss_rate(0); + return result; } /* @@ -48,7 +54,11 @@ 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"); - sock.state=CONNECTED; + printf("Je vais dormir\n"); + pthread_cond_wait(&cond,&mutex); + printf("Je suis réveillé\n"); + sock.state = CONNECTED; + return 0; } @@ -60,31 +70,66 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr) { printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); //Encpsulation SYN - /* - mic_tcp_pdu syn; + + mic_tcp_pdu pdusyn; + + int sent= -1; + int max = 20; + int count = 0; + int test=0; //syn.header.dest_port= ; - syn.header.seq_num = PE; // Création du header et setup PA et PE - syn.header.ack_num = PA; - syn.header.syn= 1; - syn.header.ack=0; - syn.header.fin=0; + pdusyn.header.seq_num = PE; // Création du header et setup PA et PE + pdusyn.header.ack_num = PA; + pdusyn.header.syn= 1; + pdusyn.header.ack=0; + pdusyn.header.fin=0; + //int lr = (int)lostrate; + //itoa(lostrate,pdu.payload.data,10); //Encapsulation du payload vide - syn.payload.data = ""; //Encapsulation du payload vide - syn.payload.size = 0; + char jpp[] = ""; + + memcpy(&(pdu.payload.data),&jpp,sizeof(jpp)); - if(IP_send(pdu,sock.addr)==-1){ - printf("Erreur d'envoi de SYN"); + pdusyn.payload.size = 0; + + + pdu.header.ack = 0; + pdu.header.syn = 0; + + while(pdu.header.syn != 1 && pdu.header.ack !=1){ + + if(count == max){return(-1);} + if (count != 0) + printf("Paquet message perdu \n"); + count++; + if((sent=IP_send(pdusyn,addr))==-1){ + printf("Erreur d'envoi du pdu\n"); + exit(1); + } + + test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + + while(count < max && test){ + count++; + if(count == max){return(-1);} + if(IP_send(pdusyn,sock.addr)==-1){ + printf("Erreur d'envoi du pdu"); + return(1); + } + test=(IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + } + printf("Count : %d\n",count); + if(count == max) + exit(-1); + } + ack.header.ack = 1; + + if(IP_send(ack,sock.addr)==-1){ + printf("Erreur d'envoi du pdu"); exit(1); } - - if(IP_recv(&pdu,&sock.addr,TIMEOUT)==-1){ - - } - - */ - - + printf("Connected\n"); sock.state=CONNECTED; return 0; } @@ -98,6 +143,7 @@ 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"); @@ -110,14 +156,23 @@ 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); } PE = (PE +1) %2; + pduemis++; - int test = (IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + test = (IP_recv(&pdu,&sock.addr,TIMEOUT) ==-1); + + + if(pdu.header.ack ==1 ){ + if(IP_send(ack,sock.addr)==-1){ + printf("Erreur d'envoi du pdu"); + exit(1); + } + } if (test){ lostpdu++; @@ -125,7 +180,7 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) } printf("Lost rate= %f \n",(lostpdu/pduemis)*100.0); - if((lostpdu/pduemis)*100.0 > lostrate && test){ + if((lostpdu/pduemis)*100.0 >= lostrate && test){ while(count < max && test){ count++; printf("Count: %d \n", count); @@ -201,23 +256,78 @@ int mic_tcp_close (int socket) */ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) { - mic_tcp_pdu ack; printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); - if(pdu.header.seq_num == PA){ - app_buffer_put(pdu.payload); - PA = (PA+1) %2; + 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"); + } + + ack.header.ack=1; + ack.header.ack_num=PA; + 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; - if (IP_send(ack,addr)==-1) - { - printf("Erreur d'envoi du pdu"); - exit(1); - } - - + 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++; + 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); + } + printf("Connected\n"); + pthread_cond_broadcast(&cond); + sock.state = CONNECTED; + + } + } From 1c6c75ddeb2468d405e1ccbd15c89771a8871a83 Mon Sep 17 00:00:00 2001 From: Newglear Date: Wed, 6 Apr 2022 17:28:49 +0200 Subject: [PATCH 13/18] Ajout connexion --- src/mictcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mictcp.c b/src/mictcp.c index 74ab72a..fe91abf 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -268,7 +268,7 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) }else{ printf("Paquet Ack perdu\n"); } - + printf("avant send\n"); ack.header.ack=1; ack.header.ack_num=PA; if (IP_send(ack,addr)==-1) From 8275deb66eb3e12cd3e4825ed77e67eb725d3620 Mon Sep 17 00:00:00 2001 From: Newglear Date: Wed, 6 Apr 2022 17:45:26 +0200 Subject: [PATCH 14/18] debug on en peut plus --- src/mictcp.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/mictcp.c b/src/mictcp.c index fe91abf..08a499e 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -54,9 +54,10 @@ 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"); pthread_cond_wait(&cond,&mutex); - printf("Je suis réveillé\n"); + printf("Je suis réveillé\n");*/ sock.state = CONNECTED; return 0; @@ -70,7 +71,7 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr) { printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); //Encpsulation SYN - + /* mic_tcp_pdu pdusyn; int sent= -1; @@ -128,7 +129,7 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr) if(IP_send(ack,sock.addr)==-1){ printf("Erreur d'envoi du pdu"); exit(1); - } + }*/ printf("Connected\n"); sock.state=CONNECTED; return 0; @@ -257,6 +258,7 @@ 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"); + sock.state = CONNECTED; if (sock.state == CONNECTED){ printf("Paquet recu \n"); printf("ACK NUM %d\n",pdu.header.ack); From 4406108f8ab25224f315bf10ff2601b29ebdc3a8 Mon Sep 17 00:00:00 2001 From: Newglear Date: Wed, 6 Apr 2022 18:09:16 +0200 Subject: [PATCH 15/18] =?UTF-8?q?Connexion=20comment=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mictcp.c | 49 +++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/src/mictcp.c b/src/mictcp.c index 08a499e..5218602 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -157,7 +157,7 @@ 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); + //printf("%d\n",pdu.header.seq_num); if((sent=IP_send(pdu,sock.addr))==-1){ printf("Erreur d'envoi du pdu"); exit(1); @@ -258,28 +258,29 @@ 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"); - sock.state = CONNECTED; - 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; - if (IP_send(ack,addr)==-1) - { - printf("Erreur d'envoi du pdu"); - exit(1); - } - printf("Ack envoyé \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 (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; @@ -328,8 +329,8 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) } printf("Connected\n"); pthread_cond_broadcast(&cond); - sock.state = CONNECTED; + sock.state = CONNECTED;*/ - } + } From d79d9acf4c5157ce9cd48676cf25ecf7058fdbf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9onie?= Date: Mon, 11 Apr 2022 01:34:59 +0200 Subject: [PATCH 16/18] ajouts quelques commentaires/relecture --- src/mictcp.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/mictcp.c b/src/mictcp.c index 5218602..0047400 100644 --- a/src/mictcp.c +++ b/src/mictcp.c @@ -23,6 +23,7 @@ int mic_tcp_socket(start_mode sm) { + //ajouter return -1 en cas d'erreur int result=-1; printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); result = initialize_components(sm); /* Appel obligatoire */ @@ -58,9 +59,16 @@ int mic_tcp_accept(int socket, mic_tcp_sock_addr* addr) printf("Je vais dormir\n"); pthread_cond_wait(&cond,&mutex); printf("Je suis réveillé\n");*/ - sock.state = CONNECTED; - return 0; + //retourne 0 si sock.state = established, -1 sinon + if (sock.fd == socket){ + sock.state == CONNECTED; + return 0; + } else { + return -1; + } + + } /* @@ -130,6 +138,9 @@ int mic_tcp_connect(int socket, mic_tcp_sock_addr addr) printf("Erreur d'envoi du pdu"); exit(1); }*/ + + //se servir de addr et sock.addr + refaire condition pour avoir 0 ou -1 et c'est tout ?? + printf("Connected\n"); sock.state=CONNECTED; return 0; @@ -147,17 +158,21 @@ int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) int test; printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); - + + //construction pdu pdu.header.syn = 0; pdu.header.ack = 0; pdu.header.fin = 0; pdu.header.seq_num= PE; + //payload pdu.payload.data = mesg; pdu.payload.size=mesg_size; mic_tcp_pdu mem = pdu; //printf("%d\n",pdu.header.seq_num); + + //envoi du pdu if((sent=IP_send(pdu,sock.addr))==-1){ printf("Erreur d'envoi du pdu"); exit(1); @@ -235,6 +250,7 @@ int mic_tcp_recv (int socket, char* mesg, int max_mesg_size) pdu.payload.data=mesg; pdu.payload.size=max_mesg_size; return app_buffer_get(pdu.payload); + //prendre en compte le cas d'erreur } /* @@ -247,6 +263,7 @@ int mic_tcp_close (int socket) printf("[MIC-TCP] Appel de la fonction : "); printf(__FUNCTION__); printf("\n"); sock.state=CLOSED; return 0; + //faire cas -1 / 0 } /* @@ -260,6 +277,7 @@ 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){ @@ -268,8 +286,14 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) }else{ printf("Paquet Ack perdu\n"); } + + //construction pdu ack ack.header.ack=1; ack.header.ack_num=PA; + ack.header.fin=0; + ack.header.syn=0; + //init source port, dest port ?? + ack.payload.data =""; ack.payload.size=0; From e4e11c34e27282a4e08eed43889ce0c86024a93b Mon Sep 17 00:00:00 2001 From: Newglear Date: Mon, 11 Apr 2022 09:10:17 +0200 Subject: [PATCH 17/18] =?UTF-8?q?Connect=20fonctionne=20normalement.=20Fen?= =?UTF-8?q?etre=20=C3=A0=20ajouter=20si=20possible?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mictcp.c | 168 ++++++++++++++++++++++++++++----------------------- 1 file changed, 91 insertions(+), 77 deletions(-) diff --git a/src/mictcp.c b/src/mictcp.c index fe91abf..4c48a88 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; } @@ -271,6 +283,8 @@ void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) 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"); From dcba7e736856889806ccc87bb3005182d9154f73 Mon Sep 17 00:00:00 2001 From: Newglear Date: Mon, 11 Apr 2022 10:44:36 +0200 Subject: [PATCH 18/18] Fin de connexion. A nettoyer --- include/mictcp.h | 1 - src/mictcp.c | 61 ++++++++++++++++++++++++++---------------------- 2 files changed, 33 insertions(+), 29 deletions(-) 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 4c48a88..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); @@ -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);