mirror of
https://github.com/amitbet/vncproxy.git
synced 2025-09-24 02:55:24 +00:00
fixed recorder (message init logic broke it)
added some handling for pixel format changes
This commit is contained in:
71
proxy/message-listeners.go
Normal file
71
proxy/message-listeners.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package proxy
|
||||
|
||||
import (
|
||||
"vncproxy/client"
|
||||
"vncproxy/common"
|
||||
"vncproxy/logger"
|
||||
"vncproxy/server"
|
||||
)
|
||||
|
||||
type ClientUpdater struct {
|
||||
conn *client.ClientConn
|
||||
}
|
||||
|
||||
// Consume recieves vnc-server-bound messages (Client messages) and updates the server part of the proxy
|
||||
func (cc *ClientUpdater) Consume(seg *common.RfbSegment) error {
|
||||
//logger.Debugf("ClientUpdater.Consume (vnc-server-bound): got segment type=%s bytes: %v", seg.SegmentType, seg.Bytes)
|
||||
switch seg.SegmentType {
|
||||
|
||||
case common.SegmentFullyParsedClientMessage:
|
||||
clientMsg := seg.Message.(common.ClientMessage)
|
||||
logger.Debugf("ClientUpdater.Consume:(vnc-server-bound) got ClientMessage type=%s", clientMsg.Type())
|
||||
switch clientMsg.Type() {
|
||||
|
||||
case common.SetPixelFormatMsgType:
|
||||
// update pixel format
|
||||
logger.Debugf("ClientUpdater.Consume: updating pixel format")
|
||||
pixFmtMsg := clientMsg.(*server.SetPixelFormat)
|
||||
cc.conn.PixelFormat = pixFmtMsg.PF
|
||||
}
|
||||
|
||||
err := clientMsg.Write(cc.conn)
|
||||
if err != nil {
|
||||
logger.Errorf("ClientUpdater.Consume (vnc-server-bound, SegmentFullyParsedClientMessage): problem writing to port: %s", err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type ServerUpdater struct {
|
||||
conn *server.ServerConn
|
||||
Name string
|
||||
}
|
||||
|
||||
// Consume receives vnc-client-bound messages (Server messages) and updates the server part of the proxy
|
||||
func (p *ServerUpdater) Consume(seg *common.RfbSegment) error {
|
||||
|
||||
logger.Debugf("ServerUpdater.Consume ("+p.Name+"): got segment type=%s bytes: %v", seg.SegmentType, seg.Bytes)
|
||||
switch seg.SegmentType {
|
||||
case common.SegmentMessageSeparator:
|
||||
case common.SegmentRectSeparator:
|
||||
case common.SegmentBytes:
|
||||
// _, err := p.Writer.Write(seg.Bytes)
|
||||
// if (err != nil) {
|
||||
// logger.Errorf("WriteTo.Consume ("+p.Name+" SegmentBytes): problem writing to port: %s", err)
|
||||
// }
|
||||
// return err
|
||||
case common.SegmentFullyParsedClientMessage:
|
||||
|
||||
// clientMsg := seg.Message.(common.ClientMessage)
|
||||
// logger.Debugf("WriteTo.Consume ("+p.Name+"): got ClientMessage type=%s", clientMsg.Type())
|
||||
// err := clientMsg.Write(p.Writer)
|
||||
// if err != nil {
|
||||
// logger.Errorf("WriteTo.Consume ("+p.Name+" SegmentFullyParsedClientMessage): problem writing to port: %s", err)
|
||||
// }
|
||||
// return err
|
||||
default:
|
||||
//return errors.New("WriteTo.Consume: undefined RfbSegment type")
|
||||
}
|
||||
return nil
|
||||
}
|
@@ -101,8 +101,9 @@ func (vp *VncProxy) newServerConnHandler(cfg *server.ServerConfig, sconn *server
|
||||
|
||||
// gets the messages from the server part (from vnc-client),
|
||||
// and write through the client to the actual vnc-server
|
||||
clientMsgRepeater := &listeners.WriteTo{cconn, "vnc-server-bound"}
|
||||
sconn.Listeners.AddListener(clientMsgRepeater)
|
||||
//clientMsgRepeater := &listeners.WriteTo{cconn, "vnc-server-bound"}
|
||||
clientUpdater := &ClientUpdater{cconn}
|
||||
sconn.Listeners.AddListener(clientUpdater)
|
||||
|
||||
err = cconn.Connect()
|
||||
if err != nil {
|
||||
@@ -121,7 +122,8 @@ func (vp *VncProxy) newServerConnHandler(cfg *server.ServerConfig, sconn *server
|
||||
//encodings.CoRREEncoding{},
|
||||
//encodings.HextileEncoding{},
|
||||
}
|
||||
err = cconn.SetEncodings(encs)
|
||||
cconn.Encs = encs
|
||||
//err = cconn.SetEncodings(encs)
|
||||
if err != nil {
|
||||
logger.Errorf("Proxy.newServerConnHandler error connecting to client: %s", err)
|
||||
return err
|
||||
|
@@ -7,8 +7,8 @@ func TestProxy(t *testing.T) {
|
||||
|
||||
proxy := &VncProxy{
|
||||
wsListeningUrl: "http://localhost:7777/", // empty = not listening on ws
|
||||
recordingDir: "c:\\vncRec", // empty = no recording
|
||||
targetServersPassword: "Ch_#!T@8", //empty = no auth
|
||||
recordingDir: "/Users/amitbet/vncRec", // empty = no recording
|
||||
targetServersPassword: "Ch_#!T@8", //empty = no auth
|
||||
SingleSession: &VncSession{
|
||||
TargetHostname: "localhost",
|
||||
TargetPort: "5903",
|
||||
|
Reference in New Issue
Block a user