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
}