mirror of
https://github.com/aljazceru/lightning.git
synced 2026-01-06 23:54:22 +01:00
lightningd: really do allow two Torv3 addresses.
This surprised me, since the CHANGELOG for [0.8.2] said: We now announce multiple addresses of the same type, if given. ([3609](https://github.com/ElementsProject/lightning/pull/3609)) But it lied! Changelog-Fixed: We really do allow providing multiple addresses of the same type. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
committed by
Christian Decker
parent
3dcab9793d
commit
9d18180172
@@ -112,39 +112,6 @@ void towire_u8_array(u8 **pptr UNNEEDED, const u8 *arr UNNEEDED, size_t num UNNE
|
||||
{ fprintf(stderr, "towire_u8_array called!\n"); abort(); }
|
||||
/* AUTOGENERATED MOCKS END */
|
||||
|
||||
static bool wireaddr_internal_eq(const struct wireaddr_internal *a,
|
||||
const struct wireaddr_internal *b,
|
||||
bool cmp_torservice_blob)
|
||||
{
|
||||
if (a->itype != b->itype)
|
||||
return false;
|
||||
|
||||
switch (a->itype) {
|
||||
case ADDR_INTERNAL_SOCKNAME:
|
||||
return streq(a->u.sockname, b->u.sockname);
|
||||
case ADDR_INTERNAL_ALLPROTO:
|
||||
return a->u.port == b->u.port;
|
||||
case ADDR_INTERNAL_AUTOTOR:
|
||||
case ADDR_INTERNAL_STATICTOR:
|
||||
if (!wireaddr_eq(&a->u.torservice.address,
|
||||
&b->u.torservice.address))
|
||||
return false;
|
||||
if (a->u.torservice.port != b->u.torservice.port)
|
||||
return false;
|
||||
if (!cmp_torservice_blob)
|
||||
return true;
|
||||
return memeq(a->u.torservice.blob, sizeof(a->u.torservice.blob),
|
||||
b->u.torservice.blob, sizeof(b->u.torservice.blob));
|
||||
case ADDR_INTERNAL_FORPROXY:
|
||||
if (!streq(a->u.unresolved.name, b->u.unresolved.name))
|
||||
return false;
|
||||
return a->u.unresolved.port == b->u.unresolved.port;
|
||||
case ADDR_INTERNAL_WIREADDR:
|
||||
return wireaddr_eq(&a->u.wireaddr, &b->u.wireaddr);
|
||||
}
|
||||
abort();
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
const char *err;
|
||||
@@ -155,87 +122,98 @@ int main(int argc, char *argv[])
|
||||
assert(parse_wireaddr_internal("127.0.0.1", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
expect->itype = ADDR_INTERNAL_WIREADDR;
|
||||
assert(parse_wireaddr("127.0.0.1:9735", &expect->u.wireaddr, 0, NULL, &err));
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* IPv4 address with port. */
|
||||
assert(parse_wireaddr_internal("127.0.0.1:1", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
expect->itype = ADDR_INTERNAL_WIREADDR;
|
||||
assert(parse_wireaddr("127.0.0.1:1", &expect->u.wireaddr, 0, NULL, &err));
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* Simple IPv6 address. */
|
||||
assert(parse_wireaddr_internal("::1", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
expect->itype = ADDR_INTERNAL_WIREADDR;
|
||||
assert(parse_wireaddr("::1", &expect->u.wireaddr, DEFAULT_PORT, NULL, &err));
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* IPv6 address with port. */
|
||||
assert(parse_wireaddr_internal("[::1]:1", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
expect->itype = ADDR_INTERNAL_WIREADDR;
|
||||
assert(parse_wireaddr("::1", &expect->u.wireaddr, 1, NULL, &err));
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* autotor address */
|
||||
assert(parse_wireaddr_internal("autotor:127.0.0.1", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
expect->itype = ADDR_INTERNAL_AUTOTOR;
|
||||
expect->u.torservice.port = DEFAULT_PORT;
|
||||
assert(parse_wireaddr("127.0.0.1", &expect->u.torservice.address, 9051, NULL, &err));
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* autotor address with port */
|
||||
assert(parse_wireaddr_internal("autotor:127.0.0.1:9055", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
expect->itype = ADDR_INTERNAL_AUTOTOR;
|
||||
expect->u.torservice.port = DEFAULT_PORT;
|
||||
assert(parse_wireaddr("127.0.0.1", &expect->u.torservice.address, 9055, NULL, &err));
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* autotor address with torport */
|
||||
assert(parse_wireaddr_internal("autotor:127.0.0.1/torport=9055", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
expect->itype = ADDR_INTERNAL_AUTOTOR;
|
||||
expect->u.torservice.port = 9055;
|
||||
assert(parse_wireaddr("127.0.0.1", &expect->u.torservice.address, 9051, NULL, &err));
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* autotor address with port and torport */
|
||||
assert(parse_wireaddr_internal("autotor:127.0.0.1:9055/torport=10055", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
expect->itype = ADDR_INTERNAL_AUTOTOR;
|
||||
expect->u.torservice.port = 10055;
|
||||
assert(parse_wireaddr("127.0.0.1", &expect->u.torservice.address, 9055, NULL, &err));
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* statictor address */
|
||||
assert(parse_wireaddr_internal("statictor:127.0.0.1", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
expect->itype = ADDR_INTERNAL_STATICTOR;
|
||||
expect->u.torservice.port = DEFAULT_PORT;
|
||||
memset(expect->u.torservice.blob, 0, sizeof(expect->u.torservice.blob));
|
||||
strcpy((char *)expect->u.torservice.blob, STATIC_TOR_MAGIC_STRING);
|
||||
assert(parse_wireaddr("127.0.0.1", &expect->u.torservice.address, 9051, NULL, &err));
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* statictor address with port */
|
||||
assert(parse_wireaddr_internal("statictor:127.0.0.1:9055", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
expect->itype = ADDR_INTERNAL_STATICTOR;
|
||||
expect->u.torservice.port = DEFAULT_PORT;
|
||||
assert(parse_wireaddr("127.0.0.1", &expect->u.torservice.address, 9055, NULL, &err));
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* statictor address with torport */
|
||||
assert(parse_wireaddr_internal("statictor:127.0.0.1/torport=9055", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
expect->itype = ADDR_INTERNAL_STATICTOR;
|
||||
expect->u.torservice.port = 9055;
|
||||
assert(parse_wireaddr("127.0.0.1", &expect->u.torservice.address, 9051, NULL, &err));
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* statictor address with port and torport */
|
||||
assert(parse_wireaddr_internal("statictor:127.0.0.1:9055/torport=10055", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
expect->itype = ADDR_INTERNAL_STATICTOR;
|
||||
expect->u.torservice.port = 10055;
|
||||
assert(parse_wireaddr("127.0.0.1", &expect->u.torservice.address, 9055, NULL, &err));
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* statictor address with port and torport and torblob */
|
||||
assert(parse_wireaddr_internal("statictor:127.0.0.1:9055/torport=10055/torblob=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
expect->itype = ADDR_INTERNAL_STATICTOR;
|
||||
expect->u.torservice.port = 10055;
|
||||
/* This is actually nul terminated */
|
||||
memset(expect->u.torservice.blob, 'x', sizeof(expect->u.torservice.blob)-1);
|
||||
assert(parse_wireaddr("127.0.0.1", &expect->u.torservice.address, 9055, NULL, &err));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* local socket path */
|
||||
assert(parse_wireaddr_internal("/tmp/foo.sock", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
expect->itype = ADDR_INTERNAL_SOCKNAME;
|
||||
strcpy(expect->u.sockname, "/tmp/foo.sock");
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* Unresolved */
|
||||
assert(!parse_wireaddr_internal("ozlabs.org", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
@@ -244,7 +222,7 @@ int main(int argc, char *argv[])
|
||||
expect->itype = ADDR_INTERNAL_FORPROXY;
|
||||
strcpy(expect->u.unresolved.name, "ozlabs.org");
|
||||
expect->u.unresolved.port = DEFAULT_PORT;
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
/* Unresolved with port */
|
||||
assert(!parse_wireaddr_internal("ozlabs.org:1234", &addr, DEFAULT_PORT, false, false, false, false, &err));
|
||||
@@ -253,7 +231,7 @@ int main(int argc, char *argv[])
|
||||
expect->itype = ADDR_INTERNAL_FORPROXY;
|
||||
strcpy(expect->u.unresolved.name, "ozlabs.org");
|
||||
expect->u.unresolved.port = 1234;
|
||||
assert(wireaddr_internal_eq(&addr, expect, false));
|
||||
assert(wireaddr_internal_eq(&addr, expect));
|
||||
|
||||
tal_free(expect);
|
||||
common_shutdown();
|
||||
|
||||
Reference in New Issue
Block a user