Skip to content

Commit e67b56b

Browse files
authored
🐛 Fix message_type error and adjust debug log output
1 parent 27eb918 commit e67b56b

File tree

4 files changed

+76
-49
lines changed

4 files changed

+76
-49
lines changed

src/app.rs

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::{
22
collections::HashMap,
3-
ops::DerefMut,
3+
ops::{Deref, DerefMut},
44
path::PathBuf,
55
sync::Arc,
66
time::{Duration, Instant},
@@ -338,7 +338,7 @@ async fn process(
338338
server_opts: ServerOpts,
339339
) -> SerialMessage {
340340
use crate::libdns::proto::error::ProtoError;
341-
use crate::libdns::proto::op::{Edns, Header, Message, MessageType, OpCode, ResponseCode};
341+
use crate::libdns::proto::op::{Header, Message, MessageType, OpCode, ResponseCode};
342342

343343
let addr = message.addr();
344344
let protocol = message.protocol();
@@ -349,36 +349,6 @@ async fn process(
349349
MessageType::Query => {
350350
match request.op_code() {
351351
OpCode::Query => {
352-
let id = request.id();
353-
let qflags = request.header().flags();
354-
let qop_code = request.op_code();
355-
let message_type = request.message_type();
356-
let is_dnssec =
357-
request.extensions().as_ref().map_or(false, Edns::dnssec_ok);
358-
359-
{
360-
let src_addr = request.src();
361-
let protocol = request.protocol();
362-
let query = request.query();
363-
let query_name = query.name();
364-
let query_type = query.query_type();
365-
let query_class = query.query_class();
366-
log::debug!(
367-
"request:{id} src:{proto}://{addr}#{port} type:{message_type} dnssec:{is_dnssec} {op}:{query}:{qtype}:{class} qflags:{qflags}",
368-
id = id,
369-
proto = protocol,
370-
addr = src_addr.ip(),
371-
port = src_addr.port(),
372-
message_type= message_type,
373-
is_dnssec = is_dnssec,
374-
op = qop_code,
375-
query = query_name,
376-
qtype = query_type,
377-
class = query_class,
378-
qflags = qflags,
379-
);
380-
}
381-
382352
// start process
383353
let request_header = request.header();
384354
let mut response_header = Header::response_from_request(request_header);
@@ -387,18 +357,42 @@ async fn process(
387357
response_header.set_authoritative(false);
388358

389359
let response = {
360+
let start = Instant::now();
390361
let res = handler.search(&request, &server_opts).await;
362+
363+
log::debug!(
364+
"{}Request: {:?}",
365+
if server_opts.is_background {
366+
"Background"
367+
} else {
368+
""
369+
},
370+
request
371+
);
391372
match res {
392-
Ok(lookup) => lookup,
373+
Ok(lookup) => {
374+
log::debug!(
375+
"Response: {}, Duration: {:?}",
376+
lookup.deref(),
377+
start.elapsed()
378+
);
379+
lookup
380+
}
393381
Err(e) => {
394382
if e.is_nx_domain() {
383+
log::debug!("{}Response: error resolving: NXDomain, Duration: {:?}", if server_opts.is_background { "Background"} else { "" }, start.elapsed());
395384
response_header
396385
.set_response_code(ResponseCode::NXDomain);
397386
}
398387
match e.as_soa() {
399388
Some(soa) => soa,
400389
None => {
401-
log::debug!("error resolving: {}", e);
390+
log::debug!(
391+
"{}Response: error resolving: {}, Duration: {:?}",
392+
if server_opts.is_background { "Background"} else { "" },
393+
e,
394+
start.elapsed()
395+
);
402396
DnsResponse::empty()
403397
}
404398
}

src/dns.rs

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ mod serial_message {
210210

211211
mod request {
212212

213-
use std::{net::SocketAddr, ops::Deref, sync::Arc};
213+
use std::{fmt::Debug, net::SocketAddr, ops::Deref, sync::Arc};
214214

215215
use crate::libdns::{
216216
proto::{
@@ -298,6 +298,38 @@ mod request {
298298
}
299299
}
300300

301+
impl Debug for DnsRequest {
302+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
303+
let id = self.id();
304+
let src_addr = self.src();
305+
let protocol = self.protocol();
306+
let query = self.query();
307+
let query_name = query.name();
308+
let query_type = query.query_type();
309+
let query_class = query.query_class();
310+
311+
let message_type = self.message_type();
312+
let is_dnssec = self.is_dnssec();
313+
let qop_code = self.op_code();
314+
let qflags = self.flags();
315+
316+
write!(f,
317+
"{id} src:{proto}://{addr}#{port} type:{message_type} dnssec:{is_dnssec} {op}:{query}:{qtype}:{class} qflags:{qflags}",
318+
id = id,
319+
proto = protocol,
320+
addr = src_addr.ip(),
321+
port = src_addr.port(),
322+
message_type= message_type,
323+
is_dnssec = is_dnssec,
324+
op = qop_code,
325+
query = query_name,
326+
qtype = query_type,
327+
class = query_class,
328+
qflags = qflags,
329+
)
330+
}
331+
}
332+
301333
impl std::ops::Deref for DnsRequest {
302334
type Target = Message;
303335

@@ -346,7 +378,7 @@ mod response {
346378

347379
use crate::dns_client::MAX_TTL;
348380
use crate::libdns::proto::{
349-
op::{self, Header, Message, Query},
381+
op::{self, Header, Message, MessageType, Query},
350382
rr::{RData, Record},
351383
};
352384
use crate::libdns::resolver::TtlClip as _;
@@ -384,6 +416,7 @@ mod response {
384416
{
385417
use op::message::{update_header_counts, HeaderCounts};
386418
let mut message = Message::new();
419+
message.set_message_type(MessageType::Response);
387420
message.add_query(query.clone());
388421
message.add_answers(records);
389422

src/dns_conf.rs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -919,20 +919,19 @@ fn resolve_filepath<P: AsRef<Path>>(filepath: P, base_file: Option<&PathBuf>) ->
919919
}
920920
}
921921
}
922-
} else {
923-
// try to resolve absolute path by extracting its file_name
924-
if let Some(new_path) = filepath.file_name().map(|f| resolve_filepath(f, base_file)) {
925-
if new_path.is_file() {
926-
log::warn!(
927-
"File {} not found, but {} found",
928-
filepath.display(),
929-
new_path.display()
930-
);
931-
return new_path;
932-
}
933-
}
934922
}
935923

924+
// try to resolve absolute path by extracting its file_name
925+
if let Some(new_path) = filepath.file_name().map(|f| resolve_filepath(f, base_file)) {
926+
if new_path.is_file() {
927+
log::warn!(
928+
"File {} not found, but {} found",
929+
filepath.display(),
930+
new_path.display()
931+
);
932+
return new_path;
933+
}
934+
}
936935
filepath.to_path_buf()
937936
}
938937

src/server/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ mod tcp;
88
mod tls;
99
mod udp;
1010

11-
use crate::libdns::proto::op::{Header, Message, ResponseCode};
11+
use crate::libdns::proto::op::{Header, Message, MessageType, ResponseCode};
1212
use std::{
1313
net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr},
1414
path::Path,
@@ -218,6 +218,7 @@ impl DnsHandle {
218218
Err(_) => {
219219
let mut response_header = Header::default();
220220
response_header.set_response_code(ResponseCode::Refused);
221+
response_header.set_message_type(MessageType::Response);
221222
let mut response_message = Message::new();
222223
response_message.set_header(response_header);
223224
response_message.into()

0 commit comments

Comments
 (0)