diff --git a/code/client/connect.go b/code/client/connect.go index d8dda9f..96a156b 100644 --- a/code/client/connect.go +++ b/code/client/connect.go @@ -74,7 +74,7 @@ func shellCreate(mgr *tunnel.Mgr, conn *pool.Conn, msg *network.Msg) { lk.Forward() } -func vncCreate(mgr *tunnel.Mgr, conn *pool.Conn, msg *network.Msg) { +func vncCreate(confDir string, mgr *tunnel.Mgr, conn *pool.Conn, msg *network.Msg) { create := msg.GetCreq() tn := mgr.Get(create.GetName(), msg.GetFrom()) if tn == nil { @@ -88,7 +88,7 @@ func vncCreate(mgr *tunnel.Mgr, conn *pool.Conn, msg *network.Msg) { } lk := tn.NewLink(msg.GetLinkId(), msg.GetFrom(), msg.GetFromIdx(), nil, conn).(*vnc.Link) lk.SetQuality(create.GetCvnc().GetQuality()) - err := lk.Fork() + err := lk.Fork(confDir) if err != nil { logging.Error("create vnc failed: %v", err) conn.SendConnectError(msg.GetFrom(), msg.GetFromIdx(), msg.GetLinkId(), err.Error()) diff --git a/code/client/main.go b/code/client/main.go index 7230bec..cfb2c92 100644 --- a/code/client/main.go +++ b/code/client/main.go @@ -40,7 +40,8 @@ func showVersion() { } type app struct { - cfg *global.Configure + confDir string + cfg *global.Configure } func (a *app) Start(s service.Service) error { @@ -98,7 +99,7 @@ func (a *app) run() { case network.ConnectRequest_shell: shellCreate(mgr, conn, msg) case network.ConnectRequest_vnc: - vncCreate(mgr, conn, msg) + vncCreate(a.confDir, mgr, conn, msg) } default: linkID = msg.GetLinkId() @@ -166,11 +167,13 @@ func main() { if *act == "vnc.worker" { defer utils.Recover("vnc.worker") + logging.SetSizeRotate(cfg.LogDir, "np-cli.vnc", int(cfg.LogSize.Bytes()), cfg.LogRotate, true) + defer logging.Flush() vnc.RunWorker(uint16(*vport)) return } - app := &app{cfg: cfg} + app := &app{confDir: *conf, cfg: cfg} sv, err := service.New(app, appCfg) runtime.Assert(err) diff --git a/code/client/tunnel/vnc/core/process.go b/code/client/tunnel/vnc/core/process.go index 69a5624..6b9b126 100644 --- a/code/client/tunnel/vnc/core/process.go +++ b/code/client/tunnel/vnc/core/process.go @@ -52,6 +52,7 @@ func (p *Process) listenAndServe() (uint16, error) { var upgrader = websocket.Upgrader{EnableCompression: true} func (p *Process) ws(w http.ResponseWriter, r *http.Request) { + logging.Info("child process connected") conn, err := upgrader.Upgrade(w, r, nil) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) diff --git a/code/client/tunnel/vnc/core/process_windows.go b/code/client/tunnel/vnc/core/process_windows.go index a69311f..8c61ee3 100644 --- a/code/client/tunnel/vnc/core/process_windows.go +++ b/code/client/tunnel/vnc/core/process_windows.go @@ -76,15 +76,15 @@ func getSessionUserTokenWin() windows.Token { } // CreateWorkerProcess create worker process -func CreateWorkerProcess() (*Process, error) { +func CreateWorkerProcess(confDir string) (*Process, error) { tk := getSessionUserTokenWin() if tk != 0 { defer windows.CloseHandle(windows.Handle(tk)) } - return createWorker(tk) + return createWorker(confDir, tk) } -func createWorker(tk windows.Token) (*Process, error) { +func createWorker(confDir string, tk windows.Token) (*Process, error) { dir, err := os.Executable() if err != nil { return nil, err @@ -101,7 +101,7 @@ func createWorker(tk windows.Token) (*Process, error) { startup.Cb = uint32(unsafe.Sizeof(startup)) startup.Desktop = windows.StringToUTF16Ptr("WinSta0\\default") startup.Flags = windows.STARTF_USESHOWWINDOW - cmd := windows.StringToUTF16Ptr(dir + fmt.Sprintf(" -action vnc.worker -vnc %d", port)) + cmd := windows.StringToUTF16Ptr(dir + fmt.Sprintf(" -conf %s -action vnc.worker -vport %d", confDir, port)) if tk == 0 { err = windows.CreateProcess(nil, cmd, nil, nil, false, windows.DETACHED_PROCESS, nil, nil, &startup, &process) } else { diff --git a/code/client/tunnel/vnc/link.go b/code/client/tunnel/vnc/link.go index 64a6427..0b2ae23 100644 --- a/code/client/tunnel/vnc/link.go +++ b/code/client/tunnel/vnc/link.go @@ -65,8 +65,8 @@ func (link *Link) SetQuality(q uint32) { } // Fork fork worker process -func (link *Link) Fork() error { - p, err := core.CreateWorkerProcess() +func (link *Link) Fork(confDir string) error { + p, err := core.CreateWorkerProcess(confDir) if err != nil { return err }