Skip to content

Commit 8d69c9f

Browse files
committed
fix testing in onionv3
1 parent bc6d4c1 commit 8d69c9f

File tree

1 file changed

+22
-14
lines changed

1 file changed

+22
-14
lines changed

lightning/src/ln/msgs.rs

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -661,22 +661,29 @@ impl Readable for NetAddress {
661661
}
662662
}
663663

664+
fn rem_first_and_last(value: &str) -> &str {
665+
let mut chars = value.chars();
666+
chars.next();
667+
chars.next_back();
668+
chars.as_str()
669+
}
670+
664671
impl FromStr for NetAddress {
665672
type Err = AddrParseError;
666673

667674
fn from_str(s: &str) -> Result<Self, Self::Err> {
668-
let host: String = s.split("@").collect::<Vec<&str>>()[0].parse().expect("Invalid hostname");
669-
let port: u16 = s.split("@").collect::<Vec<&str>>()[1].parse().expect("Invalid port");
675+
let trim_s_by_latest_colon = s.rfind(":").unwrap();
676+
let host = &s[..trim_s_by_latest_colon];
677+
let port: u16 = s[trim_s_by_latest_colon + 1..].parse().expect("Invalid port");
670678
if let Ok(addr) = host.parse::<Ipv4Addr>() {
671679
let addr = SocketAddrV4::new(addr, port);
672680
return Ok(NetAddress::IPv4 { addr: addr.ip().octets(), port });
673681
}
674-
if let Ok(addr) = host.parse::<Ipv6Addr>() {
682+
if let Ok(addr) = rem_first_and_last(host).parse::<Ipv6Addr>() {
675683
let addr = SocketAddrV6::new(addr, port, 0, 0);
676684
return Ok(NetAddress::IPv6 { addr: addr.ip().octets(), port });
677685
};
678686
if host.ends_with(".onion") {
679-
// tests are failing
680687
let onion = host.split(".onion").collect::<Vec<&str>>()[0];
681688
let onion = base32::decode(base32::Alphabet::RFC4648 { padding: false }, &onion).expect("error in onion");
682689
let version = onion[0];
@@ -685,7 +692,7 @@ impl FromStr for NetAddress {
685692
return Ok(NetAddress::OnionV3 { ed25519_pubkey, checksum, version, port });
686693
}
687694

688-
if let Ok(hostname) = Hostname::try_from(host) {
695+
if let Ok(hostname) = Hostname::try_from(host.to_string()) {
689696
return Ok(NetAddress::Hostname { hostname, port });
690697
}
691698

@@ -3142,7 +3149,7 @@ mod tests {
31423149
});
31433150
}
31443151
Ok(encoded_payload)
3145-
}
3152+
}
31463153

31473154
#[test]
31483155
fn net_address_from_str() {
@@ -3159,15 +3166,16 @@ mod tests {
31593166
port: 1234,
31603167
};
31613168
let onionv3_net_address = NetAddress::OnionV3 {
3162-
port: 1234,
3163-
ed25519_pubkey: [0xab; 32],
3164-
checksum: 0x1234,
3165-
version: 0x03,
3169+
ed25519_pubkey: [37, 24, 75, 5, 25, 73, 117, 194, 139, 102, 182, 107, 4, 105, 247, 246, 85,
3170+
111, 177, 172, 49, 137, 167, 155, 64, 221, 163, 47, 31, 33, 71, 3],
3171+
checksum: 48326,
3172+
version: 121,
3173+
port: 1234
31663174
};
3167-
let valid_ipv4 = "127.0.0.1@1234";
3168-
let valid_ipv6 = "0:0:0:0:0:0:0:1@1234";
3169-
let valid_hostname = "example.com@1234";
3170-
let valid_onionv3 = "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789.onion@1234";
3175+
let valid_ipv4 = "127.0.0.1:1234";
3176+
let valid_ipv6 = "[0:0:0:0:0:0:0:1]:1234";
3177+
let valid_hostname = "example.com:1234";
3178+
let valid_onionv3 = "pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion:1234";
31713179
let result_ipv4 = NetAddress::from_str(valid_ipv4).unwrap();
31723180
let result_ipv6 = NetAddress::from_str(valid_ipv6).unwrap();
31733181
let result_hostname = NetAddress::from_str(valid_hostname).unwrap();

0 commit comments

Comments
 (0)