Files
T

80 lines
1.8 KiB
Go

package config
import (
"encoding/hex"
"strconv"
"strings"
)
// ClientArgs восстанавливает срез CLI-аргументов из Client структуры.
func ClientArgs(c *Client) []string {
if c == nil {
return nil
}
def := Defaults()
var args []string
add := func(flag string, value ...string) {
args = append(args, flag)
args = append(args, value...)
}
add("-peer", c.Proxy.Peer)
if len(c.VK.Links) > 0 {
add("-links", strings.Join(c.VK.Links, ","))
}
if c.Provider.Name != def.Provider.Name {
add("-provider", c.Provider.Name)
}
if c.Proxy.Listen != def.Proxy.Listen {
add("-listen", c.Proxy.Listen)
}
if c.TURN.Host != "" {
add("-turn", c.TURN.Host)
}
if c.TURN.Port != "" {
add("-port", c.TURN.Port)
}
if c.TURN.N != def.TURN.N {
add("-n", strconv.Itoa(c.TURN.N))
}
if c.VK.StreamsPerCred != def.VK.StreamsPerCred {
add("-streams-per-cred", strconv.Itoa(c.VK.StreamsPerCred))
}
if c.TURN.TransportUDP != def.TURN.TransportUDP {
add("-transport", TransportUDP)
}
if c.Proxy.Mode != def.Proxy.Mode {
add("-mode", string(c.Proxy.Mode))
}
args = append(args, kcpArgs(c.KCP.Profile, def.KCP.Profile)...)
if c.Obf.Enabled() {
add("-obf-profile", string(c.Obf.Profile))
add("-obf-key", hex.EncodeToString(c.Obf.Key))
}
if c.Obf.Timing > 0 {
add("-obf-timing", c.Obf.Timing.String())
}
if c.VK.ManualCaptcha {
args = append(args, "-manual-captcha")
}
if c.VK.Platform != def.VK.Platform {
add("-platform", string(c.VK.Platform))
}
if c.DNS.Mode != def.DNS.Mode {
add("-dns-mode", c.DNS.Mode)
}
if len(c.DNS.Servers) > 0 {
add("-dns-servers", strings.Join(c.DNS.Servers, ","))
}
if c.ClientID != "" {
add("-client-id", c.ClientID)
}
if c.SubURL != "" {
add("-sub", c.SubURL)
}
if c.Log.Debug {
args = append(args, "-debug")
}
return args
}