From f05c96d4497f18b35db34b69c07069da477047bc Mon Sep 17 00:00:00 2001 From: amit bezalel Date: Sat, 10 Feb 2018 01:41:02 +0200 Subject: [PATCH] fixed tight encoding, added the QEMU extended keys message (no way to test it) --- common/client-message-type.go | 5 ++++- encodings/enc-tight.go | 2 +- logger/logger.go | 2 +- recorder/cmd/main.go | 6 +++--- recorder/recorder.go | 2 +- server/client-messages.go | 30 ++++++++++++++++++++++++++++++ 6 files changed, 40 insertions(+), 7 deletions(-) diff --git a/common/client-message-type.go b/common/client-message-type.go index fe45636..ba9351f 100644 --- a/common/client-message-type.go +++ b/common/client-message-type.go @@ -17,7 +17,8 @@ const ( KeyEventMsgType PointerEventMsgType ClientCutTextMsgType - ClientFenceMsgType = 248 + ClientFenceMsgType = 248 + QEMUExtendedKeyEventMsgType = 255 ) // Color represents a single color in a color map. @@ -47,6 +48,8 @@ func (cmt ClientMessageType) String() string { return "FramebufferUpdateRequest" case KeyEventMsgType: return "KeyEvent" + case QEMUExtendedKeyEventMsgType: + return "QEMUExtendedKeyEvent" case PointerEventMsgType: return "PointerEvent" case ClientCutTextMsgType: diff --git a/encodings/enc-tight.go b/encodings/enc-tight.go index e6e0741..3cdf925 100644 --- a/encodings/enc-tight.go +++ b/encodings/enc-tight.go @@ -155,7 +155,7 @@ func handleTightFilters(subencoding uint8, pixelFmt *common.PixelFormat, rect *c if paletteSize == 2 { dataLength = int(rect.Height) * ((int(rect.Width) + 7) / 8) } else { - dataLength = int(rect.Width * rect.Height) + dataLength = int(rect.Width) * int(rect.Height) } _, err = r.ReadTightData(dataLength) if err != nil { diff --git a/logger/logger.go b/logger/logger.go index 7c4a3a5..0e76d26 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -2,7 +2,7 @@ package logger import "fmt" -var simpleLogger = SimpleLogger{LogLevelInfo} +var simpleLogger = SimpleLogger{LogLevelDebug} type Logger interface { Debug(v ...interface{}) diff --git a/recorder/cmd/main.go b/recorder/cmd/main.go index f33b2fb..f2c64f5 100644 --- a/recorder/cmd/main.go +++ b/recorder/cmd/main.go @@ -81,9 +81,9 @@ func main() { encs := []common.IEncoding{ &encodings.TightEncoding{}, //&encodings.TightPngEncoding{}, - //rre := encodings.RREEncoding{}, - //zlib := encodings.ZLibEncoding{}, - //zrle := encodings.ZRLEEncoding{}, + //&encodings.RREEncoding{}, + //&encodings.ZLibEncoding{}, + //&encodings.ZRLEEncoding{}, //&encodings.CopyRectEncoding{}, //coRRE := encodings.CoRREEncoding{}, //hextile := encodings.HextileEncoding{}, diff --git a/recorder/recorder.go b/recorder/recorder.go index 730a6b0..28dfd0e 100644 --- a/recorder/recorder.go +++ b/recorder/recorder.go @@ -38,7 +38,7 @@ func NewRecorder(saveFilePath string) (*Recorder, error) { rec.maxWriteSize = 65535 - rec.writer, err = os.OpenFile(saveFilePath, os.O_RDWR|os.O_CREATE, 0755) + rec.writer, err = os.OpenFile(saveFilePath, os.O_RDWR|os.O_CREATE, 0644) if err != nil { logger.Errorf("unable to open file: %s, error: %v", saveFilePath, err) return nil, err diff --git a/server/client-messages.go b/server/client-messages.go index 554cfe5..fe1b116 100644 --- a/server/client-messages.go +++ b/server/client-messages.go @@ -165,6 +165,36 @@ func (msg *MsgKeyEvent) Write(c io.Writer) error { return nil } +// MsgKeyEvent holds the wire format message. +type MsgQEMUExtKeyEvent struct { + SubmessageType uint8 // submessage type + DownFlag uint16 // down-flag + KeySym Key // key symbol + KeyCode uint32 // scan code +} + +func (*MsgQEMUExtKeyEvent) Type() common.ClientMessageType { + return common.QEMUExtendedKeyEventMsgType +} + +func (*MsgQEMUExtKeyEvent) Read(c io.Reader) (common.ClientMessage, error) { + msg := MsgKeyEvent{} + if err := binary.Read(c, binary.BigEndian, &msg); err != nil { + return nil, err + } + return &msg, nil +} + +func (msg *MsgQEMUExtKeyEvent) 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 +} + // PointerEventMessage holds the wire format message. type MsgPointerEvent struct { Mask uint8 // button-mask