Skip to content

Commit 4468afd

Browse files
committed
Move handle_sending_time_accuracy_problem to inbound module
1 parent 812cbad commit 4468afd

3 files changed

Lines changed: 52 additions & 27 deletions

File tree

crates/hotfix/src/session.rs

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -607,24 +607,31 @@ where
607607
.await;
608608
}
609609
MessageVerificationError::SendingTimeAccuracyIssue { msg_seq_num } => {
610-
self.handle_sending_time_accuracy_problem(msg_seq_num, "unexpected sending time")
611-
.await;
610+
if let Some(writer) = self.state.get_writer() {
611+
inbound::handle_sending_time_accuracy_problem(
612+
&mut self.ctx, writer, msg_seq_num, "unexpected sending time",
613+
).await;
614+
}
612615
}
613616
MessageVerificationError::SendingTimeMissing { msg_seq_num } => {
614-
self.handle_sending_time_accuracy_problem(msg_seq_num, "sending time missing")
615-
.await;
617+
if let Some(writer) = self.state.get_writer() {
618+
inbound::handle_sending_time_accuracy_problem(
619+
&mut self.ctx, writer, msg_seq_num, "sending time missing",
620+
).await;
621+
}
616622
}
617623
MessageVerificationError::OriginalSendingTimeMissing { msg_seq_num } => {
618624
self.handle_original_sending_time_missing(msg_seq_num).await;
619625
}
620626
MessageVerificationError::OriginalSendingTimeAfterSendingTime {
621627
msg_seq_num, ..
622628
} => {
623-
self.handle_sending_time_accuracy_problem(
624-
msg_seq_num,
625-
"original sending time is after sending time",
626-
)
627-
.await;
629+
if let Some(writer) = self.state.get_writer() {
630+
inbound::handle_sending_time_accuracy_problem(
631+
&mut self.ctx, writer, msg_seq_num,
632+
"original sending time is after sending time",
633+
).await;
634+
}
628635
}
629636
}
630637

@@ -745,17 +752,6 @@ where
745752
}
746753
}
747754

748-
async fn handle_sending_time_accuracy_problem(&mut self, msg_seq_num: u64, text: &str) {
749-
let reject = Reject::new(msg_seq_num)
750-
.session_reject_reason(SessionRejectReason::SendingtimeAccuracyProblem)
751-
.text(text);
752-
if let Err(err) = self.send_message(reject).await {
753-
error!("failed to send reject for time accuracy problem: {err}");
754-
};
755-
if let Err(err) = self.ctx.store.increment_target_seq_number().await {
756-
error!("failed to increment target seq number: {:?}", err);
757-
};
758-
}
759755

760756
async fn handle_original_sending_time_missing(&mut self, msg_seq_num: u64) {
761757
let reject = Reject::new(msg_seq_num)

crates/hotfix/src/session/inbound.rs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
1+
use crate::message::reject::Reject;
12
use crate::message::verification::verify_message;
23
use crate::message::verification_error::MessageVerificationError;
34
use crate::session::ctx::SessionCtx;
5+
use crate::session::outbound;
6+
use crate::transport::writer::WriterRef;
47
use hotfix_message::message::Message;
8+
use hotfix_message::session_fields::SessionRejectReason;
59
use hotfix_store::MessageStore;
10+
use tracing::error;
611

7-
pub(crate) fn verify_message_with_ctx<A, S>(
12+
pub(crate) fn verify_message_with_ctx<A, S: MessageStore>(
813
ctx: &SessionCtx<A, S>,
914
message: &Message,
1015
check_too_high: bool,
1116
check_too_low: bool,
12-
) -> Result<(), MessageVerificationError>
13-
where
14-
S: MessageStore,
15-
{
17+
) -> Result<(), MessageVerificationError> {
1618
let expected_seq_number = if check_too_high || check_too_low {
1719
Some(ctx.store.next_target_seq_number())
1820
} else {
@@ -26,3 +28,20 @@ where
2628
check_too_low,
2729
)
2830
}
31+
32+
pub(crate) async fn handle_sending_time_accuracy_problem<A, S: MessageStore>(
33+
ctx: &mut SessionCtx<A, S>,
34+
writer: &WriterRef,
35+
msg_seq_num: u64,
36+
text: &str,
37+
) {
38+
let reject = Reject::new(msg_seq_num)
39+
.session_reject_reason(SessionRejectReason::SendingtimeAccuracyProblem)
40+
.text(text);
41+
if let Err(err) = outbound::send_message(ctx, writer, reject).await {
42+
error!("failed to send reject for time accuracy problem: {err}");
43+
}
44+
if let Err(err) = ctx.store.increment_target_seq_number().await {
45+
error!("failed to increment target seq number: {:?}", err);
46+
}
47+
}

crates/hotfix/src/session/outbound.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,23 @@ use tracing::{debug, enabled, error, info};
55
use crate::message::generate_message;
66
use crate::message::parser::RawFixMessage;
77
use crate::message::sequence_reset::SequenceReset;
8-
use crate::message::{is_admin, prepare_message_for_resend};
8+
use crate::message::{OutboundMessage, is_admin, prepare_message_for_resend};
99
use crate::session::ctx::SessionCtx;
10-
use crate::session::error::SessionOperationError;
10+
use crate::session::error::{InternalSendError, SessionOperationError};
1111
use crate::session::get_msg_seq_num;
1212
use crate::transport::writer::WriterRef;
1313
use hotfix_message::session_fields::MSG_TYPE;
1414

15+
pub async fn send_message<A, S: MessageStore>(
16+
ctx: &mut SessionCtx<A, S>,
17+
writer: &WriterRef,
18+
message: impl OutboundMessage,
19+
) -> Result<u64, InternalSendError> {
20+
let prepared = ctx.prepare_message(message).await?;
21+
writer.send_raw_message(prepared.raw).await;
22+
Ok(prepared.seq_num)
23+
}
24+
1525
pub async fn send_sequence_reset<A, S: MessageStore>(
1626
ctx: &mut SessionCtx<A, S>,
1727
writer: &WriterRef,

0 commit comments

Comments
 (0)