From 75b32735c416a0ef6575a07854af4e4bb38e4dc0 Mon Sep 17 00:00:00 2001 From: Newglear Date: Fri, 18 Mar 2022 10:46:40 +0100 Subject: [PATCH] =?UTF-8?q?V2=20|=20=C3=A0=20lanccer=20et=20v=C3=A9rififer?= =?UTF-8?q?=20=20que=20tout=20finctionne=20avec=20les=20pertes=20et=20les?= =?UTF-8?q?=20reprises=20de=20pertes.=20Faudra=20aussi=20rajouter=20des=20?= =?UTF-8?q?msgs=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); + } + + }