From c4ee2adaa8a1f44989727f75d0bdd9a67d93af5d Mon Sep 17 00:00:00 2001 From: Ramon Singh Date: Mon, 16 Jun 2025 21:40:32 +0200 Subject: [PATCH 1/3] Improve disconnect reason when ResetOnLogon is not honoured by counter-party This fixes #960 by clarifying the reason for sequence number in response not being 1 when resetOnLogon is configured to true. --- quickfixj-core/src/main/java/quickfix/Session.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/quickfixj-core/src/main/java/quickfix/Session.java b/quickfixj-core/src/main/java/quickfix/Session.java index f99b42d37a..1429e17590 100644 --- a/quickfixj-core/src/main/java/quickfix/Session.java +++ b/quickfixj-core/src/main/java/quickfix/Session.java @@ -2277,7 +2277,11 @@ private void nextLogon(Message logon) throws FieldNotFound, RejectLogon, Incorre // Check for proper sequence reset response if (state.isResetSent() && !state.isResetReceived()) { - disconnect("Received logon response before sending request", true); + if (resetOnLogon) { + disconnect("Expected Logon response to have reset sequence numbers in response to ResetSeqNumFlag", true); + } else { + disconnect("Received logon response before sending request", true); + } } state.setResetSent(false); From 9680ddf8a1e61d1a8455b7d99e45edc147c15f8f Mon Sep 17 00:00:00 2001 From: Christoph John Date: Wed, 18 Jun 2025 14:13:25 +0200 Subject: [PATCH 2/3] minor change --- quickfixj-core/src/main/java/quickfix/Session.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickfixj-core/src/main/java/quickfix/Session.java b/quickfixj-core/src/main/java/quickfix/Session.java index 1429e17590..f0f9d5c2ea 100644 --- a/quickfixj-core/src/main/java/quickfix/Session.java +++ b/quickfixj-core/src/main/java/quickfix/Session.java @@ -2280,7 +2280,7 @@ private void nextLogon(Message logon) throws FieldNotFound, RejectLogon, Incorre if (resetOnLogon) { disconnect("Expected Logon response to have reset sequence numbers in response to ResetSeqNumFlag", true); } else { - disconnect("Received logon response before sending request", true); + disconnect("Received Logon response before sending request", true); } } From a94081091113245718d5aee217146a1a3ea9cf62 Mon Sep 17 00:00:00 2001 From: Ramon Singh Date: Mon, 23 Jun 2025 20:06:37 +0100 Subject: [PATCH 3/3] Remove duplicated disconnect case -This removed disconnect case is covered on Line 2216. Also removed case for resetOnLogon. Since we're checking for isResetSent(), the check on resetOnLogon should be redundant. -Added return statement after disconnect(). This is behaviour is a bit inconsistent in the Session class, however it prevents duplicated state reset updates that are covered in disconnect(). --- quickfixj-core/src/main/java/quickfix/Session.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/quickfixj-core/src/main/java/quickfix/Session.java b/quickfixj-core/src/main/java/quickfix/Session.java index f0f9d5c2ea..edce5adf97 100644 --- a/quickfixj-core/src/main/java/quickfix/Session.java +++ b/quickfixj-core/src/main/java/quickfix/Session.java @@ -2277,11 +2277,8 @@ private void nextLogon(Message logon) throws FieldNotFound, RejectLogon, Incorre // Check for proper sequence reset response if (state.isResetSent() && !state.isResetReceived()) { - if (resetOnLogon) { - disconnect("Expected Logon response to have reset sequence numbers in response to ResetSeqNumFlag", true); - } else { - disconnect("Received Logon response before sending request", true); - } + disconnect("Expected Logon response to have reset sequence numbers in response to ResetSeqNumFlag", true); + return; } state.setResetSent(false);