dazibao/tlv.h

120 lines
2.3 KiB
C
Raw Normal View History

2020-03-07 21:33:11 +01:00
#include <sys/socket.h>
#include <netinet/in.h>
2020-03-19 19:39:37 +01:00
#include "parser.h"
2020-03-07 21:33:11 +01:00
2020-03-13 14:27:44 +01:00
// 8 octets min (struct pointer 4 octets), 1024 octets max
typedef struct packet {
unsigned char magic; // 95 (si autre, ignorer)
unsigned char version; // 1 (si autre, ignorer)
short length; // 1020 max
char *body;
} packet;
2020-03-07 21:33:11 +01:00
typedef union tlv {
pad1 *pad1;
padn *padn;
neighbour_req *neighbour_req;
neighbour *neighbour;
network_hash *network_hash;
network_state_req *network_state_req;
node_hash *node_hash;
node_state_req *node_state_req;
node_state *node_state;
warning *warning;
} tlv;
2020-03-13 13:36:51 +01:00
// 1 octet
2020-03-07 21:33:11 +01:00
typedef struct pad1 {
2020-03-13 13:25:25 +01:00
unsigned unsigned char type;
2020-03-07 21:33:11 +01:00
} pad1;
2020-03-13 13:36:51 +01:00
// 2 octets min, 257 octets max (unsigned char 0 -> 255)
2020-03-07 21:33:11 +01:00
typedef struct padn {
2020-03-13 13:25:25 +01:00
unsigned char type;
unsigned char length;
2020-03-07 21:33:11 +01:00
char *mbz;
} padn;
2020-03-13 13:36:51 +01:00
// 2 octets
2020-03-07 21:33:11 +01:00
typedef struct neighbour_req {
2020-03-13 13:25:25 +01:00
unsigned char type;
unsigned char length;
2020-03-07 21:33:11 +01:00
} neighbour_req;
2020-03-13 13:36:51 +01:00
// 132 octets
2020-03-07 21:33:11 +01:00
typedef struct neighbour {
2020-03-13 13:25:25 +01:00
unsigned char type;
unsigned char length;
2020-03-07 21:33:11 +01:00
struct in6_addr ip;
short port;
} neighbour;
2020-03-13 13:36:51 +01:00
// 18 octets
2020-03-07 21:33:11 +01:00
typedef struct network_hash {
2020-03-13 13:25:25 +01:00
unsigned char type;
unsigned char length;
2020-03-07 21:33:11 +01:00
char *network_hash;
} network_hash;
2020-03-13 13:36:51 +01:00
// 2 octets
2020-03-07 21:33:11 +01:00
typedef struct network_state_req {
2020-03-13 13:25:25 +01:00
unsigned char type;
unsigned char length;
2020-03-07 21:33:11 +01:00
} network_state_req;
2020-03-13 13:36:51 +01:00
// 28 octets
2020-03-07 21:33:11 +01:00
typedef struct node_hash {
2020-03-13 13:25:25 +01:00
unsigned char type;
unsigned char length;
2020-03-07 21:33:11 +01:00
long node_id;
short seqno;
char *node_hash;
} node_hash;
2020-03-13 13:36:51 +01:00
// 10 octets
2020-03-07 21:33:11 +01:00
typedef struct node_state_req {
2020-03-13 13:25:25 +01:00
unsigned char type;
unsigned char length;
2020-03-07 21:33:11 +01:00
long node_id;
} node_state_req;
2020-03-13 13:36:51 +01:00
// 28 octets min, 220 octets max (data 0 -> 192)
2020-03-07 21:33:11 +01:00
typedef struct node_state {
2020-03-13 13:25:25 +01:00
unsigned char type;
unsigned char length;
2020-03-07 21:33:11 +01:00
long node_id;
short seqno;
char *node_hash;
char *data;
} node_state;
2020-03-13 13:36:51 +01:00
// 2 octets min, 257 ocets max (unsigned char 0 -> 255)
2020-03-07 21:33:11 +01:00
typedef struct warning {
2020-03-13 13:25:25 +01:00
unsigned char type;
unsigned char length;
2020-03-07 21:33:11 +01:00
char *message;
2020-03-19 19:39:37 +01:00
} warning;
// creer un tlv
void build_tlv(tlv *t) {
struct cmd_token token = parse_cmd();
switch(token.type) {
case NEIGHBOUR_REQ:
// a remplir
break;
case NETWORK_STATE_REQ:
// a remplir
break;
case NODE_STATE_REQ:
// a remplir
break;
case SEND:
// a remplir
break;
case ERROR:
printf("Wrong format, use 'req {neighbour | network state | node state}' or 'send {message}'");
break;
}
}