mirror of
https://github.com/amitbet/vncproxy.git
synced 2025-09-23 02:19:52 +00:00
* some debugging and fixing in the proxy (still needs some work)
* added a logger and stringers for message types
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"io"
|
||||
"sync"
|
||||
"vncproxy/common"
|
||||
"vncproxy/logger"
|
||||
)
|
||||
|
||||
type ServerConn struct {
|
||||
@@ -40,7 +41,7 @@ type ServerConn struct {
|
||||
pixelFormat *common.PixelFormat
|
||||
|
||||
// a consumer for the parsed messages, to allow for recording and proxy
|
||||
Listener common.SegmentConsumer
|
||||
Listeners *common.MultiListener
|
||||
|
||||
SessionId string
|
||||
|
||||
@@ -70,6 +71,7 @@ func NewServerConn(c io.ReadWriter, cfg *ServerConfig) (*ServerConn, error) {
|
||||
pixelFormat: cfg.PixelFormat,
|
||||
fbWidth: cfg.Width,
|
||||
fbHeight: cfg.Height,
|
||||
Listeners: &common.MultiListener{},
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -183,7 +185,7 @@ func (c *ServerConn) handle() error {
|
||||
for {
|
||||
select {
|
||||
case msg := <-c.cfg.ServerMessageCh:
|
||||
fmt.Printf("%v", msg)
|
||||
logger.Debugf("%v", msg)
|
||||
// if err = msg.Write(c); err != nil {
|
||||
// return err
|
||||
// }
|
||||
@@ -204,25 +206,32 @@ func (c *ServerConn) handle() error {
|
||||
default:
|
||||
var messageType common.ClientMessageType
|
||||
if err := binary.Read(c, binary.BigEndian, &messageType); err != nil {
|
||||
fmt.Printf("Error: %v\n", err)
|
||||
logger.Errorf("Error: %v", err)
|
||||
return err
|
||||
}
|
||||
msg, ok := clientMessages[messageType]
|
||||
if !ok {
|
||||
return fmt.Errorf("unsupported message-type: %v", messageType)
|
||||
|
||||
return fmt.Errorf("ServerConn.Handle: unsupported message-type: %v", messageType)
|
||||
}
|
||||
|
||||
parsedMsg, err := msg.Read(c)
|
||||
|
||||
if err != nil {
|
||||
logger.Errorf("srv err %s", err.Error())
|
||||
return err
|
||||
}
|
||||
|
||||
seg := &common.RfbSegment{
|
||||
SegmentType: common.SegmentFullyParsedClientMessage,
|
||||
Message: parsedMsg,
|
||||
}
|
||||
c.Listener.Consume(seg)
|
||||
err = c.Listeners.Consume(seg)
|
||||
if err != nil {
|
||||
fmt.Printf("srv err %s\n", err.Error())
|
||||
logger.Errorf("ServerConn.Handle: listener consume err %s", err.Error())
|
||||
return err
|
||||
}
|
||||
fmt.Printf("message:%s, %v\n", parsedMsg.Type(), parsedMsg)
|
||||
|
||||
logger.Debugf("ServerConn.Handle got ClientMessage: %s, %v", parsedMsg.Type(), parsedMsg)
|
||||
//c.cfg.ClientMessageCh <- parsedMsg
|
||||
}
|
||||
}
|
||||
|
@@ -60,7 +60,7 @@ type ServerConfig struct {
|
||||
DesktopName []byte
|
||||
Height uint16
|
||||
Width uint16
|
||||
|
||||
UseDummySession bool
|
||||
//handler to allow for registering for messages, this can't be a channel
|
||||
//because of the websockets handler function which will kill the connection on exit if conn.handle() is run on another thread
|
||||
NewConnHandler ServerHandler
|
||||
@@ -70,7 +70,7 @@ func wsHandlerFunc(ws io.ReadWriter, cfg *ServerConfig, sessionId string) {
|
||||
// header := ws.Request().Header
|
||||
// url := ws.Request().URL
|
||||
// //stam := header.Get("Origin")
|
||||
// fmt.Printf("header: %v\nurl: %v\n", header, url)
|
||||
// logger.Debugf("header: %v\nurl: %v", header, url)
|
||||
// io.Copy(ws, ws)
|
||||
|
||||
err := attachNewServerConn(ws, cfg, sessionId)
|
||||
@@ -96,7 +96,7 @@ func TcpServe(url string, cfg *ServerConfig) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
go attachNewServerConn(c, cfg, "tcpDummySession")
|
||||
go attachNewServerConn(c, cfg, "dummySession")
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
@@ -131,7 +131,11 @@ func attachNewServerConn(c io.ReadWriter, cfg *ServerConfig, sessionId string) e
|
||||
conn.Close()
|
||||
return err
|
||||
}
|
||||
|
||||
conn.SessionId = sessionId
|
||||
if cfg.UseDummySession {
|
||||
conn.SessionId = "dummySession"
|
||||
}
|
||||
cfg.NewConnHandler(cfg, conn)
|
||||
|
||||
//go here will kill ws connections
|
||||
|
@@ -1,10 +1,10 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"vncproxy/logger"
|
||||
|
||||
"golang.org/x/net/websocket"
|
||||
)
|
||||
@@ -31,7 +31,7 @@ func (wsServer *WsServer) Listen(urlStr string, handlerFunc WsHandler) {
|
||||
}
|
||||
url, err := url.Parse(urlStr)
|
||||
if err != nil {
|
||||
fmt.Println("error while parsing url: ", err)
|
||||
logger.Errorf("error while parsing url: ", err)
|
||||
}
|
||||
|
||||
// http.HandleFunc(url.Path,
|
||||
|
@@ -1,11 +1,11 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"vncproxy/logger"
|
||||
|
||||
"bytes"
|
||||
|
||||
@@ -92,7 +92,7 @@ func (wsServer *WsServer1) Listen(urlStr string, handlerFunc WsHandler) {
|
||||
}
|
||||
url, err := url.Parse(urlStr)
|
||||
if err != nil {
|
||||
fmt.Println("error while parsing url: ", err)
|
||||
logger.Errorf("error while parsing url: ", err)
|
||||
}
|
||||
|
||||
http.HandleFunc(url.Path, handleConnection)
|
||||
|
@@ -1,33 +1 @@
|
||||
package server
|
||||
|
||||
// import (
|
||||
// "fmt"
|
||||
// "io"
|
||||
// "net/http"
|
||||
// "testing"
|
||||
|
||||
// "golang.org/x/net/websocket"
|
||||
// )
|
||||
|
||||
// func TestWsServer(t *testing.T) {
|
||||
// server := WsServer{}
|
||||
// server.Listen(":8090")
|
||||
// }
|
||||
|
||||
// // Echo the data received on the WebSocket.
|
||||
// func EchoHandler(ws *websocket.Conn) {
|
||||
// header := ws.Request().Header
|
||||
// url := ws.Request().URL
|
||||
// //stam := header.Get("Origin")
|
||||
// fmt.Printf("header: %v\nurl: %v\n", header, url)
|
||||
// io.Copy(ws, ws)
|
||||
// }
|
||||
|
||||
// // This example demonstrates a trivial echo server.
|
||||
// func TestGoWsServer(t *testing.T) {
|
||||
// http.Handle("/", websocket.Handler(EchoHandler))
|
||||
// err := http.ListenAndServe(":11111", nil)
|
||||
// if err != nil {
|
||||
// panic("ListenAndServe: " + err.Error())
|
||||
// }
|
||||
// }
|
||||
|
Reference in New Issue
Block a user