in src/sessionmanagerplugin/session/sessionhandler.go [32:69]
func (s *Session) OpenDataChannel(log log.T) (err error) {
s.retryParams = retry.RepeatableExponentialRetryer{
GeometricRatio: config.RetryBase,
InitialDelayInMilli: rand.Intn(config.DataChannelRetryInitialDelayMillis) + config.DataChannelRetryInitialDelayMillis,
MaxDelayInMilli: config.DataChannelRetryMaxIntervalMillis,
MaxAttempts: config.DataChannelNumMaxRetries,
}
s.DataChannel.Initialize(log, s.ClientId, s.SessionId, s.TargetId, s.IsAwsCliUpgradeNeeded)
s.DataChannel.SetWebsocket(log, s.StreamUrl, s.TokenValue)
s.DataChannel.GetWsChannel().SetOnMessage(
func(input []byte) {
s.DataChannel.OutputMessageHandler(log, s.Stop, s.SessionId, input)
})
s.DataChannel.RegisterOutputStreamHandler(s.ProcessFirstMessage, false)
if err = s.DataChannel.Open(log); err != nil {
log.Errorf("Retrying connection for data channel id: %s failed with error: %s", s.SessionId, err)
s.retryParams.CallableFunc = func() (err error) { return s.DataChannel.Reconnect(log) }
if err = s.retryParams.Call(); err != nil {
log.Error(err)
}
}
s.DataChannel.GetWsChannel().SetOnError(
func(err error) {
log.Errorf("Trying to reconnect the session: %v with seq num: %d", s.StreamUrl, s.DataChannel.GetStreamDataSequenceNumber())
s.retryParams.CallableFunc = func() (err error) { return s.ResumeSessionHandler(log) }
if err = s.retryParams.Call(); err != nil {
log.Error(err)
}
})
// Scheduler for resending of data
s.DataChannel.ResendStreamDataMessageScheduler(log)
return nil
}