None
}
- fn parse_request(&mut self, input: &[u8], is_tcp: bool) -> bool {
+ fn parse_request(&mut self, input: &[u8], is_tcp: bool, frame: Option<Frame>, flow: *const core::Flow,) -> bool {
let (body, header) = if let Some((body, header)) = self.validate_header(input) {
(body, header)
} else {
let opcode = ((request.header.flags >> 11) & 0xf) as u8;
let mut tx = self.new_tx(Direction::ToServer);
+ if let Some(frame) = frame {
+ frame.set_tx(flow, tx.id);
+ }
tx.request = Some(request);
self.transactions.push_back(tx);
fn parse_request_udp(&mut self, flow: *const core::Flow, stream_slice: StreamSlice) -> bool {
let input = stream_slice.as_slice();
- let _pdu = Frame::new(
+ let frame = Frame::new(
flow,
&stream_slice,
input,
DnsFrameType::Pdu as u8,
None,
);
- self.parse_request(input, false)
+ self.parse_request(input, false, frame, flow)
}
fn parse_response_udp(&mut self, flow: *const core::Flow, stream_slice: StreamSlice) -> bool {
let input = stream_slice.as_slice();
- let _pdu = Frame::new(
+ let frame = Frame::new(
flow,
&stream_slice,
input,
DnsFrameType::Pdu as u8,
None,
);
- self.parse_response(input, false)
+ self.parse_response(input, false, frame, flow)
}
- fn parse_response(&mut self, input: &[u8], is_tcp: bool) -> bool {
+ fn parse_response(&mut self, input: &[u8], is_tcp: bool, frame: Option<Frame>, flow: *const core::Flow) -> bool {
let (body, header) = if let Some((body, header)) = self.validate_header(input) {
(body, header)
} else {
let opcode = ((response.header.flags >> 11) & 0xf) as u8;
let mut tx = self.new_tx(Direction::ToClient);
+ if let Some(frame) = frame {
+ frame.set_tx(flow, tx.id);
+ }
if let Some(ref mut config) = &mut self.config {
if let Some(config) = config.remove(&response.header.tx_id) {
tx.tx_data.config = config;
);
if size > 0 && cur_i.len() >= size + 2 {
let msg = &cur_i[2..(size + 2)];
- let _pdu = Frame::new(
+ let frame = Frame::new(
flow,
&stream_slice,
msg,
DnsFrameType::Pdu as u8,
None,
);
- if self.parse_request(msg, true) {
+ if self.parse_request(msg, true, frame, flow) {
cur_i = &cur_i[(size + 2)..];
consumed += size + 2;
} else {
);
if size > 0 && cur_i.len() >= size + 2 {
let msg = &cur_i[2..(size + 2)];
- let _pdu = Frame::new(
+ let frame = Frame::new(
flow,
&stream_slice,
msg,
DnsFrameType::Pdu as u8,
None,
);
- if self.parse_response(msg, true) {
+ if self.parse_response(msg, true, frame, flow) {
cur_i = &cur_i[(size + 2)..];
consumed += size + 2;
} else {
0x80,
];
let mut state = DNSState::new();
- assert!(state.parse_response(buf, false));
+ assert!(state.parse_response(buf, false, None, std::ptr::null()));
}
// Port of the C RustDNSUDPParserTest02 unit test.
0x10,0x00,0x02,0xC0,0x85,0x00,0x00,0x29,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
];
let mut state = DNSState::new();
- assert!(state.parse_response(buf, false));
+ assert!(state.parse_response(buf, false, None, std::ptr::null()));
}
// Port of the C RustDNSUDPParserTest03 unit test.
0x29,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00
];
let mut state = DNSState::new();
- assert!(state.parse_response(buf, false));
+ assert!(state.parse_response(buf, false, None, std::ptr::null()));
}
// Port of the C RustDNSUDPParserTest04 unit test.
0x6b,0x00,0x01,0x00,0x01,0x00,0x09,0x3a,0x80,0x00,0x04,0x0a,0x1e,0x1c,0x5f
];
let mut state = DNSState::new();
- assert!(state.parse_response(buf, false));
+ assert!(state.parse_response(buf, false, None, std::ptr::null()));
}
// Port of the C RustDNSUDPParserTest05 unit test.
0x6b,0x00,0x01,0x00,0x01,0x00,0x09,0x3a,0x80,0x00,0x04,0x0a,0x1e,0x1c,0x5f
];
let mut state = DNSState::new();
- assert!(!state.parse_response(buf, false));
+ assert!(!state.parse_response(buf, false, None, std::ptr::null()));
}
// Port of the C RustDNSTCPParserTestMultiRecord unit test.