Add files via upload

This commit is contained in:
jules-ian 2023-03-23 17:22:29 +01:00 committed by GitHub
parent 3a59a6c63f
commit c53de688f0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,123 +1,226 @@
#include <mictcp.h> #include <mictcp.h>
#include <api/mictcp_core.h> #include <api/mictcp_core.h>
#define NBR_SOCKETS 1024
// FONCTIONS
static int socket_desc = 0;
static mic_tcp_sock tab_sockets[NBR_SOCKETS];
int valid_socket(int socket);
int bound_socket(int socket);
/* /*
* Permet de créer un socket entre lapplication et MIC-TCP * Permet de créer un socket entre lapplication et MIC-TCP
* Retourne le descripteur du socket ou bien -1 en cas d'erreur * Retourne le descripteur du socket ou bien -1 en cas d'erreur
*/ */
int mic_tcp_socket(start_mode sm) int mic_tcp_socket(start_mode sm) {
{ printf("[MIC-TCP] Appel de la fonction: ");
int result = -1; printf(__FUNCTION__); printf("\n");
printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n");
result = initialize_components(sm); /* Appel obligatoire */ mic_tcp_sock *socket = &tab_sockets[socket_desc];
set_loss_rate(0);
socket->fd = socket_desc++;
socket->state = IDLE;
//not bound yet
return result;
int result = initialize_components(sm); /* Appel obligatoire */
if (result<0){
return -1;
}
return socket->fd;
} }
/* /*
* Permet dattribuer une adresse à un socket. * Permet dattribuer une adresse à un socket.
* Retourne 0 si succès, et -1 en cas déchec * Retourne 0 si succès, et -1 en cas déchec
*/ */
int mic_tcp_bind(int socket, mic_tcp_sock_addr addr) int mic_tcp_bind(int socket, mic_tcp_sock_addr addr) {
{ printf("[MIC-TCP] Appel de la fonction: ");
printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); printf(__FUNCTION__); printf("\n");
return -1;
}
if(valid_socket(socket) && tab_sockets[socket].state ==IDLE){
tab_sockets[socket].addr = addr;
tab_sockets[socket].state = BOUND;
return 0;
}
return -1;
}
/* /*
* Met le socket en état d'acceptation de connexions * Met le socket en état d'acceptation de connexion
* Retourne 0 si succès, -1 si erreur * Retourne 0 si succès, -1 si erreur
*/ */
int mic_tcp_accept(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("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); printf(__FUNCTION__); printf("\n");
return -1;
if(valid_socket(socket) && tab_sockets[socket].state == BOUND){
tab_sockets[socket].state = ACCEPTING;
return 0;
}
return -1;
} }
/* /*
* Permet de réclamer létablissement dune connexion * Permet de réclamer létablissement dune connexion
* Retourne 0 si la connexion est établie, et -1 en cas déchec * Retourne 0 si la connexion est établie, et -1 en cas déchec
*/ */
int mic_tcp_connect(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"); printf("[MIC-TCP] Appel de la fonction: ");
return -1; printf(__FUNCTION__); printf("\n");
if(valid_socket(socket) && tab_sockets[socket].state == IDLE){
printf("%d\n", socket);
tab_sockets[socket].addr = addr;
tab_sockets[socket].state = ESTABLISHED;
return 0;
}
return -1;
} }
/* /*
* 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)
{
printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); int mic_tcp_send (int mic_sock, char* mesg, int mesg_size) {
return -1; printf("[MIC-TCP] Appel de la fonction: ");
/* printf(__FUNCTION__); printf("\n");
int sent_size = -1;
mic_tcp_pdu PDU; mic_tcp_sock socket=tab_sockets[mic_sock];
pdu.header = ---à remplir--- mic_tcp_header header;
pdu.payload.data=msg; // printf("%d\n", mic_sock);
pdu.payload.size=size; if (socket.state!=ESTABLISHED){
printf("connection not established\n");
sent_size = IP_send(PDU,--adress obtennue au connect--) return -1;
}
//Pas besoin de IP receive psq mode non connecté
header.dest_port=socket.addr.port;
return sent_size;
*/ int sent_size = -1;
mic_tcp_pdu pdu;
pdu.header = header;
pdu.payload.data = mesg;
pdu.payload.size = mesg_size;
//IP_recv quand fiabilité implémentée
sent_size = IP_send(pdu, socket.addr) ;
return sent_size;
} }
/* /*
* Permet à lapplication réceptrice de réclamer la récupération dune donnée * Permet à lapplication réceptrice de réclamer la récupération dune donnée
* stockée dans les buffers de réception du socket * stockée dans les buffers de réception du socket
* Retourne le nombre doctets lu ou bien -1 en cas derreur * Retourne le nombre doctets lu ou bien -1 en cas derreur
* NB : cette fonction fait appel à la fonction app_buffer_get() * NB : cette fonction fait appel à la fonction app_buffer_get()
*/ */
int mic_tcp_recv (int socket, char* mesg, int max_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");
int deliver_size = -1;
mic_tcp_payload payload; if(!valid_socket(socket)){
return -1;
payload.data = mesg }
payload.size = max_mesg_size;
int delivered_size;
deliver_size = app.buffer.get(payload); mic_tcp_payload *payload;
payload->data= mesg;
payload->size = max_mesg_size;
return deliver_size; delivered_size = app_buffer_get(*payload);
*/
printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n"); return delivered_size;
return -1;
} }
/*
* Permet de traiter un PDU MIC-TCP reçu (mise à jour des numéros de séquence
* et d'acquittement, etc.) puis d'insérer les données utiles du PDU dans
* le buffer de réception du socket. Cette fonction utilise la fonction
* app_buffer_put(). Elle est appelée par initialize_components()
*/
void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) {
printf("[MIC-TCP] Appel de la fonction: ");
printf(__FUNCTION__); printf("\n");
/*
mic_tcp_sock_addr addr_emetteur = addr //pour clarification
//éventuellement trouver les bons socket, buffer et app
for (int iint valid_socket(int socket) =0; i<socket_desc; i++){
if(tab_sockets[i].state==ACCEPTING && tab_sockets[i].addr == addr) {break}
else if (i==socket_desc-1){return -1}
}
*/
app_buffer_put(pdu.payload);
/* Utile quand on fera du reliable
if(SeqPDU = SeqDist){ //packet valide
SendAck(SeqDist);
SeqDist++;
IP_send(ack);
}
*/
}
/* /*
* Permet de réclamer la destruction dun socket. * Permet de réclamer la destruction dun socket.
* Engendre la fermeture de la connexion suivant le modèle de TCP. * Engendre la fermeture de la connexion suivant le modèle de TCP.
* Retourne 0 si tout se passe bien et -1 en cas d'erreur * Retourne 0 si tout se passe bien et -1 en cas d'erreur
*/ */
int mic_tcp_close (int socket) int mic_tcp_close (int socket) {
{ printf("[MIC-TCP] Appel de la fonction : ");
printf("[MIC-TCP] Appel de la fonction : "); printf(__FUNCTION__); printf("\n"); printf(__FUNCTION__); printf("\n");
return -1;
if(valid_socket(socket) && tab_sockets[socket].state == ESTABLISHED){
tab_sockets[socket].state = CLOSED;
tab_sockets[socket].fd = -1;
}
return -1;
} }
/*
* Traitement dun PDU MIC-TCP reçu (mise à jour des numéros de séquence /*---------------------------------------------*/
* et d'acquittement, etc.) puis insère les données utiles du PDU dans int valid_socket(int socket){
* le buffer de réception du socket. Cette fonction utilise la fonction if(socket > socket_desc-1 || tab_sockets[socket].fd == -1){
* app_buffer_put(). //printf("ah, ton socket il existe pas\n");
*/ return 0;
void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr) }
{ return 1;
/*
app_buffer_put(pdu.payload);
// sur version fiable v2 : IP_send(ack)
*/
printf("[MIC-TCP] Appel de la fonction: "); printf(__FUNCTION__); printf("\n");
} }
int bound_socket(int socket){
if (tab_sockets[socket].addr.ip_addr_size ==-1){
//printf("socket not bound\n");
return 0;
}
return 1;
}