mirror of
https://github.com/amitbet/vncproxy.git
synced 2025-08-12 11:01:40 +00:00
Merge 66c2cfd3b1
into ea8f9b5109
This commit is contained in:
commit
6a35beea33
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user