Skip to content

Commit 513bb88

Browse files
committed
f use hostname type
1 parent 6b760e7 commit 513bb88

File tree

2 files changed

+13
-16
lines changed

2 files changed

+13
-16
lines changed

lightning/src/onion_message/dns_resolution.rs

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use crate::ln::msgs::DecodeError;
2222
use crate::onion_message::messenger::{MessageSendInstructions, Responder, ResponseInstruction};
2323
use crate::onion_message::packet::OnionMessageContents;
2424
use crate::prelude::*;
25-
use crate::util::ser::{Readable, ReadableArgs, Writeable, Writer};
25+
use crate::util::ser::{Hostname, Readable, ReadableArgs, Writeable, Writer};
2626

2727
/// A handler for an [`OnionMessage`] containing a DNS(SEC) query or a DNSSEC proof
2828
///
@@ -99,29 +99,16 @@ impl Writeable for DNSResolverMessage {
9999
}
100100
}
101101

102-
fn read_byte_len_ascii_string<R: io::Read>(buffer: &mut R) -> Result<String, DecodeError> {
103-
let len: u8 = Readable::read(buffer)?;
104-
let mut bytes = [0; 255];
105-
buffer.read_exact(&mut bytes[..len as usize])?;
106-
if bytes[..len as usize].iter().any(|b| *b < 0x20 || *b > 0x7e) {
107-
// If the bytes are not entirely in the printable ASCII range, fail
108-
return Err(DecodeError::InvalidValue);
109-
}
110-
let s =
111-
String::from_utf8(bytes[..len as usize].to_vec()).map_err(|_| DecodeError::InvalidValue)?;
112-
Ok(s)
113-
}
114-
115102
impl ReadableArgs<u64> for DNSResolverMessage {
116103
fn read<R: io::Read>(r: &mut R, message_type: u64) -> Result<Self, DecodeError> {
117104
match message_type {
118105
DNSSEC_QUERY_TYPE => {
119-
let s = read_byte_len_ascii_string(r)?;
106+
let s = Hostname::read(r)?;
120107
let name = s.try_into().map_err(|_| DecodeError::InvalidValue)?;
121108
Ok(DNSResolverMessage::DNSSECQuery(DNSSECQuery(name)))
122109
},
123110
DNSSEC_PROOF_TYPE => {
124-
let s = read_byte_len_ascii_string(r)?;
111+
let s = Hostname::read(r)?;
125112
let name = s.try_into().map_err(|_| DecodeError::InvalidValue)?;
126113
let proof = Readable::read(r)?;
127114
Ok(DNSResolverMessage::DNSSECProof(DNSSECProof { name, proof }))

lightning/src/util/ser.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ use bitcoin::hashes::hmac::Hmac;
3737
use bitcoin::hashes::sha256d::Hash as Sha256dHash;
3838
use bitcoin::hashes::sha256::Hash as Sha256;
3939
use bitcoin::hash_types::{Txid, BlockHash};
40+
41+
use dnssec_prover::rr::Name;
42+
4043
use core::time::Duration;
4144
use crate::chain::ClaimId;
4245
use crate::ln::msgs::DecodeError;
@@ -1551,6 +1554,13 @@ impl Readable for Hostname {
15511554
}
15521555
}
15531556

1557+
impl TryInto<Name> for Hostname {
1558+
type Error = ();
1559+
fn try_into(self) -> Result<Name, ()> {
1560+
Name::try_from(self.0)
1561+
}
1562+
}
1563+
15541564
/// This is not exported to bindings users as `Duration`s are simply mapped as ints.
15551565
impl Writeable for Duration {
15561566
#[inline]

0 commit comments

Comments
 (0)