diff --git a/daemon/netaddr.c b/daemon/netaddr.c index 6eb9280ba..2f2db15bc 100644 --- a/daemon/netaddr.c +++ b/daemon/netaddr.c @@ -1,6 +1,12 @@ +#include "bitcoin/pullpush.h" #include "netaddr.h" +#include "utils.h" #include +#include #include +#include +#include +#include #include #include #include @@ -42,3 +48,32 @@ char *netaddr_name(const tal_t *ctx, const struct netaddr *a) return tal_fmt(ctx, "%s:%u", name, port); } + +char *netaddr_to_hex(const tal_t *ctx, const struct netaddr *a) +{ + u8 *blob = tal_arr(ctx, u8, 0); + char *hex; + + push_le32(a->type, push, &blob); + push_le32(a->protocol, push, &blob); + push_le32(a->addrlen, push, &blob); + assert(a->addrlen <= sizeof(a->saddr)); + push(&a->saddr, a->addrlen, &blob); + + hex = tal_hexstr(ctx, blob, tal_count(blob)); + tal_free(blob); + return hex; +} + +bool netaddr_from_blob(const void *linear, size_t len, struct netaddr *a) +{ + const u8 *p = linear; + + a->type = pull_le32(&p, &len); + a->protocol = pull_le32(&p, &len); + a->addrlen = pull_le32(&p, &len); + if (a->addrlen > sizeof(a->saddr)) + return false; + pull(&p, &len, &a->saddr, a->addrlen); + return p != NULL && len == 0; +} diff --git a/daemon/netaddr.h b/daemon/netaddr.h index 13f1c3ec5..87becbd64 100644 --- a/daemon/netaddr.h +++ b/daemon/netaddr.h @@ -26,4 +26,7 @@ char *netaddr_name(const tal_t *ctx, const struct netaddr *a); /* Create a addrinfo (as wanted by io_connect) for this address. */ void netaddr_to_addrinfo(struct addrinfo *ai, const struct netaddr *a); +bool netaddr_from_blob(const void *linear, size_t len, struct netaddr *a); +char *netaddr_to_hex(const tal_t *ctx, const struct netaddr *a); + #endif /* LIGHTNING_DAEMON_NETADDR_H */