This commit is contained in:
Adriano Sela Aviles 2024-03-15 10:37:14 -07:00 committed by GitHub
commit 6a35beea33
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 66 additions and 19 deletions

View File

@ -4,6 +4,7 @@ import (
"net"
"path"
"strconv"
"sync"
"time"
"github.com/amitbet/vncproxy/client"
@ -16,12 +17,13 @@ import (
)
type VncProxy struct {
TCPListeningURL string // empty = not listening on tcp
WsListeningURL string // empty = not listening on ws
RecordingDir string // empty = no recording
ProxyVncPassword string //empty = no auth
SingleSession *VncSession // to be used when not using sessions
UsingSessions bool //false = single session - defined in the var above
NetListener net.Listener // nil = not listening on a generic net.Listener
TCPListeningURL string // empty = not listening on tcp
WsListeningURL string // empty = not listening on ws
RecordingDir string // empty = no recording
ProxyVncPassword string //empty = no auth
SingleSession *VncSession // to be used when not using sessions
UsingSessions bool //false = single session - defined in the var above
sessionManager *SessionManager
}
@ -172,7 +174,7 @@ func (vp *VncProxy) StartListening() {
secHandlers := []server.SecurityHandler{&server.ServerAuthNone{}}
if vp.ProxyVncPassword != "" {
secHandlers = []server.SecurityHandler{&server.ServerAuthVNC{vp.ProxyVncPassword}}
secHandlers = []server.SecurityHandler{&server.ServerAuthVNC{Pass: vp.ProxyVncPassword}}
}
cfg := &server.ServerConfig{
SecurityHandlers: secHandlers,
@ -186,19 +188,62 @@ func (vp *VncProxy) StartListening() {
UseDummySession: !vp.UsingSessions,
}
if vp.TCPListeningURL != "" && vp.WsListeningURL != "" {
logger.Infof("running two listeners: tcp port: %s, ws url: %s", vp.TCPListeningURL, vp.WsListeningURL)
go server.WsServe(vp.WsListeningURL, cfg)
server.TcpServe(vp.TCPListeningURL, cfg)
if vp.countListeners() == 0 {
logger.Error("no listeners configured on VncProxy")
return
}
var wg sync.WaitGroup
if vp.WsListeningURL != "" {
logger.Infof("running ws listener url: %s", vp.WsListeningURL)
server.WsServe(vp.WsListeningURL, cfg)
wg.Add(1)
go func() {
defer wg.Done()
defer logger.Info("ws listener stopped")
logger.Infof("running ws listener url: %s", vp.WsListeningURL)
server.WsServe(vp.WsListeningURL, cfg)
}()
}
if vp.TCPListeningURL != "" {
logger.Infof("running tcp listener on port: %s", vp.TCPListeningURL)
server.TcpServe(vp.TCPListeningURL, cfg)
wg.Add(1)
go func() {
defer wg.Done()
defer logger.Info("tcp listener stopped")
logger.Infof("running tcp listener on port: %s", vp.TCPListeningURL)
server.TcpServe(vp.TCPListeningURL, cfg)
}()
}
if vp.NetListener != nil {
wg.Add(1)
go func() {
defer wg.Done()
defer logger.Info("generic net.Listener stopped")
logger.Info("running generic net.Listener")
server.NetListenerServe(vp.NetListener, cfg)
}()
}
wg.Wait()
}
func (vp *VncProxy) countListeners() int {
count := 0
if vp.TCPListeningURL != "" {
count++
}
if vp.WsListeningURL != "" {
count++
}
if vp.NetListener != nil {
count++
}
return count
}

View File

@ -1,10 +1,10 @@
package server
import (
"fmt"
"io"
"log"
"net"
"github.com/amitbet/vncproxy/common"
)
@ -61,6 +61,10 @@ func TcpServe(url string, cfg *ServerConfig) error {
if err != nil {
log.Fatalf("Error listen. %v", err)
}
return NetListenerServe(ln, cfg)
}
func NetListenerServe(ln net.Listener, cfg *ServerConfig) error {
for {
c, err := ln.Accept()
if err != nil {
@ -68,7 +72,6 @@ func TcpServe(url string, cfg *ServerConfig) error {
}
go attachNewServerConn(c, cfg, "dummySession")
}
return nil
}
func attachNewServerConn(c io.ReadWriter, cfg *ServerConfig, sessionId string) error {
@ -79,7 +82,6 @@ func attachNewServerConn(c io.ReadWriter, cfg *ServerConfig, sessionId string) e
}
if err := ServerVersionHandler(cfg, conn); err != nil {
fmt.Errorf("err: %v\n", err)
conn.Close()
return err
}