dazibao/src/node.h

110 lines
2.7 KiB
C
Raw Normal View History

2020-03-13 14:46:06 +01:00
// Define constants
2020-03-24 12:24:56 +01:00
#ifndef NODE_H
#define NODE_H
2020-03-13 14:46:06 +01:00
2020-03-31 18:28:12 +02:00
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
2020-03-24 19:39:16 +01:00
#include <sys/socket.h>
#include <netinet/in.h>
2020-03-31 18:28:12 +02:00
#include <string.h>
2020-04-16 15:27:32 +02:00
#include <time.h>
#include <stdint.h>
2020-03-31 18:28:12 +02:00
/* 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 dun
* paquet de la part de ce pair ;
*/
typedef struct neighbour_peer {
struct in6_addr ip;
2020-04-16 15:27:32 +02:00
int16_t 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
*/
2020-03-31 15:57:31 +02:00
typedef struct pub_data {
unsigned char length;
2020-04-16 15:27:32 +02:00
int64_t id;
int16_t seqno;
char *data;
2020-03-31 15:57:31 +02:00
} pub_data;
2020-03-31 18:28:12 +02:00
// General list
typedef struct list {
void *data;
void *next;
2020-03-31 18:28:12 +02:00
} list;
#include "tlv.h"
#include "hash.h"
#include "parser.h"
// On which port do we listen to
#define LISTEN_PORT 1212
// The node ID
#define NODE_ID 42675882021843277
// The number of neighbours
// The neighbour table has 15 entries
#define NEIGHBOUR_MAX 15
// TODO
2020-03-13 14:46:06 +01:00
// fonctions signatures
void listen_for_packets();
int check_header(char * received_datagram, int buffer_len, packet * packet_to_return);
2020-03-13 14:46:06 +01:00
2020-04-16 15:27:32 +02:00
int validate_tlv(char *data, int pos, int16_t packet_len);
2020-03-13 14:46:06 +01:00
2020-03-24 18:19:35 +01:00
int update_neighbours();
2020-03-13 14:46:06 +01:00
2020-04-16 15:27:32 +02:00
int work_with_tlvs(char * data, int16_t packet_len, struct sockaddr_in6 sender);
2020-03-13 14:46:06 +01:00
void add_tlv(struct packet *packet, union tlv *tlv, char type);
2020-03-13 14:46:06 +01:00
// int send_packet();
/* Takes a TLV and sends it over to everyone in the list of addresses.
* Returns -1 in case of error, 0 otherwise.
*/
int send_tlv(union tlv * tlv_to_send, int tlv_size, struct sockaddr_in6 * dest_list, int dest_list_size, int socket_num);
/* Takes a list of TLV and sends them over to everyone in the list of addresses.
* Returns -1 in case of error, 0 otherwise.
*/
int send_tlvs(struct list * tlv_list, int tlv_size, struct sockaddr_in6 * dest_list, int dest_list_size, int socket_num);
// threaded functions
2020-03-13 14:46:06 +01:00
void t_ask_for_more_peers();
void t_update_neighbours();
void t_get_network_state();
// Helper functions
2020-03-31 19:16:23 +02:00
int len_list(list *l);
2020-03-13 14:46:06 +01:00
2020-03-31 19:16:23 +02:00
neighbour_peer *get_random_neighbour();
2020-03-24 12:24:56 +01:00
2020-04-07 19:05:30 +02:00
// get data associated with id, if it doesn't exist return NULL
2020-04-16 15:27:32 +02:00
pub_data *get_data(int64_t id);
2020-04-07 19:05:30 +02:00
// Take data as args and create a pub_data structure in the heap
2020-04-16 15:27:32 +02:00
pub_data *copy_data(unsigned char len, int64_t id, int16_t seqno, char *data);
2020-04-07 19:05:30 +02:00
// add new data to data list
2020-04-16 15:27:32 +02:00
void add_data(unsigned char len, int64_t id, int16_t seqno, char *data);
2020-04-07 19:05:30 +02:00
2020-03-24 12:24:56 +01:00
#endif