* some debugging and fixing in the proxy (still needs some work)

* added a logger and stringers for message types
This commit is contained in:
betzalel
2017-07-11 16:50:06 +03:00
parent 092f92264a
commit 18bef62b79
28 changed files with 1340 additions and 726 deletions

View File

@@ -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
}
}

View File

@@ -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

View File

@@ -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,

View File

@@ -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)

View File

@@ -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())
// }
// }