From 2ccc4009f4e45fdac2fe2b2d0d29c4b5d5fb89a1 Mon Sep 17 00:00:00 2001 From: amit b Date: Mon, 20 Aug 2018 23:03:39 +0300 Subject: [PATCH] added initial support for qemu led state --- common/encoding.go | 3 +++ encodings/enc-led-state.go | 31 +++++++++++++++++++++++++++++++ player/fbs-reader.go | 1 + player/player_test.go | 1 + proxy/proxy.go | 1 + 5 files changed, 37 insertions(+) create mode 100644 encodings/enc-led-state.go diff --git a/common/encoding.go b/common/encoding.go index 3550c78..872a782 100644 --- a/common/encoding.go +++ b/common/encoding.go @@ -73,6 +73,8 @@ func (enct EncodingType) String() string { return "EncJPEGQualityLevelPseudo1" case EncCursorPseudo: return "EncCursorPseudo" + case EncLedStatePseudo: + return "EncLedStatePseudo" case EncDesktopSizePseudo: return "EncDesktopSizePseudo" case EncLastRectPseudo: @@ -183,6 +185,7 @@ const ( EncQEMUPointerMotionChangePseudo EncodingType = -257 EncQEMUExtendedKeyEventPseudo EncodingType = -258 EncTightPng EncodingType = -260 + EncLedStatePseudo EncodingType = -261 EncExtendedDesktopSizePseudo EncodingType = -308 EncXvpPseudo EncodingType = -309 EncFencePseudo EncodingType = -312 diff --git a/encodings/enc-led-state.go b/encodings/enc-led-state.go new file mode 100644 index 0000000..a0966e1 --- /dev/null +++ b/encodings/enc-led-state.go @@ -0,0 +1,31 @@ +package encodings + +import ( + "io" + "vncproxy/common" + "vncproxy/logger" +) + +type EncLedStatePseudo struct { + LedState uint8 +} + +func (pe *EncLedStatePseudo) Type() int32 { + return int32(common.EncLedStatePseudo) +} +func (pe *EncLedStatePseudo) WriteTo(w io.Writer) (n int, err error) { + w.Write([]byte{pe.LedState}) + return 1, nil +} +func (pe *EncLedStatePseudo) Read(pf *common.PixelFormat, rect *common.Rectangle, r *common.RfbReadHelper) (common.IEncoding, error) { + if rect.Width*rect.Height == 0 { + return pe, nil + } + u8, err := r.ReadUint8() + pe.LedState = u8 + if err != nil { + logger.Error("error while reading led state: ", err) + return pe, err + } + return pe, nil +} diff --git a/player/fbs-reader.go b/player/fbs-reader.go index 173bcaf..d6c6b7c 100644 --- a/player/fbs-reader.go +++ b/player/fbs-reader.go @@ -58,6 +58,7 @@ func NewFbsReader(fbsFile string) (*FbsReader, error) { &encodings.TightEncoding{}, &encodings.TightPngEncoding{}, &encodings.EncCursorPseudo{}, + &encodings.EncLedStatePseudo{}, &encodings.RawEncoding{}, &encodings.RREEncoding{}, }, diff --git a/player/player_test.go b/player/player_test.go index 10e48bd..ec76b28 100644 --- a/player/player_test.go +++ b/player/player_test.go @@ -18,6 +18,7 @@ func TestServer(t *testing.T) { &encodings.RawEncoding{}, &encodings.TightEncoding{}, &encodings.EncCursorPseudo{}, + &encodings.EncLedStatePseudo{}, //encodings.TightPngEncoding{}, &encodings.RREEncoding{}, &encodings.ZLibEncoding{}, diff --git a/proxy/proxy.go b/proxy/proxy.go index 18e60a9..ed14ab2 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -118,6 +118,7 @@ func (vp *VncProxy) newServerConnHandler(cfg *server.ServerConfig, sconn *server &encodings.RawEncoding{}, &encodings.TightEncoding{}, &encodings.EncCursorPseudo{}, + &encodings.EncLedStatePseudo{}, &encodings.TightPngEncoding{}, &encodings.RREEncoding{}, &encodings.ZLibEncoding{},