removed UNUSED from the proto file

This commit is contained in:
2025-08-12 16:29:44 +09:00
parent 7fb4fbaae2
commit 6200bc5460
10 changed files with 139 additions and 35 deletions

View File

@ -28,6 +28,7 @@ SRCS=\
server-peer.go \ server-peer.go \
server-pty.go \ server-pty.go \
server-pxy.go \ server-pxy.go \
server-rpx.go \
system.go \ system.go \
transform.go \ transform.go \

View File

@ -58,7 +58,7 @@ func (pty *client_pty_ws) ServeWebsocket(ws *websocket.Conn) (int, error) {
conn_ready = <-conn_ready_chan conn_ready = <-conn_ready_chan
if conn_ready { // connected if conn_ready { // connected
var poll_fds []unix.PollFd; var poll_fds []unix.PollFd
var buf []byte var buf []byte
var n int var n int
var err error var err error
@ -83,7 +83,7 @@ func (pty *client_pty_ws) ServeWebsocket(ws *websocket.Conn) (int, error) {
if (poll_fds[0].Revents & (unix.POLLERR | unix.POLLHUP | unix.POLLNVAL)) != 0 { if (poll_fds[0].Revents & (unix.POLLERR | unix.POLLHUP | unix.POLLNVAL)) != 0 {
c.log.Write(pty.Id, LOG_DEBUG, "[%s] EOF detected on pty stdout", req.RemoteAddr) c.log.Write(pty.Id, LOG_DEBUG, "[%s] EOF detected on pty stdout", req.RemoteAddr)
break; break
} }
if (poll_fds[0].Revents & unix.POLLIN) != 0 { if (poll_fds[0].Revents & unix.POLLIN) != 0 {

View File

@ -661,7 +661,7 @@ func (r *ClientRoute) ReportPacket(pts_id PeerId, packet_type PACKET_KIND, event
r.cts.C.log.Write(r.cts.Sid, LOG_INFO, r.cts.C.log.Write(r.cts.Sid, LOG_INFO,
"Ingested route_started(%d,%s,%s) for route(%d,%s,%v,%s,%s)", "Ingested route_started(%d,%s,%s) for route(%d,%s,%v,%s,%s)",
rd.RouteId, rd.TargetAddrStr, rd.ServiceNetStr, rd.RouteId, rd.TargetAddrStr, rd.ServiceNetStr,
r.Id, r.PeerAddr, r.ServerPeerOption, r.ReqServerPeerSvcAddr, r.ReqServerPeerSvcNet); r.Id, r.PeerAddr, r.ServerPeerOption, r.ReqServerPeerSvcAddr, r.ReqServerPeerSvcNet)
} }
} }
@ -680,7 +680,7 @@ func (r *ClientRoute) ReportPacket(pts_id PeerId, packet_type PACKET_KIND, event
r.cts.C.log.Write(r.cts.Sid, LOG_INFO, r.cts.C.log.Write(r.cts.Sid, LOG_INFO,
"Ingested route_stopped(%d,%s,%s) for route(%d,%s,%v,%s,%s)", "Ingested route_stopped(%d,%s,%s) for route(%d,%s,%v,%s,%s)",
rd.RouteId, rd.TargetAddrStr, rd.ServiceNetStr, rd.RouteId, rd.TargetAddrStr, rd.ServiceNetStr,
r.Id, r.PeerAddr, r.ServerPeerOption, r.ReqServerPeerSvcAddr, r.ReqServerPeerSvcNet); r.Id, r.PeerAddr, r.ServerPeerOption, r.ReqServerPeerSvcAddr, r.ReqServerPeerSvcNet)
} }
r.ReqStop() r.ReqStop()
@ -1423,7 +1423,7 @@ func (cts *ClientConn) ReportPacket(route_id RouteId, pts_id PeerId, packet_type
func (cts *ClientConn) ReadRptyLoop(crp *ClientRpty, wg *sync.WaitGroup) { func (cts *ClientConn) ReadRptyLoop(crp *ClientRpty, wg *sync.WaitGroup) {
var poll_fds []unix.PollFd; var poll_fds []unix.PollFd
var buf []byte var buf []byte
var n int var n int
var err error var err error

View File

@ -69,6 +69,10 @@ type CTLServiceConfig struct {
Auth HttpAuthConfig `yaml:"auth"` Auth HttpAuthConfig `yaml:"auth"`
} }
type RPXServiceConfig struct {
Addrs []string `yaml:"addresses"`
}
type PXYServiceConfig struct { type PXYServiceConfig struct {
Addrs []string `yaml:"addresses"` Addrs []string `yaml:"addresses"`
} }
@ -122,6 +126,11 @@ type ServerConfig struct {
TLS ServerTLSConfig `yaml:"tls"` TLS ServerTLSConfig `yaml:"tls"`
} `yaml:"ctl"` } `yaml:"ctl"`
RPX struct {
Service RPXServiceConfig `yaml:"service"`
TLS ServerTLSConfig `yaml:"tls"`
} `yaml:"rpx"`
PXY struct { PXY struct {
Service PXYServiceConfig `yaml:"service"` Service PXYServiceConfig `yaml:"service"`
TLS ServerTLSConfig `yaml:"tls"` TLS ServerTLSConfig `yaml:"tls"`

View File

@ -90,7 +90,7 @@ func (sh *signal_handler) WriteLog(id string, level hodu.LogLevel, fmt string, a
// -------------------------------------------------------------------- // --------------------------------------------------------------------
func server_main(ctl_addrs []string, rpc_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, logfile 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
@ -108,6 +108,7 @@ func server_main(ctl_addrs []string, rpc_addrs []string, pxy_addrs []string, wpx
config = &hodu.ServerConfig{ config = &hodu.ServerConfig{
CtlAddrs: ctl_addrs, CtlAddrs: ctl_addrs,
RpcAddrs: rpc_addrs, RpcAddrs: rpc_addrs,
RpxAddrs: rpx_addrs,
PxyAddrs: pxy_addrs, PxyAddrs: pxy_addrs,
WpxAddrs: wpx_addrs, WpxAddrs: wpx_addrs,
} }
@ -117,6 +118,8 @@ func server_main(ctl_addrs []string, rpc_addrs []string, pxy_addrs []string, wpx
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)
if err != nil { return err } if err != nil { return err }
config.RpxTls, err = make_tls_server_config(&cfg.RPX.TLS)
if err != nil { return err }
config.PxyTls, err = make_tls_server_config(&cfg.PXY.TLS) config.PxyTls, err = make_tls_server_config(&cfg.PXY.TLS)
if err != nil { return err } if err != nil { return err }
config.WpxTls, err = make_tls_server_config(&cfg.WPX.TLS) config.WpxTls, err = make_tls_server_config(&cfg.WPX.TLS)
@ -124,6 +127,7 @@ func server_main(ctl_addrs []string, rpc_addrs []string, pxy_addrs []string, wpx
if len(config.CtlAddrs) <= 0 { config.CtlAddrs = cfg.CTL.Service.Addrs } if len(config.CtlAddrs) <= 0 { config.CtlAddrs = cfg.CTL.Service.Addrs }
if len(config.RpcAddrs) <= 0 { config.RpcAddrs = cfg.RPC.Service.Addrs } if len(config.RpcAddrs) <= 0 { config.RpcAddrs = cfg.RPC.Service.Addrs }
if len(config.RpxAddrs) <= 0 { config.RpxAddrs = cfg.RPX.Service.Addrs }
if len(config.PxyAddrs) <= 0 { config.PxyAddrs = cfg.PXY.Service.Addrs } if len(config.PxyAddrs) <= 0 { config.PxyAddrs = cfg.PXY.Service.Addrs }
if len(config.WpxAddrs) <= 0 { config.WpxAddrs = cfg.WPX.Service.Addrs } if len(config.WpxAddrs) <= 0 { config.WpxAddrs = cfg.WPX.Service.Addrs }
@ -178,6 +182,7 @@ func server_main(ctl_addrs []string, rpc_addrs []string, pxy_addrs []string, wpx
s.StartService(nil) s.StartService(nil)
s.StartCtlService() s.StartCtlService()
s.StartRpxService()
s.StartPxyService() s.StartPxyService()
s.StartWpxService() s.StartWpxService()
s.StartExtService(&signal_handler{svc:s}, nil) s.StartExtService(&signal_handler{svc:s}, nil)
@ -364,6 +369,7 @@ func main() {
if strings.EqualFold(os.Args[1], "server") { if strings.EqualFold(os.Args[1], "server") {
var rpc_addrs []string var rpc_addrs []string
var ctl_addrs []string var ctl_addrs []string
var rpx_addrs []string
var pxy_addrs []string var pxy_addrs []string
var wpx_addrs []string var wpx_addrs []string
var cfgfile string var cfgfile string
@ -373,6 +379,7 @@ func main() {
ctl_addrs = make([]string, 0) ctl_addrs = make([]string, 0)
rpc_addrs = make([]string, 0) rpc_addrs = make([]string, 0)
rpx_addrs = make([]string, 0)
pxy_addrs = make([]string, 0) pxy_addrs = make([]string, 0)
wpx_addrs = make([]string, 0) wpx_addrs = make([]string, 0)
@ -385,6 +392,10 @@ func main() {
rpc_addrs = append(rpc_addrs, v) rpc_addrs = append(rpc_addrs, v)
return nil return nil
}) })
flgs.Func("rpx-on", "specify a rpx listening address", func(v string) error {
rpx_addrs = append(rpx_addrs, v)
return nil
})
flgs.Func("pxy-on", "specify a proxy listening address", func(v string) error { flgs.Func("pxy-on", "specify a proxy listening address", func(v string) error {
pxy_addrs = append(pxy_addrs, v) pxy_addrs = append(pxy_addrs, v)
return nil return nil
@ -440,7 +451,7 @@ func main() {
} }
} }
err = server_main(ctl_addrs, rpc_addrs, pxy_addrs, wpx_addrs, logfile, &cfg) err = server_main(ctl_addrs, rpc_addrs, rpx_addrs, pxy_addrs, wpx_addrs, logfile, &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

View File

@ -28,10 +28,9 @@ const (
ROUTE_OPTION_TCP ROUTE_OPTION = 1 ROUTE_OPTION_TCP ROUTE_OPTION = 1
ROUTE_OPTION_TCP4 ROUTE_OPTION = 2 ROUTE_OPTION_TCP4 ROUTE_OPTION = 2
ROUTE_OPTION_TCP6 ROUTE_OPTION = 4 ROUTE_OPTION_TCP6 ROUTE_OPTION = 4
ROUTE_OPTION_UNUSED ROUTE_OPTION = 8 ROUTE_OPTION_HTTP ROUTE_OPTION = 8
ROUTE_OPTION_HTTP ROUTE_OPTION = 16 ROUTE_OPTION_HTTPS ROUTE_OPTION = 16
ROUTE_OPTION_HTTPS ROUTE_OPTION = 32 ROUTE_OPTION_SSH ROUTE_OPTION = 32
ROUTE_OPTION_SSH ROUTE_OPTION = 64
) )
// Enum value maps for ROUTE_OPTION. // Enum value maps for ROUTE_OPTION.
@ -41,20 +40,18 @@ var (
1: "TCP", 1: "TCP",
2: "TCP4", 2: "TCP4",
4: "TCP6", 4: "TCP6",
8: "UNUSED", 8: "HTTP",
16: "HTTP", 16: "HTTPS",
32: "HTTPS", 32: "SSH",
64: "SSH",
} }
ROUTE_OPTION_value = map[string]int32{ ROUTE_OPTION_value = map[string]int32{
"UNSPEC": 0, "UNSPEC": 0,
"TCP": 1, "TCP": 1,
"TCP4": 2, "TCP4": 2,
"TCP6": 4, "TCP6": 4,
"UNUSED": 8, "HTTP": 8,
"HTTP": 16, "HTTPS": 16,
"HTTPS": 32, "SSH": 32,
"SSH": 64,
} }
) )
@ -866,18 +863,16 @@ const file_hodu_proto_rawDesc = "" +
"\bConnNoti\x18\a \x01(\v2\v.ConnNoticeH\x00R\bConnNoti\x12&\n" + "\bConnNoti\x18\a \x01(\v2\v.ConnNoticeH\x00R\bConnNoti\x12&\n" +
"\aRptyEvt\x18\b \x01(\v2\n" + "\aRptyEvt\x18\b \x01(\v2\n" +
".RptyEventH\x00R\aRptyEvtB\x03\n" + ".RptyEventH\x00R\aRptyEvtB\x03\n" +
"\x01U*a\n" + "\x01U*U\n" +
"\fROUTE_OPTION\x12\n" + "\fROUTE_OPTION\x12\n" +
"\n" + "\n" +
"\x06UNSPEC\x10\x00\x12\a\n" + "\x06UNSPEC\x10\x00\x12\a\n" +
"\x03TCP\x10\x01\x12\b\n" + "\x03TCP\x10\x01\x12\b\n" +
"\x04TCP4\x10\x02\x12\b\n" + "\x04TCP4\x10\x02\x12\b\n" +
"\x04TCP6\x10\x04\x12\n" + "\x04TCP6\x10\x04\x12\b\n" +
"\n" + "\x04HTTP\x10\b\x12\t\n" +
"\x06UNUSED\x10\b\x12\b\n" + "\x05HTTPS\x10\x10\x12\a\n" +
"\x04HTTP\x10\x10\x12\t\n" + "\x03SSH\x10 *\xa2\x02\n" +
"\x05HTTPS\x10 \x12\a\n" +
"\x03SSH\x10@*\xa2\x02\n" +
"\vPACKET_KIND\x12\f\n" + "\vPACKET_KIND\x12\f\n" +
"\bRESERVED\x10\x00\x12\x0f\n" + "\bRESERVED\x10\x00\x12\x0f\n" +
"\vROUTE_START\x10\x01\x12\x0e\n" + "\vROUTE_START\x10\x01\x12\x0e\n" +

View File

@ -23,10 +23,9 @@ enum ROUTE_OPTION {
TCP = 1; TCP = 1;
TCP4 = 2; TCP4 = 2;
TCP6 = 4; TCP6 = 4;
UNUSED = 8; HTTP = 8;
HTTP = 16; HTTPS = 16;
HTTPS = 32; SSH = 32;
SSH = 64;
}; };
message RouteDesc { message RouteDesc {

6
pty.go
View File

@ -21,7 +21,7 @@ func connect_pty(pty_shell string, pty_user string) (*exec.Cmd, *os.File, error)
return nil, nil, fmt.Errorf("blank pty shell") return nil, nil, fmt.Errorf("blank pty shell")
} }
cmd = exec.Command(pty_shell); cmd = exec.Command(pty_shell)
if pty_user != "" { if pty_user != "" {
var uid int var uid int
var gid int var gid int
@ -55,8 +55,8 @@ func connect_pty(pty_shell string, pty_user string) (*exec.Cmd, *os.File, error)
return nil, nil, err return nil, nil, err
} }
//syscall.SetNonblock(int(tty.Fd()), true); //syscall.SetNonblock(int(tty.Fd()), true)
unix.SetNonblock(int(tty.Fd()), true); unix.SetNonblock(int(tty.Fd()), true)
return cmd, tty, nil return cmd, tty, nil
} }

View File

@ -66,7 +66,7 @@ func (pty *server_pty_ws) ServeWebsocket(ws *websocket.Conn) (int, error) {
conn_ready = <-conn_ready_chan conn_ready = <-conn_ready_chan
if conn_ready { // connected if conn_ready { // connected
var poll_fds []unix.PollFd; var poll_fds []unix.PollFd
var buf []byte var buf []byte
var n int var n int
var err error var err error

View File

@ -32,8 +32,9 @@ const CTS_LIMIT int = 16384
type PortId uint16 type PortId uint16
const PORT_ID_MARKER string = "_" const PORT_ID_MARKER string = "_"
const HS_ID_CTL string = "ctl" const HS_ID_CTL string = "ctl"
const HS_ID_RPX string = "pxy"
const HS_ID_PXY string = "rpx"
const HS_ID_WPX string = "wpx" const HS_ID_WPX string = "wpx"
const HS_ID_PXY string = "pxy"
type ServerConnMapByAddr map[net.Addr]*ServerConn type ServerConnMapByAddr map[net.Addr]*ServerConn
type ServerConnMapByClientToken map[string]*ServerConn type ServerConnMapByClientToken map[string]*ServerConn
@ -64,6 +65,9 @@ type ServerConfig struct {
CtlAuth *HttpAuthConfig CtlAuth *HttpAuthConfig
CtlCors bool CtlCors bool
RpxAddrs []string
RpxTls *tls.Config
PxyAddrs []string PxyAddrs []string
PxyTls *tls.Config PxyTls *tls.Config
@ -108,6 +112,11 @@ type Server struct {
ext_svcs []Service ext_svcs []Service
ext_closed bool ext_closed bool
rpx_mux *http.ServeMux
rpx []*http.Server // proxy server
rpx_addrs_mtx sync.Mutex
rpx_addrs *list.List // of net.Addr
pxy_mux *http.ServeMux pxy_mux *http.ServeMux
pxy []*http.Server // proxy server pxy []*http.Server // proxy server
pxy_addrs_mtx sync.Mutex pxy_addrs_mtx sync.Mutex
@ -1514,6 +1523,7 @@ func NewServer(ctx context.Context, name string, logger Logger, cfg *ServerConfi
s.bulletin = NewBulletin[*ServerEvent](&s, 1024) s.bulletin = NewBulletin[*ServerEvent](&s, 1024)
s.ctl_addrs = list.New() s.ctl_addrs = list.New()
s.rpx_addrs = list.New()
s.pxy_addrs = list.New() s.pxy_addrs = list.New()
s.wpx_addrs = list.New() s.wpx_addrs = list.New()
@ -1624,6 +1634,23 @@ func NewServer(ctx context.Context, name string, logger Logger, cfg *ServerConfi
// --------------------------------------------------------- // ---------------------------------------------------------
s.rpx_mux = http.NewServeMux() // TODO: make /_init,_ssh,_ssh/ws,_http configurable...
s.rpx_mux.Handle("/", s.WrapHttpHandler(&server_rpx{ S: &s, Id: HS_ID_RPX }))
s.rpx = make([]*http.Server, len(cfg.RpxAddrs))
for i = 0; i < len(cfg.RpxAddrs); i++ {
s.rpx[i] = &http.Server{
Addr: cfg.RpxAddrs[i],
Handler: s.rpx_mux,
TLSConfig: cfg.RpxTls,
ErrorLog: hs_log,
// TODO: more settings
}
}
// ---------------------------------------------------------
s.pxy_mux = http.NewServeMux() // TODO: make /_init,_ssh,_ssh/ws,_http configurable... s.pxy_mux = http.NewServeMux() // TODO: make /_init,_ssh,_ssh/ws,_http configurable...
s.pxy_mux.Handle("/_ssh/{conn_id}/", s.pxy_mux.Handle("/_ssh/{conn_id}/",
@ -1892,6 +1919,59 @@ func (s *Server) RunCtlTask(wg *sync.WaitGroup) {
l_wg.Wait() l_wg.Wait()
} }
func (s *Server) RunRpxTask(wg *sync.WaitGroup) {
var err error
var rpx *http.Server
var idx int
var l_wg sync.WaitGroup
defer wg.Done()
for idx, rpx = range s.rpx {
l_wg.Add(1)
go func(i int, cs *http.Server) {
var l net.Listener
s.log.Write("", LOG_INFO, "rpx channel[%d] started on %s", i, s.Cfg.RpxAddrs[i])
if s.stop_req.Load() == false {
l, err = net.Listen(TcpAddrStrClass(cs.Addr), cs.Addr)
if err == nil {
if s.stop_req.Load() == false {
var node *list.Element
s.rpx_addrs_mtx.Lock()
node = s.rpx_addrs.PushBack(l.Addr().(*net.TCPAddr))
s.rpx_addrs_mtx.Unlock()
if s.Cfg.RpxTls == nil { // TODO: change this
err = cs.Serve(l)
} else {
err = cs.ServeTLS(l, "", "") // s.Cfg.RpxTls must provide a certificate and a key
}
s.rpx_addrs_mtx.Lock()
s.rpx_addrs.Remove(node)
s.rpx_addrs_mtx.Unlock()
} else {
err = fmt.Errorf("stop requested")
}
l.Close()
}
} else {
err = fmt.Errorf("stop requested")
}
if errors.Is(err, http.ErrServerClosed) {
s.log.Write("", LOG_INFO, "rpx channel[%d] ended", i)
} else {
s.log.Write("", LOG_ERROR, "rpx channel[%d] error - %s", i, err.Error())
}
l_wg.Done()
}(idx, rpx)
}
l_wg.Wait()
}
func (s *Server) RunPxyTask(wg *sync.WaitGroup) { func (s *Server) RunPxyTask(wg *sync.WaitGroup) {
var err error var err error
var pxy *http.Server var pxy *http.Server
@ -2015,6 +2095,10 @@ func (s *Server) ReqStop() {
hs.Shutdown(s.Ctx) // to break s.ctl.Serve() hs.Shutdown(s.Ctx) // to break s.ctl.Serve()
} }
for _, hs = range s.rpx {
hs.Shutdown(s.Ctx) // to break s.rpx.Serve()
}
for _, hs = range s.pxy { for _, hs = range s.pxy {
hs.Shutdown(s.Ctx) // to break s.pxy.Serve() hs.Shutdown(s.Ctx) // to break s.pxy.Serve()
} }
@ -2384,6 +2468,11 @@ func (s *Server) StartCtlService() {
go s.RunCtlTask(&s.wg) go s.RunCtlTask(&s.wg)
} }
func (s *Server) StartRpxService() {
s.wg.Add(1)
go s.RunRpxTask(&s.wg)
}
func (s *Server) StartPxyService() { func (s *Server) StartPxyService() {
s.wg.Add(1) s.wg.Add(1)
go s.RunPxyTask(&s.wg) go s.RunPxyTask(&s.wg)