// Define constants #ifndef NODE_H #define NODE_H #include #include #include #include #include #include #include #include "tlv.h" #include "hash.h" // On which port do we listen to #define LISTEN_PORT 1212 // The node ID #define NODE_ID 203242402519736214145149136169422092269247115186189140178187251487819615911212154252117172522111472481308026129190139512419121015210238252292031613214452118122204415160254 // The number of neighbours // The neighbour table has 15 entries #define NEIGHBOUR_MAX 15 /* la table de voisins, qui est indexée par adresses de socket (des paires (IP, Port)), * et dont chaque entrée contient un booléen indiquant si le pair est permanent * (configuré au lancement) ou transitoire, et la date de dernière réception d’un * paquet de la part de ce pair ; */ typedef struct neighbour_peer { struct in6_addr ip; short port; char is_temporary; struct timeval last_seen; } neighbour_peer; // The strucuture to hold the messages /* It's a list of triplets, (Li,Si,Di) * Li : The Node ID of the publisher 64 bits * Si : the sequence number 16 bits * Di : the data of the message 192 bytes */ typedef struct pub_data { unsigned char length; long id; short seqno; char *data; } pub_data; // General list typedef struct list { void *data; void *next; } list; // Static variables static list *data_list; static list *neighbour_list; // TODO // fonctions signatures void listen_for_packets(); int check_header(char * received_datagram[], int len, struct packet pack); int validate_tlvs(struct packet * pack, struct tlv_list * tlv_l); int update_neighbours(); int work_with_tlvs(struct packet received_packet, char * data_from_packet[], struct sockaddr_in6 sender); void add_tlv(packet *packet, tlv *tlv, char type); int send_packet(struct tlv_list tlvs_to_send, ); // threaded functions void t_ask_for_more_peers(); void t_update_neighbours(); void t_get_network_state(); // Helper functions int len_list(list *l); neighbour_peer *get_random_neighbour(); #endif