in src/sessionmanagerplugin/session/portsession/portsession.go [61:106]
func (s *PortSession) Initialize(log log.T, sessionVar *session.Session) {
s.Session = *sessionVar
if err := jsonutil.Remarshal(s.SessionProperties, &s.portParameters); err != nil {
log.Errorf("Invalid format: %v", err)
}
if s.portParameters.Type == LocalPortForwardingType {
if version.DoesAgentSupportTCPMultiplexing(log, s.DataChannel.GetAgentVersion()) {
s.portSessionType = &MuxPortForwarding{
sessionId: s.SessionId,
portParameters: s.portParameters,
session: s.Session,
}
} else {
s.portSessionType = &BasicPortForwarding{
sessionId: s.SessionId,
portParameters: s.portParameters,
session: s.Session,
}
}
} else {
s.portSessionType = &StandardStreamForwarding{
portParameters: s.portParameters,
session: s.Session,
}
}
s.DataChannel.RegisterOutputStreamHandler(s.ProcessStreamMessagePayload, true)
s.DataChannel.GetWsChannel().SetOnMessage(func(input []byte) {
if s.portSessionType.IsStreamNotSet() {
outputMessage := &message.ClientMessage{}
if err := outputMessage.DeserializeClientMessage(log, input); err != nil {
log.Debugf("Ignore message deserialize error while stream connection had not set.")
return
}
if outputMessage.MessageType == message.OutputStreamMessage {
log.Debugf("Waiting for user to establish connection before processing incoming messages.")
return
} else {
log.Infof("Received %s message while establishing connection", outputMessage.MessageType)
}
}
s.DataChannel.OutputMessageHandler(log, s.Stop, s.SessionId, input)
})
log.Infof("Connected to instance[%s] on port: %s", sessionVar.TargetId, s.portParameters.PortNumber)
}