func()

in src/sessionmanagerplugin/session/shellsession/shellsession_windows.go [62:98]


func (s *ShellSession) handleKeyboardInput(log log.T) (err error) {
	var (
		character rune         //character input from keyboard
		key       keyboard.Key //special keys like arrows and function keys
	)
	if err = keyboard.Open(); err != nil {
		log.Errorf("Failed to load Keyboard: %v", err)
		return
	}
	defer keyboard.Close()

	for {
		if character, key, err = keyboard.GetKey(); err != nil {
			log.Errorf("Failed to get the key stroke: %v", err)
			return
		}
		if character != 0 {
			charBytes := []byte(string(character))
			if err = s.Session.DataChannel.SendInputDataMessage(log, message.Output, charBytes); err != nil {
				log.Errorf("Failed to send UTF8 char: %v", err)
				break
			}
		} else if key != 0 {
			keyBytes := []byte(string(key))
			if byteValue, ok := specialKeysInputMap[key]; ok {
				keyBytes = byteValue
			}
			if err = s.Session.DataChannel.SendInputDataMessage(log, message.Output, keyBytes); err != nil {
				log.Errorf("Failed to send UTF8 char: %v", err)
				break
			}
		}
		// sleep to limit the rate of transfer
		time.Sleep(time.Millisecond)
	}
	return
}