From 1596f0daee055474f5894d27b4f62dc05264b419 Mon Sep 17 00:00:00 2001 From: amitb Date: Thu, 25 Oct 2018 01:53:57 +0300 Subject: [PATCH] fixed qemu extended keys --- server/client-messages.go | 31 +++++++++++++++++++++++++++++++ server/server-conn.go | 9 +++++---- server/server.go | 1 + 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/server/client-messages.go b/server/client-messages.go index fe1b116..5a1e64c 100644 --- a/server/client-messages.go +++ b/server/client-messages.go @@ -310,3 +310,34 @@ func (msg *MsgClientCutText) Write(c io.Writer) error { return nil } + +// MsgClientQemuExtendedKey holds the wire format message, for qemu keys +type MsgClientQemuExtendedKey struct { + SubType uint8 // sub type + IsDown uint16 // button down indicator + KeySym uint32 // key symbol + KeyCode uint32 // key code +} + +func (*MsgClientQemuExtendedKey) Type() common.ClientMessageType { + return common.QEMUExtendedKeyEventMsgType +} + +func (*MsgClientQemuExtendedKey) Read(c io.Reader) (common.ClientMessage, error) { + msg := MsgClientQemuExtendedKey{} + + if err := binary.Read(c, binary.BigEndian, &msg); err != nil { + return nil, err + } + return &msg, nil +} + +func (msg *MsgClientQemuExtendedKey) Write(c io.Writer) error { + if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil { + return err + } + if err := binary.Write(c, binary.BigEndian, msg); err != nil { + return err + } + return nil +} diff --git a/server/server-conn.go b/server/server-conn.go index 3edeba1..3550936 100644 --- a/server/server-conn.go +++ b/server/server-conn.go @@ -168,16 +168,17 @@ func (c *ServerConn) handle() error { default: var messageType common.ClientMessageType if err := binary.Read(c, binary.BigEndian, &messageType); err != nil { - logger.Errorf("IServerConn.handle error: %v", err) + logger.Errorf("ServerConn.handle error: %v", err) return err } + logger.Debugf("ServerConn.handle: got messagetype, %d", messageType) msg, ok := clientMessages[messageType] + logger.Debugf("ServerConn.handle: found message type, %v", ok) if !ok { - return fmt.Errorf("IServerConn.Handle: unsupported message-type: %v", messageType) + logger.Errorf("ServerConn.handle: unsupported message-type: %v", messageType) } - parsedMsg, err := msg.Read(c) - + logger.Debugf("ServerConn.handle: got parsed messagetype, %v", parsedMsg) //update connection for pixel format / color map changes switch parsedMsg.Type() { case common.SetPixelFormatMsgType: diff --git a/server/server.go b/server/server.go index 8e5f230..bb19761 100644 --- a/server/server.go +++ b/server/server.go @@ -15,6 +15,7 @@ var DefaultClientMessages = []common.ClientMessage{ &MsgKeyEvent{}, &MsgPointerEvent{}, &MsgClientCutText{}, + &MsgClientQemuExtendedKey{}, } // FramebufferUpdate holds a FramebufferUpdate wire format message.