From fda6c290047878fc20a604e5b96c02ec7399df11 Mon Sep 17 00:00:00 2001 From: Sylvain Rabot Date: Tue, 1 Feb 2022 20:57:24 +0100 Subject: [PATCH] Allow time.Duration or int for timeouts Signed-off-by: Sylvain Rabot --- dialer.go | 13 ++++++++++-- session_factory.go | 52 ++++++++++++++++++++++++++++------------------ 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/dialer.go b/dialer.go index 1645076bf..d89309c97 100644 --- a/dialer.go +++ b/dialer.go @@ -3,6 +3,7 @@ package quickfix import ( "fmt" "net" + "time" "github.com/quickfixgo/quickfix/config" "golang.org/x/net/proxy" @@ -11,8 +12,16 @@ import ( func loadDialerConfig(settings *SessionSettings) (dialer proxy.Dialer, err error) { stdDialer := &net.Dialer{} if settings.HasSetting(config.SocketTimeout) { - if stdDialer.Timeout, err = settings.DurationSetting(config.SocketTimeout); err != nil { - return + timeout, err := settings.DurationSetting(config.SocketTimeout) + if err != nil { + timeoutInt, err := settings.IntSetting(config.SocketTimeout) + if err != nil { + return stdDialer, err + } + + stdDialer.Timeout = time.Duration(timeoutInt) * time.Second + } else { + stdDialer.Timeout = timeout } } dialer = stdDialer diff --git a/session_factory.go b/session_factory.go index d119274cc..cfcbea4aa 100644 --- a/session_factory.go +++ b/session_factory.go @@ -321,47 +321,59 @@ func (f sessionFactory) buildInitiatorSettings(session *session, settings *Sessi session.ReconnectInterval = 30 * time.Second if settings.HasSetting(config.ReconnectInterval) { - - interval, err := settings.IntSetting(config.ReconnectInterval) + interval, err := settings.DurationSetting(config.ReconnectInterval) if err != nil { - return err + intervalInt, err := settings.IntSetting(config.ReconnectInterval) + if err != nil { + return err + } + + session.ReconnectInterval = time.Duration(intervalInt) * time.Second + } else { + session.ReconnectInterval = interval } - if interval <= 0 { + if session.ReconnectInterval <= 0 { return errors.New("ReconnectInterval must be greater than zero") } - - session.ReconnectInterval = time.Duration(interval) * time.Second } session.LogoutTimeout = 2 * time.Second if settings.HasSetting(config.LogoutTimeout) { - - timeout, err := settings.IntSetting(config.LogoutTimeout) + timeout, err := settings.DurationSetting(config.LogoutTimeout) if err != nil { - return err - } + timeoutInt, err := settings.IntSetting(config.LogoutTimeout) + if err != nil { + return err + } - if timeout <= 0 { - return errors.New("LogoutTimeout must be greater than zero") + session.LogoutTimeout = time.Duration(timeoutInt) * time.Second + } else { + session.LogoutTimeout = timeout } - session.LogoutTimeout = time.Duration(timeout) * time.Second + if session.LogoutTimeout <= 0 { + return errors.New("LogonTimeout must be greater than zero") + } } session.LogonTimeout = 10 * time.Second if settings.HasSetting(config.LogonTimeout) { - - timeout, err := settings.IntSetting(config.LogonTimeout) + timeout, err := settings.DurationSetting(config.LogonTimeout) if err != nil { - return err + timeoutInt, err := settings.IntSetting(config.LogonTimeout) + if err != nil { + return err + } + + session.LogonTimeout = time.Duration(timeoutInt) * time.Second + } else { + session.LogonTimeout = timeout } - if timeout <= 0 { + if session.LogonTimeout <= 0 { return errors.New("LogonTimeout must be greater than zero") } - - session.LogonTimeout = time.Duration(timeout) * time.Second } return f.configureSocketConnectAddress(session, settings) @@ -404,7 +416,7 @@ func (f sessionFactory) buildHeartBtIntSettings(session *session, settings *Sess return } } - + if session.HeartBtIntOverride || mustProvide { var heartBtInt int if heartBtInt, err = settings.IntSetting(config.HeartBtInt); err != nil {