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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 n07070
						n07070