Skip to content

Commit 812cbad

Browse files
committed
Move verify_message to a free function
1 parent e0fd9a7 commit 812cbad

2 files changed

Lines changed: 38 additions & 29 deletions

File tree

crates/hotfix/src/session.rs

Lines changed: 10 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ pub(crate) mod admin_request;
22
mod ctx;
33
pub mod error;
44
pub(crate) mod event;
5+
mod inbound;
56
mod info;
67
mod outbound;
78
mod session_handle;
@@ -31,13 +32,13 @@ use crate::message::reject::Reject;
3132
use crate::message::resend_request::ResendRequest;
3233
use crate::message::sequence_reset::SequenceReset;
3334
use crate::message::test_request::TestRequest;
34-
use crate::message::verification::verify_message;
3535
use crate::message::verification_error::{CompIdType, MessageVerificationError};
3636
use crate::session::admin_request::AdminRequest;
3737
use crate::session::ctx::SessionCtx;
3838
use crate::session::error::SessionCreationError;
3939
use crate::session::error::{InternalSendError, InternalSendResultExt, SessionOperationError};
4040
pub use crate::session::error::{SendError, SendOutcome};
41+
use crate::session::inbound::verify_message_with_ctx;
4142
pub use crate::session::info::{SessionInfo, Status};
4243
pub use crate::session::session_handle::SessionHandle;
4344
#[cfg(not(feature = "test-utils"))]
@@ -242,7 +243,7 @@ where
242243
&mut self,
243244
message: &Message,
244245
) -> Result<(), SessionOperationError> {
245-
match self.verify_message(message, true, true) {
246+
match verify_message_with_ctx(&self.ctx, message, true, true) {
246247
Ok(_) => {
247248
match self.ctx.application.on_inbound_message(message).await {
248249
InboundDecision::Accept => {}
@@ -315,26 +316,6 @@ where
315316
Ok(())
316317
}
317318

318-
fn verify_message(
319-
&self,
320-
message: &Message,
321-
check_too_high: bool,
322-
check_too_low: bool,
323-
) -> Result<(), MessageVerificationError> {
324-
let expected_seq_number = if check_too_high || check_too_low {
325-
Some(self.ctx.store.next_target_seq_number())
326-
} else {
327-
None
328-
};
329-
verify_message(
330-
message,
331-
&self.ctx.config,
332-
expected_seq_number,
333-
check_too_high,
334-
check_too_low,
335-
)
336-
}
337-
338319
async fn on_connect(&mut self, writer: WriterRef) -> Result<(), SessionOperationError> {
339320
self.state = SessionState::AwaitingLogon(AwaitingLogonState {
340321
writer,
@@ -366,7 +347,7 @@ where
366347

367348
async fn on_logon(&mut self, message: &Message) -> Result<(), SessionOperationError> {
368349
if let SessionState::AwaitingLogon(AwaitingLogonState { writer, .. }) = &self.state {
369-
match self.verify_message(message, true, true) {
350+
match verify_message_with_ctx(&self.ctx, message, true, true) {
370351
Ok(_) => {
371352
// happy logon flow, the session is now active
372353
self.state = SessionState::new_active(
@@ -386,7 +367,7 @@ where
386367
}
387368

388369
async fn on_logout(&mut self, message: &Message) -> Result<(), SessionOperationError> {
389-
if let Err(err) = self.verify_message(message, false, false) {
370+
if let Err(err) = verify_message_with_ctx(&self.ctx, message, false, false) {
390371
self.handle_verification_error(err).await?;
391372
return Ok(());
392373
}
@@ -422,7 +403,7 @@ where
422403
}
423404

424405
async fn on_heartbeat(&mut self, message: &Message) -> Result<(), SessionOperationError> {
425-
if let Err(err) = self.verify_message(message, true, true) {
406+
if let Err(err) = verify_message_with_ctx(&self.ctx, message, true, true) {
426407
self.handle_verification_error(err).await?;
427408
return Ok(());
428409
}
@@ -441,7 +422,7 @@ where
441422
}
442423

443424
async fn on_test_request(&mut self, message: &Message) -> Result<(), SessionOperationError> {
444-
if let Err(err) = self.verify_message(message, true, true) {
425+
if let Err(err) = verify_message_with_ctx(&self.ctx, message, true, true) {
445426
self.handle_verification_error(err).await?;
446427
return Ok(());
447428
}
@@ -470,7 +451,7 @@ where
470451
// This is the key part of the QFJ-673 deadlock fix: when both sides send ResendRequest
471452
// simultaneously, each side's ResendRequest will have a seq number higher than expected.
472453
// By not treating that as an error, we allow the ResendRequest to be processed.
473-
match self.verify_message(message, false, true) {
454+
match verify_message_with_ctx(&self.ctx, message, false, true) {
474455
Ok(_) => {}
475456
Err(err) => {
476457
self.handle_verification_error(err).await?;
@@ -538,7 +519,7 @@ where
538519

539520
/// Handle Reject messages.
540521
async fn on_reject(&mut self, message: &Message) -> Result<(), SessionOperationError> {
541-
if let Err(err) = self.verify_message(message, false, true) {
522+
if let Err(err) = verify_message_with_ctx(&self.ctx, message, false, true) {
542523
self.handle_verification_error(err).await?;
543524
return Ok(());
544525
}
@@ -550,7 +531,7 @@ where
550531
async fn on_sequence_reset(&mut self, message: &Message) -> Result<(), SessionOperationError> {
551532
let msg_seq_num = get_msg_seq_num(message);
552533
let is_gap_fill: bool = message.get(GAP_FILL_FLAG).unwrap_or(false);
553-
if let Err(err) = self.verify_message(message, is_gap_fill, is_gap_fill) {
534+
if let Err(err) = verify_message_with_ctx(&self.ctx, message, is_gap_fill, is_gap_fill) {
554535
self.handle_verification_error(err).await?;
555536
return Ok(());
556537
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
use crate::message::verification::verify_message;
2+
use crate::message::verification_error::MessageVerificationError;
3+
use crate::session::ctx::SessionCtx;
4+
use hotfix_message::message::Message;
5+
use hotfix_store::MessageStore;
6+
7+
pub(crate) fn verify_message_with_ctx<A, S>(
8+
ctx: &SessionCtx<A, S>,
9+
message: &Message,
10+
check_too_high: bool,
11+
check_too_low: bool,
12+
) -> Result<(), MessageVerificationError>
13+
where
14+
S: MessageStore,
15+
{
16+
let expected_seq_number = if check_too_high || check_too_low {
17+
Some(ctx.store.next_target_seq_number())
18+
} else {
19+
None
20+
};
21+
verify_message(
22+
message,
23+
&ctx.config,
24+
expected_seq_number,
25+
check_too_high,
26+
check_too_low,
27+
)
28+
}

0 commit comments

Comments
 (0)