| 579 | } |
| 580 | |
| 581 | fn parse_txt_rrdata<F: FnMut(&str) -> Result<(), Error>>( |
| 582 | rrdata: &[u8], |
| 583 | mut cb: F, |
| 584 | ) -> Result<(), Error> { |
| 585 | let rrdata_len = rrdata.len(); |
| 586 | let mut offset = 0; |
| 587 | while offset < rrdata_len { |
| 588 | let part_len = rrdata[offset] as usize; |
| 589 | if part_len == 0 { |
| 590 | break; |
| 591 | } |
| 592 | ensure!(rrdata_len - offset > part_len, "Short TXT RR data"); |
| 593 | offset += 1; |
| 594 | let part_bin = &rrdata[offset..offset + part_len]; |
| 595 | let part = std::str::from_utf8(part_bin)?; |
| 596 | cb(part)?; |
| 597 | offset += part_len; |
| 598 | } |
| 599 | Ok(()) |
| 600 | } |
| 601 | |
| 602 | pub fn query_meta(packet: &mut Vec<u8>) -> Result<Option<String>, Error> { |
| 603 | let packet_len = packet.len(); |