Skip to content

Commit 0034d79

Browse files
committed
Fix Send(Messagable) which does not account for TargetSubID & SenderSubID
Signed-off-by: Sylvain Rabot <[email protected]>
1 parent 2ed31c3 commit 0034d79

File tree

2 files changed

+69
-1
lines changed

2 files changed

+69
-1
lines changed

registry.go

+13-1
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,24 @@ func Send(m Messagable) (err error) {
4343
return err
4444
}
4545

46+
var targetSubID FIXString
47+
msg.Header.GetField(tagTargetSubID, &targetSubID)
48+
4649
var senderCompID FIXString
4750
if err := msg.Header.GetField(tagSenderCompID, &senderCompID); err != nil {
4851
return err
4952
}
5053

51-
sessionID := SessionID{BeginString: string(beginString), TargetCompID: string(targetCompID), SenderCompID: string(senderCompID)}
54+
var senderSubID FIXString
55+
msg.Header.GetField(tagSenderSubID, &senderSubID)
56+
57+
sessionID := SessionID{
58+
BeginString: string(beginString),
59+
TargetCompID: string(targetCompID),
60+
TargetSubID: string(targetSubID),
61+
SenderCompID: string(senderCompID),
62+
SenderSubID: string(senderSubID),
63+
}
5264

5365
return SendToTarget(msg, sessionID)
5466
}

registry_test.go

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// Copyright (c) quickfixengine.org All rights reserved.
2+
//
3+
// This file may be distributed under the terms of the quickfixengine.org
4+
// license as defined by quickfixengine.org and appearing in the file
5+
// LICENSE included in the packaging of this file.
6+
//
7+
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
8+
// THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
9+
// PARTICULAR PURPOSE.
10+
//
11+
// See http://www.quickfixengine.org/LICENSE for licensing information.
12+
//
13+
// Contact [email protected] if any conditions of this licensing
14+
// are not clear to you.
15+
16+
package quickfix
17+
18+
import (
19+
"errors"
20+
"testing"
21+
)
22+
23+
func TestPR514(t *testing.T) {
24+
sessionID := SessionID{
25+
BeginString: BeginStringFIX42,
26+
TargetCompID: "BigCorp",
27+
TargetSubID: "acceptor",
28+
SenderCompID: "SmallCorp",
29+
SenderSubID: "initiator",
30+
}
31+
storeFactory := NewMemoryStoreFactory()
32+
store, err := storeFactory.Create(sessionID)
33+
if err != nil {
34+
t.Error(err)
35+
}
36+
s := &session{
37+
sessionID: sessionID,
38+
store: store,
39+
}
40+
if err := registerSession(s); err != nil {
41+
t.Error(err)
42+
}
43+
44+
msg := NewMessage()
45+
msg.Header.SetString(tagBeginString, sessionID.BeginString)
46+
msg.Header.SetString(tagTargetCompID, sessionID.TargetCompID)
47+
msg.Header.SetString(tagTargetSubID, sessionID.TargetSubID)
48+
msg.Header.SetString(tagSenderCompID, sessionID.SenderCompID)
49+
msg.Header.SetString(tagSenderSubID, sessionID.SenderSubID)
50+
51+
if err := Send(msg); err != nil {
52+
if errors.Is(err, errUnknownSession) {
53+
t.Errorf("Unable to find registered session: %s", err)
54+
}
55+
}
56+
}

0 commit comments

Comments
 (0)