func()

in src/sessionmanagerplugin/session/portsession/basicportforwarding.go [77:107]


func (p *BasicPortForwarding) ReadStream(log log.T) (err error) {
	msg := make([]byte, config.StreamDataPayloadSize)
	for {
		numBytes, err := (*p.stream).Read(msg)
		if err != nil {
			log.Debugf("Reading from port %s failed with error: %v. Close this connection, listen and accept new one.",
				p.portParameters.PortNumber, err)

			// Send DisconnectToPort flag to agent when client tcp connection drops to ensure agent closes tcp connection too with server port
			if err = p.session.DataChannel.SendFlag(log, message.DisconnectToPort); err != nil {
				log.Errorf("Failed to send packet: %v", err)
				return err
			}

			if err = p.reconnect(log); err != nil {
				return err
			}

			// continue to read from connection as it has been re-established
			continue
		}

		log.Tracef("Received message of size %d from stdin.", numBytes)
		if err = p.session.DataChannel.SendInputDataMessage(log, message.Output, msg[:numBytes]); err != nil {
			log.Errorf("Failed to send packet: %v", err)
			return err
		}
		// Sleep to process more data
		time.Sleep(time.Millisecond)
	}
}