Ajout de la fonction d'envoie de tlv
This commit is contained in:
parent
e1276448f1
commit
b96655da72
58
src/node.c
58
src/node.c
@ -45,9 +45,63 @@ neighbour_peer *get_random_neighbour() {
|
||||
|
||||
/* ---- Fin fonctions utilitaires ---- */
|
||||
|
||||
// This function
|
||||
int send_tlv(struct tlv, struct sockaddr_in6 * sender_list[], int sender_list_size){
|
||||
int send_tlv(struct tlv tlv_to_send, int tlv_type, struct sockaddr_in6 * dest_list[], int dest_list_size, int sock_num){
|
||||
debug_print("Building packet to send a TLV.");
|
||||
|
||||
// We first need to build the packet,
|
||||
char packet_buff[1024];
|
||||
struct packet pack;
|
||||
|
||||
pack.magic = 95;
|
||||
pack.version = 1;
|
||||
if(sizeof(tlv_to_send) > 1020){
|
||||
debug_print("Unable to send TLV, the size is bigger than 1020 bits.");
|
||||
return -1;
|
||||
} else {
|
||||
pack.length = sizeof(tlv_to_send);
|
||||
strcpy(pack.body, (char) tlv_to_send);
|
||||
}
|
||||
|
||||
// Casting the struct to a buffer.
|
||||
packet_buff = (char *) pack;
|
||||
|
||||
debug_print("Packet has been built.");
|
||||
|
||||
// Vectorized buffer
|
||||
struct iovec vec_buff = { .iov_len = sizeof(packet_buff), .iov_base = packet_buff };
|
||||
|
||||
int error_while_sending = 0;
|
||||
|
||||
// For every dest
|
||||
for (size_t i = 0; i < dest_list_size; i++) {
|
||||
// Creating the struct to send out with sendmsg
|
||||
struct msghdr packet_tlv_send_out = {
|
||||
.msg_name = &dest_list[i],
|
||||
.msg_namelen = sizeof(dest_list[i]),
|
||||
.msg_iov = &vec_buff,
|
||||
.msg_iovlen = 1 // We have only one iovec buffer. But if we had 2, we would write 2.
|
||||
};
|
||||
|
||||
response_code = sendmsg((int) sock_num, &packet_tlv_send_out, 0);
|
||||
if (response_code < 0) {
|
||||
debug_print("Unable to send out the packet to peer %i", i);
|
||||
error_while_sending = 1;
|
||||
continue;
|
||||
} else if (response_code < sizeof(packet_tlv_send_out)) {
|
||||
debug_print("Sent out only part of the packet.");
|
||||
error_while_sending = 1;
|
||||
continue;
|
||||
} else {
|
||||
debug_print("Send out packet to peer %i", i);
|
||||
}
|
||||
}
|
||||
|
||||
if (error_while_sending == 1) {
|
||||
debug_print("Error occured while sending out a packet.");
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// We need to make sure the TLV announces a length that will no go onto
|
||||
|
@ -81,14 +81,14 @@ int send_packet();
|
||||
* des paires.
|
||||
* Retourne -1 en cas d'échec, 0 en cas de succès.
|
||||
*/
|
||||
int send_tlv(struct tlv tlv_to_send, int tlv_type, struct sockaddr_in6 * dest_list[], int dest_list_size);
|
||||
int send_tlv(struct tlv tlv_to_send, int tlv_type, struct sockaddr_in6 * dest_list[], int dest_list_size, int socket_num);
|
||||
|
||||
|
||||
/* Prend une liste de tlv, et construit un paquet pour ensuite les envoyer à la liste
|
||||
* des paires. Chaque pair recevera la même liste de TLV.
|
||||
* Retourne -1 en cas d'échec, 0 en cas de succès.
|
||||
*/
|
||||
int send_tlvs(struct list * tlv_list, int tlv_type, struct sockaddr_in6 * dest_list[], int dest_list_size);
|
||||
int send_tlvs(struct list * tlv_list, int tlv_type, struct sockaddr_in6 * dest_list[], int dest_list_size, int socket_num);
|
||||
|
||||
// threaded functions
|
||||
void t_ask_for_more_peers();
|
||||
|
Loading…
Reference in New Issue
Block a user