From 0034d79dbbeed6959896c9e21dca23a7a28135d1 Mon Sep 17 00:00:00 2001 From: Sylvain Rabot Date: Mon, 26 Sep 2022 10:42:11 +0200 Subject: [PATCH] Fix Send(Messagable) which does not account for TargetSubID & SenderSubID Signed-off-by: Sylvain Rabot --- registry.go | 14 +++++++++++- registry_test.go | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 registry_test.go diff --git a/registry.go b/registry.go index 5f8e69fc2..bf02851ec 100644 --- a/registry.go +++ b/registry.go @@ -43,12 +43,24 @@ func Send(m Messagable) (err error) { return err } + var targetSubID FIXString + msg.Header.GetField(tagTargetSubID, &targetSubID) + var senderCompID FIXString if err := msg.Header.GetField(tagSenderCompID, &senderCompID); err != nil { return err } - sessionID := SessionID{BeginString: string(beginString), TargetCompID: string(targetCompID), SenderCompID: string(senderCompID)} + var senderSubID FIXString + msg.Header.GetField(tagSenderSubID, &senderSubID) + + sessionID := SessionID{ + BeginString: string(beginString), + TargetCompID: string(targetCompID), + TargetSubID: string(targetSubID), + SenderCompID: string(senderCompID), + SenderSubID: string(senderSubID), + } return SendToTarget(msg, sessionID) } diff --git a/registry_test.go b/registry_test.go new file mode 100644 index 000000000..088876f24 --- /dev/null +++ b/registry_test.go @@ -0,0 +1,56 @@ +// Copyright (c) quickfixengine.org All rights reserved. +// +// This file may be distributed under the terms of the quickfixengine.org +// license as defined by quickfixengine.org and appearing in the file +// LICENSE included in the packaging of this file. +// +// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING +// THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A +// PARTICULAR PURPOSE. +// +// See http://www.quickfixengine.org/LICENSE for licensing information. +// +// Contact ask@quickfixengine.org if any conditions of this licensing +// are not clear to you. + +package quickfix + +import ( + "errors" + "testing" +) + +func TestPR514(t *testing.T) { + sessionID := SessionID{ + BeginString: BeginStringFIX42, + TargetCompID: "BigCorp", + TargetSubID: "acceptor", + SenderCompID: "SmallCorp", + SenderSubID: "initiator", + } + storeFactory := NewMemoryStoreFactory() + store, err := storeFactory.Create(sessionID) + if err != nil { + t.Error(err) + } + s := &session{ + sessionID: sessionID, + store: store, + } + if err := registerSession(s); err != nil { + t.Error(err) + } + + msg := NewMessage() + msg.Header.SetString(tagBeginString, sessionID.BeginString) + msg.Header.SetString(tagTargetCompID, sessionID.TargetCompID) + msg.Header.SetString(tagTargetSubID, sessionID.TargetSubID) + msg.Header.SetString(tagSenderCompID, sessionID.SenderCompID) + msg.Header.SetString(tagSenderSubID, sessionID.SenderSubID) + + if err := Send(msg); err != nil { + if errors.Is(err, errUnknownSession) { + t.Errorf("Unable to find registered session: %s", err) + } + } +}