aboutsummaryrefslogtreecommitdiffstats
path: root/libglouglou/libggnet.c
diff options
context:
space:
mode:
Diffstat (limited to 'libglouglou/libggnet.c')
-rw-r--r--libglouglou/libggnet.c36
1 files changed, 20 insertions, 16 deletions
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);
+}
+