Merge branch 'ipv4-getaddrinfo' into 'master'
Ipv4 getaddrinfo See merge request perdriau/dazibao!20
This commit is contained in:
commit
6b8fa14958
@ -44,6 +44,10 @@ void print_peers(list * l){
|
|||||||
print_debug(">> Printing out peer list :");
|
print_debug(">> Printing out peer list :");
|
||||||
while(l != NULL){
|
while(l != NULL){
|
||||||
neighbour_peer * peer = (neighbour_peer *) l->data;
|
neighbour_peer * peer = (neighbour_peer *) l->data;
|
||||||
|
if (peer == NULL) {
|
||||||
|
print_error("Peer is empty ?");
|
||||||
|
return;
|
||||||
|
}
|
||||||
char * buff_str_ip[1024];
|
char * buff_str_ip[1024];
|
||||||
char * ip_str = (char * ) inet_ntop(AF_INET6,&peer->ip,(char * restrict) buff_str_ip, 1024);
|
char * ip_str = (char * ) inet_ntop(AF_INET6,&peer->ip,(char * restrict) buff_str_ip, 1024);
|
||||||
int last_seen = time(NULL) - peer->last_seen;
|
int last_seen = time(NULL) - peer->last_seen;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include "node.h"
|
#include "node.h"
|
||||||
|
|
||||||
|
|
||||||
#define DEBUG_LEVEL 0
|
#define DEBUG_LEVEL 7
|
||||||
|
|
||||||
void welcome();
|
void welcome();
|
||||||
|
|
||||||
|
72
src/node.c
72
src/node.c
@ -1517,14 +1517,13 @@ int bootstrap_node(int * sock_fd, char * root_peer_ip, uint16_t root_peer_port){
|
|||||||
* sock_fd = socket(AF_INET6, SOCK_DGRAM, 0);
|
* sock_fd = socket(AF_INET6, SOCK_DGRAM, 0);
|
||||||
if ( * sock_fd < 0) {
|
if ( * sock_fd < 0) {
|
||||||
print_error("Failed to open socket");
|
print_error("Failed to open socket");
|
||||||
perror("");
|
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Bind socket */
|
/* Bind socket */
|
||||||
memset(&server_addr, 0, sizeof(server_addr));
|
memset(&server_addr, 0, sizeof(server_addr));
|
||||||
server_addr.sin6_family = AF_INET6;
|
server_addr.sin6_family = AF_INET6;
|
||||||
// server_addr.sin6_addr.in6_addr = htonl(INADDR_ANY);
|
// server_addr.sin6_addr = INADDR_ANY;
|
||||||
server_addr.sin6_port = LISTEN_PORT;
|
server_addr.sin6_port = LISTEN_PORT;
|
||||||
if (bind( * sock_fd, (struct sockaddr *)(&server_addr), sizeof(server_addr)) < 0) {
|
if (bind( * sock_fd, (struct sockaddr *)(&server_addr), sizeof(server_addr)) < 0) {
|
||||||
print_error("Failed to bind socket");
|
print_error("Failed to bind socket");
|
||||||
@ -1532,26 +1531,64 @@ int bootstrap_node(int * sock_fd, char * root_peer_ip, uint16_t root_peer_port){
|
|||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make the first peer*/
|
print_debug(">> Adding the first root peers to the list...");
|
||||||
struct neighbour_peer * root_peer = (struct neighbour_peer *) malloc(sizeof(struct neighbour_peer));
|
|
||||||
time_t root_peer_seen = time(NULL);
|
|
||||||
|
|
||||||
int inet_p = inet_pton(AF_INET6, root_peer_ip, &root_peer->ip);
|
// Get the address via getaddrinfo.
|
||||||
if(inet_p < 1){
|
struct addrinfo hints;
|
||||||
perror(">> Failed to create the root peer.");
|
memset(&hints, 0, sizeof(hints));
|
||||||
return -3;
|
hints.ai_family = AF_INET6;
|
||||||
|
hints.ai_socktype = SOCK_DGRAM;
|
||||||
|
hints.ai_protocol = 0;
|
||||||
|
hints.ai_flags = (AI_V4MAPPED | AI_ALL); // get back ipv4 mapped to ipv6
|
||||||
|
|
||||||
|
struct addrinfo *res;
|
||||||
|
print_debug(">> Resolving root peer name via getaddrinfo");
|
||||||
|
int rc = getaddrinfo(root_peer_ip, "http", &hints, &res);
|
||||||
|
if(rc != 0) {
|
||||||
|
print_error("Failed to resolve hostname, exiting...");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
root_peer->port = root_peer_port;
|
|
||||||
root_peer->is_temporary = 0;
|
|
||||||
root_peer->last_seen = root_peer_seen;
|
|
||||||
|
|
||||||
// TODO: Add the first peer to the neighbourhood
|
|
||||||
print_debug(">> Adding the first root peer to the list...");
|
|
||||||
neighbour_list = malloc(sizeof(struct list));
|
neighbour_list = malloc(sizeof(struct list));
|
||||||
memset(neighbour_list, 0, sizeof(struct list));
|
memset(neighbour_list, 0, sizeof(struct list));
|
||||||
neighbour_list->data = (void *) root_peer;
|
|
||||||
neighbour_list->next = NULL;
|
// For every address given to us by getaddrinfo, we create a new peer.
|
||||||
|
struct addrinfo *p;
|
||||||
|
struct neighbour_peer *peer ;
|
||||||
|
|
||||||
|
list * tmp = neighbour_list;
|
||||||
|
for(p = res; p != NULL; p = p->ai_next) {
|
||||||
|
peer = (neighbour_peer*) malloc(sizeof(neighbour_peer));
|
||||||
|
memcpy(&peer->ip, &((struct sockaddr_in6 *) p->ai_addr)->sin6_addr, sizeof(struct in6_addr));
|
||||||
|
peer->port = root_peer_port;
|
||||||
|
peer->is_temporary = 0;
|
||||||
|
|
||||||
|
// set last_seen time
|
||||||
|
peer->last_seen = time(NULL);
|
||||||
|
|
||||||
|
if (DEBUG_LEVEL > 0) {
|
||||||
|
char * buff_str_ip[1024];
|
||||||
|
char * ip_str = (char * ) inet_ntop(AF_INET6,&peer->ip,(char * restrict) buff_str_ip, 1024);
|
||||||
|
printf("\x1b[31m[DEBUG]\x1b[0m >> Adding %s @ %i to peer list.\n", ip_str, root_peer_port );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Add new peer to the list.
|
||||||
|
list *node = (list*) malloc(sizeof(list));
|
||||||
|
node->data = (void*) peer;
|
||||||
|
node->next = NULL;
|
||||||
|
|
||||||
|
// Goint to the end of the list
|
||||||
|
while(tmp->next != NULL){
|
||||||
|
tmp = tmp->next;
|
||||||
|
}
|
||||||
|
tmp->next = node;
|
||||||
|
}
|
||||||
|
|
||||||
|
neighbour_list = tmp;
|
||||||
|
|
||||||
|
print_peers(neighbour_list);
|
||||||
|
|
||||||
print_debug(">> Initializing data list...");
|
print_debug(">> Initializing data list...");
|
||||||
data_list = (list*) malloc(sizeof(list));
|
data_list = (list*) malloc(sizeof(list));
|
||||||
@ -1565,6 +1602,7 @@ int bootstrap_node(int * sock_fd, char * root_peer_ip, uint16_t root_peer_port){
|
|||||||
our_data->seqno = 1337;
|
our_data->seqno = 1337;
|
||||||
our_data->data = NULL;
|
our_data->data = NULL;
|
||||||
|
|
||||||
|
freeaddrinfo(res);
|
||||||
print_debug(">> Boostraping done.");
|
print_debug(">> Boostraping done.");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
|
||||||
/* la table de voisins, qui est indexée par adresses de socket (des paires (IP, Port)),
|
/* 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
|
* et dont chaque entrée contient un booléen indiquant si le pair est permanent
|
||||||
|
Loading…
Reference in New Issue
Block a user