From 0ce7273efcabb6fd8eaae8be6facee98cbe3c05b Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 27 May 2014 16:49:29 -0500 Subject: [PATCH] on resend, use toApp for send approval --- QuickFIXn/Session.cs | 18 ++++++++++++++++++ UnitTests/SessionTest.cs | 22 ++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/QuickFIXn/Session.cs b/QuickFIXn/Session.cs index 5e5501e93..22f6241fa 100755 --- a/QuickFIXn/Session.cs +++ b/QuickFIXn/Session.cs @@ -760,6 +760,11 @@ protected void NextResendRequest(Message resendReq) { initializeResendFields(msg); + if(!ResendApproved(msg, SessionID)) + { + continue; + } + if (begin != 0) { GenerateSequenceReset(resendReq, begin, msgSeqNum); @@ -798,6 +803,19 @@ protected void NextResendRequest(Message resendReq) this.Log.OnEvent("ERROR during resend request " + e.Message); } } + private bool ResendApproved(Message msg, SessionID sessionID) + { + try + { + Application.ToApp(msg, sessionID); + } + catch (DoNotSend) + { + return false; + } + + return true; + } protected void NextLogout(Message logout) { diff --git a/UnitTests/SessionTest.cs b/UnitTests/SessionTest.cs index 01b805007..af335d235 100755 --- a/UnitTests/SessionTest.cs +++ b/UnitTests/SessionTest.cs @@ -696,5 +696,27 @@ public void TestToAppDoNotSend() session.Send(order); Assert.False(SENT_NOS()); } + + [Test] + public void TestToAppResendDoNotSend() + { + Logon(); + QuickFix.FIX42.NewOrderSingle order = new QuickFix.FIX42.NewOrderSingle( + new QuickFix.Fields.ClOrdID("1"), + new QuickFix.Fields.HandlInst(QuickFix.Fields.HandlInst.MANUAL_ORDER), + new QuickFix.Fields.Symbol("IBM"), + new QuickFix.Fields.Side(QuickFix.Fields.Side.BUY), + new QuickFix.Fields.TransactTime(), + new QuickFix.Fields.OrdType(QuickFix.Fields.OrdType.LIMIT)); + + session.Send(order); + Assert.True(SENT_NOS()); + + responder.msgLookup.Remove(QuickFix.Fields.MsgType.NEWORDERSINGLE); + application.doNotSendException = new QuickFix.DoNotSend(); + + SendResendRequest(1, 0); + Assert.False(SENT_NOS()); + } } }