Skip to content

Commit 7cac991

Browse files
committed
fix testing in onionv3
1 parent c0c9479 commit 7cac991

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
@@ -638,22 +638,29 @@ impl Readable for NetAddress {
638638
}
639639
}
640640

641+
fn rem_first_and_last(value: &str) -> &str {
642+
let mut chars = value.chars();
643+
chars.next();
644+
chars.next_back();
645+
chars.as_str()
646+
}
647+
641648
impl FromStr for NetAddress {
642649
type Err = AddrParseError;
643650

644651
fn from_str(s: &str) -> Result<Self, Self::Err> {
645-
let host: String = s.split("@").collect::<Vec<&str>>()[0].parse().expect("Invalid hostname");
646-
let port: u16 = s.split("@").collect::<Vec<&str>>()[1].parse().expect("Invalid port");
652+
let trim_s_by_latest_colon = s.rfind(":").unwrap();
653+
let host = &s[..trim_s_by_latest_colon];
654+
let port: u16 = s[trim_s_by_latest_colon + 1..].parse().expect("Invalid port");
647655
if let Ok(addr) = host.parse::<Ipv4Addr>() {
648656
let addr = SocketAddrV4::new(addr, port);
649657
return Ok(NetAddress::IPv4 { addr: addr.ip().octets(), port });
650658
}
651-
if let Ok(addr) = host.parse::<Ipv6Addr>() {
659+
if let Ok(addr) = rem_first_and_last(host).parse::<Ipv6Addr>() {
652660
let addr = SocketAddrV6::new(addr, port, 0, 0);
653661
return Ok(NetAddress::IPv6 { addr: addr.ip().octets(), port });
654662
};
655663
if host.ends_with(".onion") {
656-
// tests are failing
657664
let onion = host.split(".onion").collect::<Vec<&str>>()[0];
658665
let onion = base32::decode(base32::Alphabet::RFC4648 { padding: false }, &onion).expect("error in onion");
659666
let version = onion[0];
@@ -662,7 +669,7 @@ impl FromStr for NetAddress {
662669
return Ok(NetAddress::OnionV3 { ed25519_pubkey, checksum, version, port });
663670
}
664671

665-
if let Ok(hostname) = Hostname::try_from(host) {
672+
if let Ok(hostname) = Hostname::try_from(host.to_string()) {
666673
return Ok(NetAddress::Hostname { hostname, port });
667674
}
668675

@@ -3036,7 +3043,7 @@ mod tests {
30363043
});
30373044
}
30383045
Ok(encoded_payload)
3039-
}
3046+
}
30403047

30413048
#[test]
30423049
fn net_address_from_str() {
@@ -3053,15 +3060,16 @@ mod tests {
30533060
port: 1234,
30543061
};
30553062
let onionv3_net_address = NetAddress::OnionV3 {
3056-
port: 1234,
3057-
ed25519_pubkey: [0xab; 32],
3058-
checksum: 0x1234,
3059-
version: 0x03,
3063+
ed25519_pubkey: [37, 24, 75, 5, 25, 73, 117, 194, 139, 102, 182, 107, 4, 105, 247, 246, 85,
3064+
111, 177, 172, 49, 137, 167, 155, 64, 221, 163, 47, 31, 33, 71, 3],
3065+
checksum: 48326,
3066+
version: 121,
3067+
port: 1234
30603068
};
3061-
let valid_ipv4 = "127.0.0.1@1234";
3062-
let valid_ipv6 = "0:0:0:0:0:0:0:1@1234";
3063-
let valid_hostname = "example.com@1234";
3064-
let valid_onionv3 = "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789.onion@1234";
3069+
let valid_ipv4 = "127.0.0.1:1234";
3070+
let valid_ipv6 = "[0:0:0:0:0:0:0:1]:1234";
3071+
let valid_hostname = "example.com:1234";
3072+
let valid_onionv3 = "pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion:1234";
30653073
let result_ipv4 = NetAddress::from_str(valid_ipv4).unwrap();
30663074
let result_ipv6 = NetAddress::from_str(valid_ipv6).unwrap();
30673075
let result_hostname = NetAddress::from_str(valid_hostname).unwrap();

0 commit comments

Comments
 (0)