BE_reseau/include/mictcp.h
Nicolas Van Wambeke dc58e0e2d5 Initial Import
2016-06-13 23:17:19 +02:00

106 rindas
2,8 KiB
C
Neapstrādāts Vainot Vēsture

Šis fails satur neviennozīmīgus unikoda simbolus

Šis fails satur unikoda simbolus, kas var tikt sajauktas ar citām rakstzīmēm. Ja šķiet, ka tas ir ar nolūku, šo brīdinājumu var droši neņemt vērā. Jāizmanto atsoļa taustiņš (Esc), lai atklātu tās.

#ifndef MICTCP_H
#define MICTCP_H
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <unistd.h>
#include <netdb.h>
#include <pthread.h>
#include <sys/time.h>
// 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 à lusage de la fonction initialize_components()
typedef enum start_mode { CLIENT, SERVER } start_mode;
// Structure dune 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 dun 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 ⇔ données applicatives
} 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);
int mic_tcp_close(int socket);
// Variables globales
mic_tcp_sock local_sock_src;
mic_tcp_sock local_sock_dest;
unsigned long timer;
unsigned long RTT1;
unsigned long RTT2;
int PE;
int PA;
float pourcentage_perte_client;
float pourcentage_perte_serveur;
float compteurDT;
float DTperdu;
mic_tcp_pdu DT;
mic_tcp_pdu Syn;
mic_tcp_pdu Ack;
mic_tcp_pdu Syn_Ack;
#endif