dazibao/src/node.h

100 lines
2.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Define constants
#ifndef NODE_H
#define NODE_H
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include "tlv.h"
#include "hash.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
/* 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;
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, );
/* Prend un tlv, et construit un paquet pour ensuite l'envoyer à la liste
* des paires.
* Retourne -1 en cas d'échec, 0 en cas de succès.
*/
int send_tlv(struct tlv, struct sockaddr_in6 * sender_list[], int sender_list_size);
// 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