Skip to content

Commit

Permalink
rust/ldap: code refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
glongo committed Aug 6, 2024
1 parent 5989139 commit 5f7a939
Showing 1 changed file with 47 additions and 65 deletions.
112 changes: 47 additions & 65 deletions rust/src/ldap/ldap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -216,20 +216,13 @@ impl LdapState {
let mut tx = self.new_tx();
let tx_id = tx.id();
let request = LdapMessage::from(msg);
tx.complete = match request.protocol_op {
ProtocolOp::UnbindRequest => true,
_ => false,
};
tx.complete = tx_is_complete(&request.protocol_op, Direction::ToServer);
tx.request = Some(request);
self.transactions.push_back(tx);

let consumed = start.len() - rem.len();
start = rem;
if let Some(frame) = &self.request_frame {
frame.set_len(flow, consumed as i64);
frame.set_tx(flow, tx_id);
self.request_frame = None;
}
self.set_frame_ts(flow, tx_id, consumed as i64);
}
Err(nom::Err::Incomplete(_)) => {
let consumed = input.len() - start.len();
Expand Down Expand Up @@ -284,25 +277,11 @@ impl LdapState {
Ok((rem, msg)) => {
let response = LdapMessage::from(msg);
if let Some(tx) = self.find_request(response.message_id) {
tx.complete = match response.protocol_op {
ProtocolOp::SearchResultDone(_)
| ProtocolOp::BindResponse(_)
| ProtocolOp::ModifyResponse(_)
| ProtocolOp::AddResponse(_)
| ProtocolOp::DelResponse(_)
| ProtocolOp::ModDnResponse(_)
| ProtocolOp::CompareResponse(_)
| ProtocolOp::ExtendedResponse(_) => true,
_ => false,
};
tx.complete = tx_is_complete(&response.protocol_op, Direction::ToClient);
let tx_id = tx.id();
tx.responses.push_back(response);
let consumed = start.len() - rem.len();
if let Some(frame) = &self.response_frame {
frame.set_len(flow, consumed as i64);
frame.set_tx(flow, tx_id);
self.response_frame = None;
}
self.set_frame_tc(flow, tx_id, consumed as i64);
} else if let ProtocolOp::ExtendedResponse(_) = response.protocol_op {
// this is an unsolicited notification, which means
// there is no request
Expand All @@ -312,11 +291,7 @@ impl LdapState {
tx.responses.push_back(response);
self.transactions.push_back(tx);
let consumed = start.len() - rem.len();
if let Some(frame) = &self.response_frame {
frame.set_len(flow, consumed as i64);
frame.set_tx(flow, tx_id);
self.response_frame = None;
}
self.set_frame_tc(flow, tx_id, consumed as i64);
} else {
let mut tx = self.new_tx();
tx.complete = true;
Expand All @@ -325,11 +300,7 @@ impl LdapState {
self.transactions.push_back(tx);
self.set_event(LdapEvent::RequestNotFound);
let consumed = start.len() - rem.len();
if let Some(frame) = &self.response_frame {
frame.set_len(flow, consumed as i64);
frame.set_tx(flow, tx_id);
self.response_frame = None;
}
self.set_frame_tc(flow, tx_id, consumed as i64);
};
start = rem;
}
Expand Down Expand Up @@ -366,10 +337,7 @@ impl LdapState {
Ok((_, msg)) => {
let mut tx = self.new_tx();
let request = LdapMessage::from(msg);
tx.complete = match request.protocol_op {
ProtocolOp::UnbindRequest => true,
_ => false,
};
tx.complete = tx_is_complete(&request.protocol_op, Direction::ToServer);
tx.request = Some(request);
self.transactions.push_back(tx);
}
Expand Down Expand Up @@ -411,25 +379,11 @@ impl LdapState {
Ok((rem, msg)) => {
let response = LdapMessage::from(msg);
if let Some(tx) = self.find_request(response.message_id) {
tx.complete = match response.protocol_op {
ProtocolOp::SearchResultDone(_)
| ProtocolOp::BindResponse(_)
| ProtocolOp::ModifyResponse(_)
| ProtocolOp::AddResponse(_)
| ProtocolOp::DelResponse(_)
| ProtocolOp::ModDnResponse(_)
| ProtocolOp::CompareResponse(_)
| ProtocolOp::ExtendedResponse(_) => true,
_ => false,
};
tx.complete = tx_is_complete(&response.protocol_op, Direction::ToClient);
let tx_id = tx.id();
tx.responses.push_back(response);
let consumed = start.len() - rem.len();
if let Some(frame) = &self.response_frame {
frame.set_len(flow, consumed as i64);
frame.set_tx(flow, tx_id);
self.response_frame = None;
}
self.set_frame_tc(flow, tx_id, consumed as i64);
} else if let ProtocolOp::ExtendedResponse(_) = response.protocol_op {
// this is an unsolicited notification, which means
// there is no request
Expand All @@ -439,11 +393,7 @@ impl LdapState {
tx.responses.push_back(response);
self.transactions.push_back(tx);
let consumed = start.len() - rem.len();
if let Some(frame) = &self.response_frame {
frame.set_len(flow, consumed as i64);
frame.set_tx(flow, tx_id);
self.response_frame = None;
}
self.set_frame_tc(flow, tx_id, consumed as i64);
} else {
let mut tx = self.new_tx();
tx.complete = true;
Expand All @@ -452,11 +402,7 @@ impl LdapState {
self.transactions.push_back(tx);
self.set_event(LdapEvent::RequestNotFound);
let consumed = start.len() - rem.len();
if let Some(frame) = &self.response_frame {
frame.set_len(flow, consumed as i64);
frame.set_tx(flow, tx_id);
self.response_frame = None;
}
self.set_frame_tc(flow, tx_id, consumed as i64);
};
start = rem;
}
Expand All @@ -481,6 +427,42 @@ impl LdapState {
fn on_response_gap(&mut self, _size: u32) {
self.response_gap = true;
}

fn set_frame_ts(&mut self, flow: *const Flow, tx_id: u64, consumed: i64) {
if let Some(frame) = &self.request_frame {
frame.set_len(flow, consumed as i64);
frame.set_tx(flow, tx_id);
self.request_frame = None;
}
}

fn set_frame_tc(&mut self, flow: *const Flow, tx_id: u64, consumed: i64) {
if let Some(frame) = &self.response_frame {
frame.set_len(flow, consumed as i64);
frame.set_tx(flow, tx_id);
self.response_frame = None;
}
}
}

fn tx_is_complete(op: &ProtocolOp, dir: Direction) -> bool {
match dir {
Direction::ToServer => match op {
ProtocolOp::UnbindRequest => true,
_ => false,
},
Direction::ToClient => match op {
ProtocolOp::SearchResultDone(_)
| ProtocolOp::BindResponse(_)
| ProtocolOp::ModifyResponse(_)
| ProtocolOp::AddResponse(_)
| ProtocolOp::DelResponse(_)
| ProtocolOp::ModDnResponse(_)
| ProtocolOp::CompareResponse(_)
| ProtocolOp::ExtendedResponse(_) => true,
_ => false,
},
}
}

fn probe(input: &[u8], direction: Direction, rdir: *mut u8) -> AppProto {
Expand Down

0 comments on commit 5f7a939

Please sign in to comment.