@@ -36,7 +36,7 @@ use crate::message::sequence_reset::SequenceReset;
3636use crate :: message:: test_request:: TestRequest ;
3737use crate :: message:: verification:: VerificationFlags ;
3838use crate :: session:: admin_request:: AdminRequest ;
39- use crate :: session:: ctx:: { SessionCtx , TransitionResult , VerificationResult } ;
39+ use crate :: session:: ctx:: { PreProcessDecision , SessionCtx , TransitionResult , VerificationResult } ;
4040use crate :: session:: error:: SessionCreationError ;
4141use crate :: session:: error:: { InternalSendError , InternalSendResultExt , SessionOperationError } ;
4242pub use crate :: session:: error:: { SendError , SendOutcome } ;
@@ -194,29 +194,20 @@ where
194194 }
195195
196196 async fn process_message ( & mut self , message : Message ) -> Result < ( ) , SessionOperationError > {
197+ let message = match self . state . pre_process_inbound ( message) {
198+ PreProcessDecision :: Accept ( msg) => msg,
199+ PreProcessDecision :: Queued => return Ok ( ( ) ) ,
200+ PreProcessDecision :: Disconnect => {
201+ self . state . disconnect_writer ( ) . await ;
202+ return Ok ( ( ) ) ;
203+ }
204+ } ;
205+
197206 let message_type: & str = message
198207 . header ( )
199208 . get ( MSG_TYPE )
200209 . map_err ( |_| SessionOperationError :: MissingField ( "MSG_TYPE" ) ) ?;
201210
202- if let SessionState :: AwaitingResend ( state) = & mut self . state {
203- let seq_number = get_msg_seq_num ( & message) ;
204- if seq_number > state. end_seq_number && message_type != ResendRequest :: MSG_TYPE {
205- state. inbound_queue . push_back ( message) ;
206- return Ok ( ( ) ) ;
207- }
208- }
209-
210- // TODO: add state-level pre-process check that validates whether the message type
211- // is acceptable in the current state (e.g. AwaitingLogon rejects non-Logon,
212- // unexpected Logon in Active should be rejected per FIX spec).
213- if let SessionState :: AwaitingLogon ( _) = & mut self . state
214- && message_type != Logon :: MSG_TYPE
215- {
216- self . state . disconnect_writer ( ) . await ;
217- return Ok ( ( ) ) ;
218- }
219-
220211 let flags = VerificationFlags :: for_message ( & message) ?;
221212 if let VerificationResult :: Issue ( result) = self
222213 . state
0 commit comments