mirror of
https://github.com/amitbet/vncproxy.git
synced 2025-04-30 20:13:19 +00:00
Merge pull request #1 from exoscale/feature/unixsock-target
Add support for UNIX socket VNC target
This commit is contained in:
commit
f00e2c33e7
@ -14,8 +14,9 @@ func main() {
|
|||||||
var wsPort = flag.String("wsPort", "", "websocket port")
|
var wsPort = flag.String("wsPort", "", "websocket port")
|
||||||
var vncPass = flag.String("vncPass", "", "password on incoming vnc connections to the proxy, defaults to no password")
|
var vncPass = flag.String("vncPass", "", "password on incoming vnc connections to the proxy, defaults to no password")
|
||||||
var recordDir = flag.String("recDir", "", "path to save FBS recordings WILL NOT RECORD if not defined.")
|
var recordDir = flag.String("recDir", "", "path to save FBS recordings WILL NOT RECORD if not defined.")
|
||||||
var targetVncPort = flag.String("targPort", "", "target vnc server port")
|
var targetVnc = flag.String("target", "", "target vnc server (host:port or /path/to/unix.socket)")
|
||||||
var targetVncHost = flag.String("targHost", "", "target vnc server host")
|
var targetVncPort = flag.String("targPort", "", "target vnc server port (deprecated, use -target)")
|
||||||
|
var targetVncHost = flag.String("targHost", "", "target vnc server host (deprecated, use -target)")
|
||||||
var targetVncPass = flag.String("targPass", "", "target vnc password")
|
var targetVncPass = flag.String("targPass", "", "target vnc password")
|
||||||
var logLevel = flag.String("logLevel", "info", "change logging level")
|
var logLevel = flag.String("logLevel", "info", "change logging level")
|
||||||
|
|
||||||
@ -28,8 +29,8 @@ func main() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
if *targetVncPort == "" {
|
if *targetVnc == "" && *targetVncPort == "" {
|
||||||
logger.Error("no target vnc server port defined")
|
logger.Error("no target vnc server host/port or socket defined")
|
||||||
flag.Usage()
|
flag.Usage()
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
@ -48,6 +49,7 @@ func main() {
|
|||||||
TcpListeningUrl: tcpUrl,
|
TcpListeningUrl: tcpUrl,
|
||||||
ProxyVncPassword: *vncPass, //empty = no auth
|
ProxyVncPassword: *vncPass, //empty = no auth
|
||||||
SingleSession: &vncproxy.VncSession{
|
SingleSession: &vncproxy.VncSession{
|
||||||
|
Target: *targetVnc,
|
||||||
TargetHostname: *targetVncHost,
|
TargetHostname: *targetVncHost,
|
||||||
TargetPort: *targetVncPort,
|
TargetPort: *targetVncPort,
|
||||||
TargetPassword: *targetVncPass, //"vncPass",
|
TargetPassword: *targetVncPass, //"vncPass",
|
||||||
|
@ -24,8 +24,17 @@ type VncProxy struct {
|
|||||||
sessionManager *SessionManager
|
sessionManager *SessionManager
|
||||||
}
|
}
|
||||||
|
|
||||||
func (vp *VncProxy) createClientConnection(targetServerUrl string, vncPass string) (*client.ClientConn, error) {
|
func (vp *VncProxy) createClientConnection(target string, vncPass string) (*client.ClientConn, error) {
|
||||||
nc, err := net.Dial("tcp", targetServerUrl)
|
var (
|
||||||
|
nc net.Conn
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
|
if target[0] == '/' {
|
||||||
|
nc, err = net.Dial("unix", target)
|
||||||
|
} else {
|
||||||
|
nc, err = net.Dial("tcp", target)
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("error connecting to vnc server: %s", err)
|
logger.Errorf("error connecting to vnc server: %s", err)
|
||||||
@ -85,7 +94,12 @@ func (vp *VncProxy) newServerConnHandler(cfg *server.ServerConfig, sconn *server
|
|||||||
|
|
||||||
session.Status = SessionStatusInit
|
session.Status = SessionStatusInit
|
||||||
if session.Type == SessionTypeProxyPass || session.Type == SessionTypeRecordingProxy {
|
if session.Type == SessionTypeProxyPass || session.Type == SessionTypeRecordingProxy {
|
||||||
cconn, err := vp.createClientConnection(session.TargetHostname+":"+session.TargetPort, session.TargetPassword)
|
target := session.Target
|
||||||
|
if session.TargetHostname != "" && session.TargetPort != "" {
|
||||||
|
target = session.TargetHostname + ":" + session.TargetPort
|
||||||
|
}
|
||||||
|
|
||||||
|
cconn, err := vp.createClientConnection(target, session.TargetPassword)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
session.Status = SessionStatusError
|
session.Status = SessionStatusError
|
||||||
logger.Errorf("Proxy.newServerConnHandler error creating connection: %s", err)
|
logger.Errorf("Proxy.newServerConnHandler error creating connection: %s", err)
|
||||||
|
@ -16,6 +16,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type VncSession struct {
|
type VncSession struct {
|
||||||
|
Target string
|
||||||
TargetHostname string
|
TargetHostname string
|
||||||
TargetPort string
|
TargetPort string
|
||||||
TargetPassword string
|
TargetPassword string
|
||||||
|
Loading…
Reference in New Issue
Block a user