diff --git a/src/debug.h b/src/debug.h index a8f01d6..c0a5688 100644 --- a/src/debug.h +++ b/src/debug.h @@ -1,5 +1,6 @@ #ifndef DEBUG_H #define DEBUG_H + #include "node.h" diff --git a/src/node.c b/src/node.c index 7319011..8247348 100644 --- a/src/node.c +++ b/src/node.c @@ -1,22 +1,5 @@ // This is the main file of the Dazibao project. It represents the node, and // handles all of the main logic, including the network connexions. -<<<<<<< HEAD -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -======= ->>>>>>> add-message #include "node.h" // Static variables @@ -837,6 +820,7 @@ int work_with_tlvs(char * data, uint16_t total_packet_len, struct sockaddr_in6 * break; case 2: + // We received a neighbour request so a random neighbor tlv has to be sent print_debug(">> Received neighbour request, sending out a neighbour address."); // Send a neighbour tlv @@ -858,6 +842,7 @@ int work_with_tlvs(char * data, uint16_t total_packet_len, struct sockaddr_in6 * break; case 3: + print_debug(">> Received neighbour tlv, sending back network hash."); // We received a neighbour tlv so a tlv network hash is sent to that address cur_tlv.neighbour = (neighbour*) (data + pos); @@ -879,6 +864,7 @@ int work_with_tlvs(char * data, uint16_t total_packet_len, struct sockaddr_in6 * break; case 4: + print_debug(">> Received network_hash, comparing with our own.."); // We reveived a network hash tlv so we compare the hash with our own, // if they differ we send a network state request tlv @@ -924,6 +910,7 @@ int work_with_tlvs(char * data, uint16_t total_packet_len, struct sockaddr_in6 * pdata = (pub_data*) tmp_list->data; build_node_hash(&new_tlv, pdata->id, pdata->seqno, pdata->data); add_tlv(&pack, &new_tlv, sender, socket_num); + tmp_list = tmp_list->next; } // The position is updated @@ -965,11 +952,13 @@ int work_with_tlvs(char * data, uint16_t total_packet_len, struct sockaddr_in6 * break; case 7: + // We received a node state request tlv // so a node state tlv for this node id has to be sent, // if no pub_data exists for this id nothing is sent print_debug(">> Received node state request. Processing..."); - cur_tlv.node_state_req = (node_state_req*) (data[pos]); + + cur_tlv.node_state_req = (node_state_req*) (data + pos); pdata = get_data(ntohl(cur_tlv.node_state_req->node_id)); if(pdata != NULL) { @@ -990,25 +979,32 @@ int work_with_tlvs(char * data, uint16_t total_packet_len, struct sockaddr_in6 * cur_tlv.node_state = (node_state*) (data + pos); print_debug(">> Received message ! "); + printf("%d\n", cur_tlv.node_state->type ); + printf("%d\n", cur_tlv.node_state->length ); + printf("%lu\n", cur_tlv.node_state->node_id ); + printf("%hu\n", cur_tlv.node_state->seqno ); + printf("%.16s\n", cur_tlv.node_state->node_hash); + printf("%s\n", cur_tlv.node_state->data); + if (DEBUG_LEVEL > 0) { if (cur_tlv.node_state->data == NULL) { print_error("The data in the current node is NULL !"); return -1; } - printf("%s\n", data + pos ); printf("\x1b[31m[DEBUG]\x1b[0m >> “%ls\0”\n", (const wchar_t*) cur_tlv.node_state->data); } // Compare hashes - pdata = get_data(ntohl(cur_tlv.node_state->node_id)); + pdata = get_data(cur_tlv.node_state->node_id); // If data is found for this id then we check that both hashes are the same if(pdata != NULL) { // We hash the data stored in the data list + memset(hash, 0, 16); hash_data(pdata, hash); // If both hashes are the same then nothing has to be done - if(memcmp(hash, cur_tlv.node_hash->node_hash, 16) == 0) { + if(memcmp(hash, cur_tlv.node_state->node_hash, 16) == 0) { // The position is updated tlv_len = data[pos+1]; pos += 2; @@ -1060,7 +1056,7 @@ int work_with_tlvs(char * data, uint16_t total_packet_len, struct sockaddr_in6 * if(pack.length > 0){ send_packet((char*) &pack, pack.length, sender, socket_num); } - + print_data(data_list); return 0; } diff --git a/src/node.h b/src/node.h index 62f33a4..c1d9e35 100644 --- a/src/node.h +++ b/src/node.h @@ -17,6 +17,8 @@ #include #include #include +#include + /* 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 diff --git a/src/tlv.h b/src/tlv.h index 10b4eee..825de6b 100644 --- a/src/tlv.h +++ b/src/tlv.h @@ -66,7 +66,7 @@ typedef struct network_state_req { typedef struct node_hash { unsigned char type; unsigned char length; - int64_t node_id; + uint64_t node_id; uint16_t seqno; char node_hash[16]; } node_hash; @@ -82,7 +82,7 @@ typedef struct node_state_req { typedef struct node_state { unsigned char type; unsigned char length; - int64_t node_id; + uint64_t node_id; uint16_t seqno; char node_hash[16]; char data[192];