diff options
Diffstat (limited to 'libglouglou/libggnet.c')
-rw-r--r-- | libglouglou/libggnet.c | 18 |
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) |