diff --git a/common/encoding.go b/common/encoding.go index 2fb6d96..3550c78 100644 --- a/common/encoding.go +++ b/common/encoding.go @@ -77,6 +77,8 @@ func (enct EncodingType) String() string { return "EncDesktopSizePseudo" case EncLastRectPseudo: return "EncLastRectPseudo" + case EncPointerPosPseudo: + return "EncPointerPosPseudo" case EncCompressionLevel10: return "EncCompressionLevel10" case EncCompressionLevel9: @@ -167,6 +169,7 @@ const ( EncCursorPseudo EncodingType = -239 EncDesktopSizePseudo EncodingType = -223 EncLastRectPseudo EncodingType = -224 + EncPointerPosPseudo EncodingType = -232 EncCompressionLevel10 EncodingType = -247 EncCompressionLevel9 EncodingType = -248 EncCompressionLevel8 EncodingType = -249 diff --git a/common/rfb-reader-helper.go b/common/rfb-reader-helper.go index 68af370..9315291 100644 --- a/common/rfb-reader-helper.go +++ b/common/rfb-reader-helper.go @@ -3,6 +3,7 @@ package common import ( "bytes" "encoding/binary" + "errors" "io" "vncproxy/logger" ) @@ -92,6 +93,8 @@ func (r *RfbReadHelper) PublishBytes(p []byte) error { return r.Listeners.Consume(seg) } +//var prevlen int + func (r *RfbReadHelper) Read(p []byte) (n int, err error) { readLen, err := r.Reader.Read(p) if err != nil { @@ -104,6 +107,15 @@ func (r *RfbReadHelper) Read(p []byte) (n int, err error) { logger.Warn("RfbReadHelper.Read: failed to collect bytes in mem buffer:", err) } } + ///////// + // modLen := (prevlen % 10000) + // if len(p) == modLen && modLen != prevlen { + // logger.Warn("RFBReadHelper debug!! plen=", prevlen, " len=", len(p)) + // } + // prevlen = len(p) + ///////// + + logger.Debugf("RfbReadHelper.Read: publishing bytes, bytes:%v", p) //write the bytes to the Listener for further processing seg := &RfbSegment{Bytes: p, SegmentType: SegmentBytes} @@ -118,11 +130,21 @@ func (r *RfbReadHelper) Read(p []byte) (n int, err error) { func (r *RfbReadHelper) ReadBytes(count int) ([]byte, error) { buff := make([]byte, count) - _, err := io.ReadFull(r, buff) + lengthRead, err := io.ReadFull(r, buff) + + //lengthRead, err := r.Read(buff) + if lengthRead != count { + logger.Errorf("RfbReadHelper.ReadBytes unable to read bytes: lengthRead=%d, countExpected=%d", lengthRead, count) + return nil, errors.New("RfbReadHelper.ReadBytes unable to read bytes") + } + + //err := binary.Read(r, binary.BigEndian, &buff) + if err != nil { //if err := binary.Read(d.conn, binary.BigEndian, &buff); err != nil { return nil, err } + return buff, nil } @@ -178,7 +200,7 @@ func (r *RfbReadHelper) ReadTightData(dataSize int) ([]byte, error) { return r.ReadBytes(int(dataSize)) } zlibDataLen, err := r.ReadCompactLen() - logger.Debugf("compactlen=%d", zlibDataLen) + logger.Debugf("RfbReadHelper.ReadTightData: compactlen=%d", zlibDataLen) if err != nil { return nil, err } diff --git a/proxy/proxy.go b/proxy/proxy.go index 15cd530..9509cd6 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -100,11 +100,11 @@ func (vp *VncProxy) newServerConnHandler(cfg *server.ServerConfig, sconn *server // gets the bytes from the actual vnc server on the env (client part of the proxy) // and writes them through the server socket to the vnc-client - serverUpdater := &ServerUpdater{sconn} - cconn.Listeners.AddListener(serverUpdater) + // serverUpdater := &ServerUpdater{sconn} + // cconn.Listeners.AddListener(serverUpdater) - // // serverMsgRepeater := &listeners.WriteTo{sconn, "vnc-client-bound"} - // // cconn.Listeners.AddListener(serverMsgRepeater) + serverMsgRepeater := &listeners.WriteTo{sconn, "vnc-client-bound"} + cconn.Listeners.AddListener(serverMsgRepeater) // gets the messages from the server part (from vnc-client), // and write through the client to the actual vnc-server @@ -165,13 +165,12 @@ func (vp *VncProxy) StartListening() { // }, } - if vp.wsListeningUrl != "" { - go server.WsServe(vp.wsListeningUrl, cfg) - } if vp.tcpListeningUrl != "" { go server.TcpServe(vp.tcpListeningUrl, cfg) } - + if vp.wsListeningUrl != "" { + go server.WsServe(vp.wsListeningUrl, cfg) + } // Process messages coming in on the ClientMessage channel. for { msg := <-chClient