From b6f9d1cb1fc279d0f5ab6e2fbc00b7bd0d2861ae Mon Sep 17 00:00:00 2001 From: Laurent Ghigonis Date: Sat, 15 Dec 2012 04:18:51 +0100 Subject: add necessary code in libggnet to do resolving of nodes names. modify libggnet_dns structure to fit with these changes. --- libglouglou/libggnet.c | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) (limited to 'libglouglou/libggnet.c') diff --git a/libglouglou/libggnet.c b/libglouglou/libggnet.c index eb3d31b..2dfb5d3 100644 --- a/libglouglou/libggnet.c +++ b/libglouglou/libggnet.c @@ -14,6 +14,7 @@ static struct ggnet_nodegroup *nodegroup_find(struct ggnet *, void *param); static void nodegroup_set(struct ggnet *, struct ggnet_node *); static void nodegroup_unset(struct ggnet *, struct ggnet_node *); +static void _cb_dns_reverse(struct in_addr *, char *, void *); struct ggnet * ggnet_new(int manage_connid) @@ -98,13 +99,15 @@ ggnet_node_add(struct ggnet *net, struct in_addr *addr) printf("could not allocate node\n"); exit(1); } + n->net = net; n->addr.s_addr = addr->s_addr; - n->namelen = GGNET_NODENAME_WAITING; n->lastseen = net->time; LIST_INSERT_HEAD(&net->node_list, n, entry); net->node_count++; if (net->use_grouping) nodegroup_set(net, n); + if (net->use_dns) + n->dns_req = ggnet_dns_reverse(net->ggdns, &n->addr, _cb_dns_reverse, n); return n; } @@ -121,6 +124,8 @@ ggnet_node_del(struct ggnet *net, struct ggnet_node *n) if (net->use_grouping) nodegroup_unset(net, n); + if (n->dns_req) + ggnet_dns_cancel(net->ggdns, n->dns_req); LIST_REMOVE(n, entry); free(n); @@ -138,21 +143,6 @@ ggnet_node_find(struct ggnet *net, struct in_addr *remote) return NULL; } -void -ggnet_node_update_name(struct ggnet *net, struct ggnet_node *n, - char *name, int len) -{ - if (!name) { - snprintf(n->name, sizeof(n->name), "%x", n->addr.s_addr); - n->namelen = sizeof(n->addr.s_addr); - } else { - if (len > sizeof(n->name)) - len = sizeof(n->name); - strncpy(n->name, name, len); - n->namelen = len; - } -} - void * ggnet_node_usrdata_get(struct ggnet_node *n) { @@ -489,3 +479,17 @@ nodegroup_unset(struct ggnet *net, struct ggnet_node *n) nodegroup_del(net, n->group); } +static void +_cb_dns_reverse(struct in_addr *ip, char *name, void *data) +{ + struct ggnet *net; + struct ggnet_node *n; + + n = data; + net = n->net; + n->dns_req = NULL; + if (name) + snprintf(n->fqdn, sizeof(n->fqdn), "%s", name); + net->cb_nodename(net, n); +} + -- cgit v1.2.3-59-g8ed1b