Skip to content

Commit 0971d89

Browse files
authored
Merge pull request #266 from cbusbey/check_latency
adds check latency configuration
2 parents 08bf2e8 + 3b7e00f commit 0971d89

File tree

7 files changed

+47
-0
lines changed

7 files changed

+47
-0
lines changed

config/configuration.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,5 @@ const (
4242
ValidateFieldsOutOfOrder string = "ValidateFieldsOutOfOrder"
4343
ResendRequestChunkSize string = "ResendRequestChunkSize"
4444
EnableLastMsgSeqNumProcessed string = "EnableLastMsgSeqNumProcessed"
45+
CheckLatency string = "CheckLatency"
4546
)

config/doc.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,14 @@ If set to N, fields that are out of order (i.e. body fields in the header, or he
185185
186186
Defaults to Y.
187187
188+
CheckLatency
189+
190+
If set to Y, messages must be received from the counterparty within a defined number of seconds. It is useful to turn this off if a system uses localtime for it's timestamps instead of GMT. Valid Values:
191+
Y
192+
N
193+
194+
Defaults to Y.
195+
188196
ReconnectInterval
189197
190198
Time between reconnection attempts in seconds. Only used for initiators. Value must be positive integer.

internal/session_settings.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ type SessionSettings struct {
1212
InitiateLogon bool
1313
ResendRequestChunkSize int
1414
EnableLastMsgSeqNumProcessed bool
15+
SkipCheckLatency bool
1516

1617
//required on logon for FIX.T.1 messages
1718
DefaultApplVerID string

session.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,10 @@ func (s *session) checkCompID(msg Message) MessageRejectError {
576576
}
577577

578578
func (s *session) checkSendingTime(msg Message) MessageRejectError {
579+
if s.SkipCheckLatency {
580+
return nil
581+
}
582+
579583
if ok := msg.Header.Has(tagSendingTime); !ok {
580584
return RequiredTagMissing(tagSendingTime)
581585
}

session_factory.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,15 @@ func (f sessionFactory) newSession(
146146
}
147147
}
148148

149+
if settings.HasSetting(config.CheckLatency) {
150+
var doCheckLatency bool
151+
if doCheckLatency, err = settings.BoolSetting(config.CheckLatency); err != nil {
152+
return
153+
}
154+
155+
s.SkipCheckLatency = !doCheckLatency
156+
}
157+
149158
if settings.HasSetting(config.ResendRequestChunkSize) {
150159
if s.ResendRequestChunkSize, err = settings.IntSetting(config.ResendRequestChunkSize); err != nil {
151160
return

session_factory_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ func (s *SessionFactorySuite) TestDefaults() {
4747
s.False(session.InitiateLogon)
4848
s.Equal(0, session.ResendRequestChunkSize)
4949
s.False(session.EnableLastMsgSeqNumProcessed)
50+
s.False(session.SkipCheckLatency)
5051
}
5152

5253
func (s *SessionFactorySuite) TestResetOnLogon() {
@@ -129,6 +130,23 @@ func (s *SessionFactorySuite) TestEnableLastMsgSeqNumProcessed() {
129130
}
130131
}
131132

133+
func (s *SessionFactorySuite) TestCheckLatency() {
134+
var tests = []struct {
135+
setting string
136+
expected bool
137+
}{{"Y", false}, {"N", true}}
138+
139+
for _, test := range tests {
140+
s.SetupTest()
141+
s.SessionSettings.Set(config.CheckLatency, test.setting)
142+
session, err := s.newSession(s.SessionID, s.MessageStoreFactory, s.SessionSettings, s.LogFactory, s.App)
143+
s.Nil(err)
144+
s.NotNil(session)
145+
146+
s.Equal(test.expected, session.SkipCheckLatency)
147+
}
148+
}
149+
132150
func (s *SessionFactorySuite) TestStartAndEndTime() {
133151
s.SessionSettings.Set(config.StartTime, "12:00:00")
134152
s.SessionSettings.Set(config.EndTime, "14:00:00")

session_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,12 @@ func (s *SessionSuite) TestCheckSendingTime() {
169169
msg.Header.SetField(tagSendingTime, FIXUTCTimestamp{Time: sendingTime})
170170

171171
s.Nil(s.session.checkSendingTime(msg), "sending time should be ok")
172+
173+
s.session.SkipCheckLatency = true
174+
sendingTime = time.Now().Add(time.Duration(-200) * time.Second)
175+
msg.Header.SetField(tagSendingTime, FIXUTCTimestamp{Time: sendingTime})
176+
err = s.session.checkSendingTime(msg)
177+
s.Require().Nil(err, "should skip latency check")
172178
}
173179

174180
func (s *SessionSuite) TestCheckTargetTooLow() {

0 commit comments

Comments
 (0)