Add Android client support and unify cross-platform builds
This commit is contained in:
@@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"flag"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/gotunnel/internal/client/config"
|
||||
"github.com/gotunnel/internal/client/tunnel"
|
||||
@@ -10,7 +11,7 @@ import (
|
||||
"github.com/gotunnel/pkg/version"
|
||||
)
|
||||
|
||||
// 版本信息(通过 ldflags 注入)
|
||||
// Version information injected by ldflags.
|
||||
var Version string
|
||||
var BuildTime string
|
||||
var GitCommit string
|
||||
@@ -24,9 +25,13 @@ func main() {
|
||||
server := flag.String("s", "", "server address (ip:port)")
|
||||
token := flag.String("t", "", "auth token")
|
||||
configPath := flag.String("c", "", "config file path")
|
||||
dataDir := flag.String("data-dir", "", "client data directory")
|
||||
clientName := flag.String("name", "", "client display name")
|
||||
clientID := flag.String("id", "", "client id")
|
||||
reconnectMin := flag.Int("reconnect-min", 0, "minimum reconnect delay in seconds")
|
||||
reconnectMax := flag.Int("reconnect-max", 0, "maximum reconnect delay in seconds")
|
||||
flag.Parse()
|
||||
|
||||
// 优先加载配置文件
|
||||
var cfg *config.ClientConfig
|
||||
if *configPath != "" {
|
||||
var err error
|
||||
@@ -38,26 +43,53 @@ func main() {
|
||||
cfg = &config.ClientConfig{}
|
||||
}
|
||||
|
||||
// 命令行参数覆盖配置文件
|
||||
if *server != "" {
|
||||
cfg.Server = *server
|
||||
}
|
||||
if *token != "" {
|
||||
cfg.Token = *token
|
||||
}
|
||||
if *dataDir != "" {
|
||||
cfg.DataDir = *dataDir
|
||||
}
|
||||
if *clientName != "" {
|
||||
cfg.Name = *clientName
|
||||
}
|
||||
if *clientID != "" {
|
||||
cfg.ClientID = *clientID
|
||||
}
|
||||
if *reconnectMin > 0 {
|
||||
cfg.ReconnectMinSec = *reconnectMin
|
||||
}
|
||||
if *reconnectMax > 0 {
|
||||
cfg.ReconnectMaxSec = *reconnectMax
|
||||
}
|
||||
|
||||
if cfg.Server == "" || cfg.Token == "" {
|
||||
log.Fatal("Usage: client [-c config.yaml] | [-s <server:port> -t <token>]")
|
||||
}
|
||||
|
||||
client := tunnel.NewClient(cfg.Server, cfg.Token)
|
||||
opts := tunnel.ClientOptions{
|
||||
DataDir: cfg.DataDir,
|
||||
ClientID: cfg.ClientID,
|
||||
ClientName: cfg.Name,
|
||||
}
|
||||
if cfg.ReconnectMinSec > 0 {
|
||||
opts.ReconnectDelay = time.Duration(cfg.ReconnectMinSec) * time.Second
|
||||
}
|
||||
if cfg.ReconnectMaxSec > 0 {
|
||||
opts.ReconnectMaxDelay = time.Duration(cfg.ReconnectMaxSec) * time.Second
|
||||
}
|
||||
|
||||
client := tunnel.NewClientWithOptions(cfg.Server, cfg.Token, opts)
|
||||
|
||||
// TLS 默认启用,默认跳过证书验证(类似 frp)
|
||||
if !cfg.NoTLS {
|
||||
client.TLSEnabled = true
|
||||
client.TLSConfig = crypto.ClientTLSConfig()
|
||||
log.Printf("[Client] TLS enabled")
|
||||
}
|
||||
|
||||
client.Run()
|
||||
if err := client.Run(); err != nil {
|
||||
log.Fatalf("Client stopped: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user