simplified some argument handlings

This commit is contained in:
2025-12-24 13:48:56 +09:00
parent 343724753d
commit 100abf9a09
2 changed files with 99 additions and 98 deletions

View File

@@ -1,5 +1,12 @@
## normal operation ## simple rpty access
- ./hodu server --rpc-on=0.0.0.0:9999 --ctl-on=[::1]:8888
- ./hodu client --rpc-to=127.0.0.1:9999 --ctl-on=[::1]:1107 --client-token=test-client --pty-shell=/bin/bash
Access `http://[::1]:8888/_rpty/xterm.html?client-token=test-client` on the server using the web browser.
## port based proxy service
- ./hodu server --rpc-on=0.0.0.0:9999 --ctl-on=0.0.0.0:8888 --pxy-on=0.0.0.0:9998 --wpx-on=0.0.0.0:9997 - ./hodu server --rpc-on=0.0.0.0:9999 --ctl-on=0.0.0.0:8888 --pxy-on=0.0.0.0:9998 --wpx-on=0.0.0.0:9997
- ./hodu client --rpc-to=127.0.0.1:9999 --ctl-on=127.0.0.1:1107 "127.0.0.2:22,0.0.0.0:12345,ssh,Access SSH Server" - ./hodu client --rpc-to=127.0.0.1:9999 --ctl-on=127.0.0.1:1107 "127.0.0.2:22,0.0.0.0:12345,ssh,Access SSH Server"
@@ -14,10 +21,8 @@
} }
``` ```
## client control channel ## client control channel
### Add a new route ### Add a new route

View File

@@ -98,21 +98,16 @@ func (sh *signal_handler) WriteLog(id string, level hodu.LogLevel, fmt string, a
// -------------------------------------------------------------------- // --------------------------------------------------------------------
func server_main(ctl_addrs []string, rpc_addrs []string, rpx_addrs[] string, pxy_addrs []string, wpx_addrs []string, logfile string, cfg *ServerConfig) error { func server_main(ctl_addrs []string, rpc_addrs []string, rpx_addrs[] string, pxy_addrs []string, wpx_addrs []string, cfg *ServerConfig) error {
var s *hodu.Server var s *hodu.Server
var config *hodu.ServerConfig var config *hodu.ServerConfig
var logger *AppLogger var logger *AppLogger
var logmask hodu.LogMask
var logfile_maxsize int64
var logfile_rotate int
var pty_user string var pty_user string
var pty_shell string var pty_shell string
var xterm_html_file string var xterm_html_file string
var xterm_html string var xterm_html string
var err error var err error
logmask = hodu.LOG_ALL
config = &hodu.ServerConfig{ config = &hodu.ServerConfig{
CtlAddrs: ctl_addrs, CtlAddrs: ctl_addrs,
RpcAddrs: rpc_addrs, RpcAddrs: rpc_addrs,
@@ -121,7 +116,7 @@ func server_main(ctl_addrs []string, rpc_addrs []string, rpx_addrs[] string, pxy
WpxAddrs: wpx_addrs, WpxAddrs: wpx_addrs,
} }
if cfg != nil { // load configuration from cfg
config.CtlTls, err = make_tls_server_config(&cfg.CTL.TLS) config.CtlTls, err = make_tls_server_config(&cfg.CTL.TLS)
if err != nil { return err } if err != nil { return err }
config.RpcTls, err = make_tls_server_config(&cfg.RPC.TLS) config.RpcTls, err = make_tls_server_config(&cfg.RPC.TLS)
@@ -159,21 +154,16 @@ func server_main(ctl_addrs []string, rpc_addrs []string, rpx_addrs[] string, pxy
pty_user = cfg.APP.PtyUser pty_user = cfg.APP.PtyUser
pty_shell = cfg.APP.PtyShell pty_shell = cfg.APP.PtyShell
xterm_html_file = cfg.APP.XtermHtmlFile xterm_html_file = cfg.APP.XtermHtmlFile
// end of loading configuration from cfg
logmask = log_strings_to_mask(cfg.APP.LogMask)
if logfile == "" { logfile = cfg.APP.LogFile }
logfile_maxsize = cfg.APP.LogMaxSize
logfile_rotate = cfg.APP.LogRotate
}
if len(config.RpcAddrs) <= 0 { if len(config.RpcAddrs) <= 0 {
return fmt.Errorf("no rpc service addresses specified") return fmt.Errorf("no rpc service addresses specified")
} }
if logfile == "" { if cfg.APP.LogFile == "" {
logger = NewAppLogger("server", os.Stderr, logmask) logger = NewAppLogger("server", os.Stderr, log_strings_to_mask(cfg.APP.LogMask))
} else { } else {
logger, err = NewAppLoggerToFile("server", logfile, logfile_maxsize, logfile_rotate, logmask) logger, err = NewAppLoggerToFile("server", cfg.APP.LogFile, cfg.APP.LogMaxSize, cfg.APP.LogRotate, log_strings_to_mask(cfg.APP.LogMask))
if err != nil { if err != nil {
return fmt.Errorf("failed to initialize logger - %s", err.Error()) return fmt.Errorf("failed to initialize logger - %s", err.Error())
} }
@@ -273,14 +263,11 @@ func parse_client_route_config(v string) (*hodu.ClientRouteConfig, error) {
return &hodu.ClientRouteConfig{PeerAddr: va[0], PeerName: ptc_name, ServiceOption: option, ServiceAddr: svc_addr}, nil // TODO: other fields return &hodu.ClientRouteConfig{PeerAddr: va[0], PeerName: ptc_name, ServiceOption: option, ServiceAddr: svc_addr}, nil // TODO: other fields
} }
func client_main(ctl_addrs []string, rpc_addrs []string, route_configs []string, logfile string, cfg *ClientConfig) error { func client_main(ctl_addrs []string, rpc_addrs []string, route_configs []string, cfg *ClientConfig) error {
var c *hodu.Client var c *hodu.Client
var config *hodu.ClientConfig var config *hodu.ClientConfig
var cc hodu.ClientConnConfig var cc hodu.ClientConnConfig
var logger *AppLogger var logger *AppLogger
var logmask hodu.LogMask
var logfile_maxsize int64
var logfile_rotate int
var pty_user string var pty_user string
var pty_shell string var pty_shell string
var xterm_html_file string var xterm_html_file string
@@ -288,13 +275,11 @@ func client_main(ctl_addrs []string, rpc_addrs []string, route_configs []string,
var i int var i int
var err error var err error
logmask = hodu.LOG_ALL
config = &hodu.ClientConfig{ config = &hodu.ClientConfig{
CtlAddrs: ctl_addrs, CtlAddrs: ctl_addrs,
} }
if cfg != nil { // load configuration from cfg
config.CtlTls, err = make_tls_server_config(&cfg.CTL.TLS) config.CtlTls, err = make_tls_server_config(&cfg.CTL.TLS)
if err != nil { return err } if err != nil { return err }
config.RpcTls, err = make_tls_client_config(&cfg.RPC.TLS) config.RpcTls, err = make_tls_client_config(&cfg.RPC.TLS)
@@ -313,10 +298,6 @@ func client_main(ctl_addrs []string, rpc_addrs []string, route_configs []string,
cc.ServerSeedTmout = cfg.RPC.Endpoint.SeedTmout cc.ServerSeedTmout = cfg.RPC.Endpoint.SeedTmout
cc.ServerAuthority = cfg.RPC.Endpoint.Authority cc.ServerAuthority = cfg.RPC.Endpoint.Authority
logmask = log_strings_to_mask(cfg.APP.LogMask)
if logfile == "" { logfile = cfg.APP.LogFile }
logfile_maxsize = cfg.APP.LogMaxSize
logfile_rotate = cfg.APP.LogRotate
pty_user = cfg.APP.PtyUser pty_user = cfg.APP.PtyUser
pty_shell = cfg.APP.PtyShell pty_shell = cfg.APP.PtyShell
xterm_html_file = cfg.APP.XtermHtmlFile xterm_html_file = cfg.APP.XtermHtmlFile
@@ -334,7 +315,7 @@ func client_main(ctl_addrs []string, rpc_addrs []string, route_configs []string,
} }
config.Token = string(bytes) config.Token = string(bytes)
} }
} // end of loading configuration from cfg
// unlke the server, we allow the client to start with no rpc address. // unlke the server, we allow the client to start with no rpc address.
// no check if len(rpc_addrs) <= 0 is mdde here. // no check if len(rpc_addrs) <= 0 is mdde here.
@@ -347,10 +328,10 @@ func client_main(ctl_addrs []string, rpc_addrs []string, route_configs []string,
cc.Routes[i] = *c cc.Routes[i] = *c
} }
if logfile == "" { if cfg.APP.LogFile == "" {
logger = NewAppLogger("client", os.Stderr, logmask) logger = NewAppLogger("client", os.Stderr, log_strings_to_mask(cfg.APP.LogMask))
} else { } else {
logger, err = NewAppLoggerToFile("client", logfile, logfile_maxsize, logfile_rotate, logmask) logger, err = NewAppLoggerToFile("client", cfg.APP.LogFile, cfg.APP.LogMaxSize, cfg.APP.LogRotate, log_strings_to_mask(cfg.APP.LogMask))
if err != nil { if err != nil {
return fmt.Errorf("failed to initialize logger - %s", err.Error()) return fmt.Errorf("failed to initialize logger - %s", err.Error())
} }
@@ -471,7 +452,11 @@ func main() {
} }
} }
err = server_main(ctl_addrs, rpc_addrs, rpx_addrs, pxy_addrs, wpx_addrs, logfile, &cfg) if logfile != "" {
cfg.APP.LogFile = logfile
}
err = server_main(ctl_addrs, rpc_addrs, rpx_addrs, pxy_addrs, wpx_addrs, &cfg)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "ERROR: server error - %s\n", err.Error()) fmt.Fprintf(os.Stderr, "ERROR: server error - %s\n", err.Error())
goto oops goto oops
@@ -483,6 +468,7 @@ func main() {
var cfgpat string var cfgpat string
var logfile string var logfile string
var client_token string var client_token string
var pty_shell string
var cfg ClientConfig var cfg ClientConfig
ctl_addrs = make([]string, 0) ctl_addrs = make([]string, 0)
@@ -513,6 +499,10 @@ func main() {
client_token = v client_token = v
return nil return nil
}) })
flgs.Func("pty-shell", "specify the program to execute for pty access", func(v string) error {
pty_shell = v
return nil
})
flgs.SetOutput(io.Discard) flgs.SetOutput(io.Discard)
err = flgs.Parse(os.Args[2:]) err = flgs.Parse(os.Args[2:])
if err != nil { if err != nil {
@@ -550,8 +540,14 @@ func main() {
cfg.APP.TokenText = client_token cfg.APP.TokenText = client_token
cfg.APP.TokenFile = "" cfg.APP.TokenFile = ""
} }
if pty_shell != "" {
cfg.APP.PtyShell = pty_shell
}
if logfile != "" {
cfg.APP.LogFile = logfile
}
err = client_main(ctl_addrs, rpc_addrs, flgs.Args(), logfile, &cfg) err = client_main(ctl_addrs, rpc_addrs, flgs.Args(), &cfg)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "ERROR: client error - %s\n", err.Error()) fmt.Fprintf(os.Stderr, "ERROR: client error - %s\n", err.Error())
goto oops goto oops