aboutsummaryrefslogtreecommitdiffstats
path: root/libglouglou/libggnet.c
diff options
context:
space:
mode:
Diffstat (limited to 'libglouglou/libggnet.c')
-rw-r--r--libglouglou/libggnet.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/libglouglou/libggnet.c b/libglouglou/libggnet.c
index 7ccfa00..424ee16 100644
--- a/libglouglou/libggnet.c
+++ b/libglouglou/libggnet.c
@@ -1,4 +1,5 @@
#include <stdlib.h>
+#include <string.h>
#include "libglouglou.h"
#include "libggnet.h"
@@ -34,7 +35,7 @@ ggnet_node_add(struct ggnet *net, struct in_addr *addr)
n = xcalloc(1, sizeof(struct ggnet_node));
n->addr.s_addr = addr->s_addr;
- n->namelen = NODENAME_WAITING;
+ n->namelen = GGNET_NODENAME_WAITING;
n->lastseen = net->time;
LIST_INSERT_HEAD(&net->node_list, n, entry);
net->node_count++;
@@ -50,7 +51,6 @@ ggnet_node_del(struct ggnet *net, struct ggnet_node *n)
gg_log_debug("ggnet_node_del: ggnet_node_del");
LIST_REMOVE(n, entry);
- free(n->name);
free(n);
net->node_count--;
}
@@ -66,6 +66,20 @@ ggnet_node_find(struct ggnet *net, struct in_addr *remote)
return NULL;
}
+void
+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;
+ }
+}
+
struct ggnet_conn *
ggnet_conn_add(struct ggnet *net, struct in_addr *src, int src_port,
struct in_addr *dst, int dst_port, int proto, int size)