From b66a9dc9a036d1894a1becfb4fc57d3e85d6225f Mon Sep 17 00:00:00 2001 From: tim Date: Tue, 17 Dec 2024 12:00:05 +0100 Subject: [PATCH 1/2] Fork with ttl implementation and simple fixes --- src/dns_parser/.mod.rs.swp | Bin 0 -> 12288 bytes src/dns_parser/.structs.rs.swp | Bin 0 -> 12288 bytes src/dns_parser/mod.rs | 1 + src/dns_parser/structs.rs | 2 ++ src/lib.rs | 37 +++++++++++++++++++++++++++++++++ 5 files changed, 40 insertions(+) create mode 100644 src/dns_parser/.mod.rs.swp create mode 100644 src/dns_parser/.structs.rs.swp diff --git a/src/dns_parser/.mod.rs.swp b/src/dns_parser/.mod.rs.swp new file mode 100644 index 0000000000000000000000000000000000000000..31ad43075c754545d27f7235e8a0645f5fd62f02 GIT binary patch literal 12288 zcmeI2&uY~`6vn55JFkCVAli-My-lkWGXMCYj;P43|r(K7cRb zLfrczx)z_qg$u!xOhk-a#AW3h_;QkyGaqw)SxuO9{po{8(e1Sj!Q;FT`@8b_`|UGg z@Ky*{R897;<4{sQm!wLWY8q`Wt$)Ra@#JBl>mAZBROW14q=g+7W@d}Zm(pp9%ObVS zrOIm?TgqaNGb70=iYuM3kzMMK7a#xvO9*&(FuFAmH*ajLHx;W_E=QLx?ky=s8U#Q9 z1V8`;KmY_l00cnbeBa650R%t*1V8`;KmY_l00ck)1V8`; zK;Q%tkhu`w2SV(f<;C;n|L6Yy>p3Alvp%wpS%$UAy3V@5I?ejVbH1=Xu|BZgvEHy+ zuM@}uO9lZD009sH0T2KI5C8!X009vAM*_yDk+&+csys-N)E8y0C`pd))ON1O4x_sv zHH>z>vW^dg+vBlVeJ0CN&#(HL=jOAbGMb#dwlDbDchs4T#qZukxpXo~rqeBsJu7l+rSz$0pOcYRzcTa56_$c literal 0 HcmV?d00001 diff --git a/src/dns_parser/.structs.rs.swp b/src/dns_parser/.structs.rs.swp new file mode 100644 index 0000000000000000000000000000000000000000..786856071673e02832c0b587a85f7dcc7754b87b GIT binary patch literal 12288 zcmeI2&2AGh5XW75LbQP31qO1UNKLjMLV~42D(wLzs6qxDO z4G<5&g^Gtjr7wX5LgLB^@d}JL35iNWxfW)nf1J$NW6#f%LzIbT)^6X0Yn54s&soO4 zReAmC$^@Hy!sL1-4rbumIO&s93o^fNP39K_YuBsS2au0G40U~e+f!uABuTHZ0x!D=-EnU0- z=g&PjWFnb}01+SpM1Tko0U|&IhyW4zR|&Xmj6KKXPV^Ei^~SLSWA7skM1Tko0U|&I zhyW2F0z`la5CI}U1c<;fB)|n@`==Na6L@(1|G)qH|HB!^_E7IouTd{io2XS(88wdj zcpCkvUDR7t9kqs9K$TD@QQs#S`-1w6`h?m?y+^fBCDb_T2k!k9wTIe8y+XY}ZJ>&C z9Yd~kWFkNWhyW2F0z`la5CJ0azY^GCfKQf3Ah_cp)N0E(E?nX_rhj>yOG3!!=LVKI zu^}ua+}eRHxP?3|x{L+bM8y*H21Hv<+DhS1R8u)Apd+Ed+Y+p9N^o15w0>g7 z<4x%-bQ&sd0Cqy71sj$H@Kk_y4QU`Vx~+s1MYM+!xN3saeKW4qi3G#bda?8J$|{&5 z5evM{6?Rr9vH~}A=TC}l)Do2Sp^9*eU{zYj^@C-M4WPI35F)LU0mfGBv4(IjmuBk# z;+D^<=emz?hgSW8K1Q+*8@oqw_ly_&RN_XSZhCIM96+Ujgt}(|i(TOu#yh>S3wAge zE`;(kIF`$rj2C{t_MxKk2gbhfwltXRk+XSfJAXH`)yuXQbvXH<-5XeA(u8oU7^m4# yu~v(M83k)pkyg7! { pub header: Header, @@ -24,6 +25,7 @@ pub struct Question<'a> { /// We aim to provide whole range of DNS records available. But as time is /// limited we have some types of packets which are parsed and other provided /// as unparsed slice of bytes. +#[allow(dead_code)] #[derive(Debug)] pub struct ResourceRecord<'a> { pub name: Name<'a>, diff --git a/src/lib.rs b/src/lib.rs index 15f13fb..3eedf4f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -269,6 +269,43 @@ impl Responder { _shutdown: self.shutdown.clone(), } } + + #[must_use] + pub fn register_with_ttl(&self, svc_type: String, svc_name: String, port: u16, txt: &[&str], ttl: u32) -> Service { + let txt = if txt.is_empty() { + vec![0] + } else { + txt.iter() + .flat_map(|entry| { + let entry = entry.as_bytes(); + if entry.len() > 255 { + panic!("{:?} is too long for a TXT record", entry); + } + std::iter::once(entry.len() as u8).chain(entry.iter().cloned()) + }) + .collect() + }; + + let svc = ServiceData { + typ: Name::from_str(format!("{}.local", svc_type)).unwrap(), + name: Name::from_str(format!("{}.{}.local", svc_name, svc_type)).unwrap(), + port: port, + txt: txt, + }; + + self.commands + .borrow_mut() + .send_unsolicited(svc.clone(), ttl, true); + + let id = self.services.write().unwrap().register(svc); + + Service { + id: id, + commands: self.commands.borrow().clone(), + services: self.services.clone(), + _shutdown: self.shutdown.clone(), + } + } } impl Drop for Service { From 67fdd6e463cffc2574c88ab82f5b3c9ee751bda3 Mon Sep 17 00:00:00 2001 From: tim Date: Tue, 17 Dec 2024 12:00:30 +0100 Subject: [PATCH 2/2] Fork with ttl implementation and simple fixes --- src/dns_parser/.mod.rs.swp | Bin 12288 -> 0 bytes src/dns_parser/.structs.rs.swp | Bin 12288 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/dns_parser/.mod.rs.swp delete mode 100644 src/dns_parser/.structs.rs.swp diff --git a/src/dns_parser/.mod.rs.swp b/src/dns_parser/.mod.rs.swp deleted file mode 100644 index 31ad43075c754545d27f7235e8a0645f5fd62f02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2&uY~`6vn55JFkCVAli-My-lkWGXMCYj;P43|r(K7cRb zLfrczx)z_qg$u!xOhk-a#AW3h_;QkyGaqw)SxuO9{po{8(e1Sj!Q;FT`@8b_`|UGg z@Ky*{R897;<4{sQm!wLWY8q`Wt$)Ra@#JBl>mAZBROW14q=g+7W@d}Zm(pp9%ObVS zrOIm?TgqaNGb70=iYuM3kzMMK7a#xvO9*&(FuFAmH*ajLHx;W_E=QLx?ky=s8U#Q9 z1V8`;KmY_l00cnbeBa650R%t*1V8`;KmY_l00ck)1V8`; zK;Q%tkhu`w2SV(f<;C;n|L6Yy>p3Alvp%wpS%$UAy3V@5I?ejVbH1=Xu|BZgvEHy+ zuM@}uO9lZD009sH0T2KI5C8!X009vAM*_yDk+&+csys-N)E8y0C`pd))ON1O4x_sv zHH>z>vW^dg+vBlVeJ0CN&#(HL=jOAbGMb#dwlDbDchs4T#qZukxpXo~rqeBsJu7l+rSz$0pOcYRzcTa56_$c diff --git a/src/dns_parser/.structs.rs.swp b/src/dns_parser/.structs.rs.swp deleted file mode 100644 index 786856071673e02832c0b587a85f7dcc7754b87b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2&2AGh5XW75LbQP31qO1UNKLjMLV~42D(wLzs6qxDO z4G<5&g^Gtjr7wX5LgLB^@d}JL35iNWxfW)nf1J$NW6#f%LzIbT)^6X0Yn54s&soO4 zReAmC$^@Hy!sL1-4rbumIO&s93o^fNP39K_YuBsS2au0G40U~e+f!uABuTHZ0x!D=-EnU0- z=g&PjWFnb}01+SpM1Tko0U|&IhyW4zR|&Xmj6KKXPV^Ei^~SLSWA7skM1Tko0U|&I zhyW2F0z`la5CI}U1c<;fB)|n@`==Na6L@(1|G)qH|HB!^_E7IouTd{io2XS(88wdj zcpCkvUDR7t9kqs9K$TD@QQs#S`-1w6`h?m?y+^fBCDb_T2k!k9wTIe8y+XY}ZJ>&C z9Yd~kWFkNWhyW2F0z`la5CJ0azY^GCfKQf3Ah_cp)N0E(E?nX_rhj>yOG3!!=LVKI zu^}ua+}eRHxP?3|x{L+bM8y*H21Hv<+DhS1R8u)Apd+Ed+Y+p9N^o15w0>g7 z<4x%-bQ&sd0Cqy71sj$H@Kk_y4QU`Vx~+s1MYM+!xN3saeKW4qi3G#bda?8J$|{&5 z5evM{6?Rr9vH~}A=TC}l)Do2Sp^9*eU{zYj^@C-M4WPI35F)LU0mfGBv4(IjmuBk# z;+D^<=emz?hgSW8K1Q+*8@oqw_ly_&RN_XSZhCIM96+Ujgt}(|i(TOu#yh>S3wAge zE`;(kIF`$rj2C{t_MxKk2gbhfwltXRk+XSfJAXH`)yuXQbvXH<-5XeA(u8oU7^m4# yu~v(M83k)pkyg7!