#ifndef MICTCP_H #define MICTCP_H #include #include #include #include #include #include #include #include #include #include #include #include /* * Etats du protocole (les noms des états sont donnés à titre indicatif * et peuvent être modifiés) */ typedef enum protocol_state { IDLE, CLOSED, SYN_SENT, SYN_RECEIVED, ESTABLISHED, CLOSING } protocol_state; /* * Mode de démarrage du protocole * NB : nécessaire à l’usage de la fonction initialize_components() */ typedef enum start_mode { CLIENT, SERVER } start_mode; /* * Structure d’une adresse de socket */ typedef struct mic_tcp_sock_addr { char * ip_addr; int ip_addr_size; unsigned short port; } mic_tcp_sock_addr; /* * Structure d'un socket */ typedef struct mic_tcp_sock { int fd; /* descripteur du socket */ protocol_state state; /* état du protocole */ mic_tcp_sock_addr addr; /* adresse du socket */ } mic_tcp_sock; /* * Structure des données utiles d’un PDU MIC-TCP */ typedef struct mic_tcp_payload { char* data; /* données applicatives */ int size; /* taille des données */ } mic_tcp_payload; /* * Structure de l'entête d'un PDU MIC-TCP */ typedef struct mic_tcp_header { unsigned short source_port; /* numéro de port source */ unsigned short dest_port; /* numéro de port de destination */ unsigned int seq_num; /* numéro de séquence */ unsigned int ack_num; /* numéro d'acquittement */ unsigned char syn; /* flag SYN (valeur 1 si activé et 0 si non) */ 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 */ typedef struct mic_tcp_pdu { mic_tcp_header header ; /* entête du PDU */ mic_tcp_payload payload; /* charge utile du PDU */ } mic_tcp_pdu; typedef struct app_buffer { mic_tcp_payload packet; struct app_buffer* next; unsigned short id; } app_buffer; /**************************** * Fonctions de l'interface * ****************************/ int mic_tcp_socket(start_mode sm); int mic_tcp_bind(int socket, mic_tcp_sock_addr addr); int mic_tcp_accept(int socket, mic_tcp_sock_addr* addr); int mic_tcp_connect(int socket, mic_tcp_sock_addr addr); int mic_tcp_send (int socket, char* mesg, int mesg_size); int mic_tcp_recv (int socket, char* mesg, int max_mesg_size); void process_received_PDU(mic_tcp_pdu pdu, mic_tcp_sock_addr addr); int mic_tcp_close(int socket); #endif