#include #include #include "parser.h" // 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; 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; // 1 octet typedef struct pad1 { unsigned unsigned char type; } pad1; // 2 octets min, 257 octets max (unsigned char 0 -> 255) typedef struct padn { unsigned char type; unsigned char length; char *mbz; } padn; // 2 octets typedef struct neighbour_req { unsigned char type; unsigned char length; } neighbour_req; // 132 octets typedef struct neighbour { unsigned char type; unsigned char length; struct in6_addr ip; short port; } neighbour; // 18 octets typedef struct network_hash { unsigned char type; unsigned char length; char *network_hash; } network_hash; // 2 octets typedef struct network_state_req { unsigned char type; unsigned char length; } network_state_req; // 28 octets typedef struct node_hash { unsigned char type; unsigned char length; long node_id; short seqno; char *node_hash; } node_hash; // 10 octets typedef struct node_state_req { unsigned char type; unsigned char length; long node_id; } node_state_req; // 28 octets min, 220 octets max (data 0 -> 192) typedef struct node_state { unsigned char type; unsigned char length; long node_id; short seqno; char *node_hash; char *data; } node_state; // 2 octets min, 257 ocets max (unsigned char 0 -> 255) typedef struct warning { unsigned char type; unsigned char length; char *message; } 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; } }