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" "net"
"path" "path"
"strconv" "strconv"
"sync"
"time" "time"
"github.com/amitbet/vncproxy/client" "github.com/amitbet/vncproxy/client"
@ -16,12 +17,13 @@ import (
) )
type VncProxy struct { type VncProxy struct {
TCPListeningURL string // empty = not listening on tcp NetListener net.Listener // nil = not listening on a generic net.Listener
WsListeningURL string // empty = not listening on ws TCPListeningURL string // empty = not listening on tcp
RecordingDir string // empty = no recording WsListeningURL string // empty = not listening on ws
ProxyVncPassword string //empty = no auth RecordingDir string // empty = no recording
SingleSession *VncSession // to be used when not using sessions ProxyVncPassword string //empty = no auth
UsingSessions bool //false = single session - defined in the var above SingleSession *VncSession // to be used when not using sessions
UsingSessions bool //false = single session - defined in the var above
sessionManager *SessionManager sessionManager *SessionManager
} }
@ -172,7 +174,7 @@ func (vp *VncProxy) StartListening() {
secHandlers := []server.SecurityHandler{&server.ServerAuthNone{}} secHandlers := []server.SecurityHandler{&server.ServerAuthNone{}}
if vp.ProxyVncPassword != "" { if vp.ProxyVncPassword != "" {
secHandlers = []server.SecurityHandler{&server.ServerAuthVNC{vp.ProxyVncPassword}} secHandlers = []server.SecurityHandler{&server.ServerAuthVNC{Pass: vp.ProxyVncPassword}}
} }
cfg := &server.ServerConfig{ cfg := &server.ServerConfig{
SecurityHandlers: secHandlers, SecurityHandlers: secHandlers,
@ -186,19 +188,62 @@ func (vp *VncProxy) StartListening() {
UseDummySession: !vp.UsingSessions, UseDummySession: !vp.UsingSessions,
} }
if vp.TCPListeningURL != "" && vp.WsListeningURL != "" { if vp.countListeners() == 0 {
logger.Infof("running two listeners: tcp port: %s, ws url: %s", vp.TCPListeningURL, vp.WsListeningURL) logger.Error("no listeners configured on VncProxy")
return
go server.WsServe(vp.WsListeningURL, cfg)
server.TcpServe(vp.TCPListeningURL, cfg)
} }
var wg sync.WaitGroup
if vp.WsListeningURL != "" { if vp.WsListeningURL != "" {
logger.Infof("running ws listener url: %s", vp.WsListeningURL) wg.Add(1)
server.WsServe(vp.WsListeningURL, cfg)
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 != "" { if vp.TCPListeningURL != "" {
logger.Infof("running tcp listener on port: %s", vp.TCPListeningURL) wg.Add(1)
server.TcpServe(vp.TCPListeningURL, cfg)
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 package server
import ( import (
"fmt"
"io" "io"
"log" "log"
"net" "net"
"github.com/amitbet/vncproxy/common" "github.com/amitbet/vncproxy/common"
) )
@ -61,6 +61,10 @@ func TcpServe(url string, cfg *ServerConfig) error {
if err != nil { if err != nil {
log.Fatalf("Error listen. %v", err) log.Fatalf("Error listen. %v", err)
} }
return NetListenerServe(ln, cfg)
}
func NetListenerServe(ln net.Listener, cfg *ServerConfig) error {
for { for {
c, err := ln.Accept() c, err := ln.Accept()
if err != nil { if err != nil {
@ -68,7 +72,6 @@ func TcpServe(url string, cfg *ServerConfig) error {
} }
go attachNewServerConn(c, cfg, "dummySession") go attachNewServerConn(c, cfg, "dummySession")
} }
return nil
} }
func attachNewServerConn(c io.ReadWriter, cfg *ServerConfig, sessionId string) error { 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 { if err := ServerVersionHandler(cfg, conn); err != nil {
fmt.Errorf("err: %v\n", err)
conn.Close() conn.Close()
return err return err
} }