config

package
v0.39.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 14, 2022 License: Apache-2.0 Imports: 17 Imported by: 0

README

So far, there is no mature Go project that does well in parsing *.ini files.

By comparison, we have selected an open source project: https://github.com/go-ini/ini.

This library helped us solve most of the key-value matching, but there are still some problems, such as not supporting parsing map.

We add our own logic on the basis of this library. In the current situationwhich, we need to complete the entire Unmarshal in two steps:

  • Step#1, use go-ini to complete the basic parameter matching;
  • Step#2, parse our custom parameters to realize parsing special structure, like map, array.

Some of the keywords in tag(like inline, extends, etc.) may be different from standard libraries such as json and protobuf in Go. For details, please refer to the library documentation: https://ini.unknwon.io/docs/intro.

Documentation

Index

Constants

View Source
const (
	MB = 1024 * 1024
	KB = 1024
)

Variables

This section is empty.

Functions

func GetMapByPrefix

func GetMapByPrefix(set map[string]string, prefix string) map[string]string

func GetMapWithoutPrefix

func GetMapWithoutPrefix(set map[string]string, prefix string) map[string]string

func GetRenderedConfFromFile

func GetRenderedConfFromFile(path string) (out []byte, err error)

func LoadAllProxyConfsFromIni

func LoadAllProxyConfsFromIni(
	prefix string,
	source interface{},
	start []string,
) (map[string]ProxyConf, map[string]VisitorConf, error)

if len(startProxy) is 0, start all otherwise just start proxies in startProxy map

func RenderContent

func RenderContent(in []byte) (out []byte, err error)

Types

type BandwidthQuantity

type BandwidthQuantity struct {
	// contains filtered or unexported fields
}

func MustBandwidthQuantity

func MustBandwidthQuantity(s string) BandwidthQuantity

func NewBandwidthQuantity

func NewBandwidthQuantity(s string) (BandwidthQuantity, error)

func (*BandwidthQuantity) Bytes

func (q *BandwidthQuantity) Bytes() int64

func (*BandwidthQuantity) Equal

func (*BandwidthQuantity) MarshalJSON

func (q *BandwidthQuantity) MarshalJSON() ([]byte, error)

func (*BandwidthQuantity) String

func (q *BandwidthQuantity) String() string

func (*BandwidthQuantity) UnmarshalJSON

func (q *BandwidthQuantity) UnmarshalJSON(b []byte) error

func (*BandwidthQuantity) UnmarshalString

func (q *BandwidthQuantity) UnmarshalString(s string) error

type BaseProxyConf

type BaseProxyConf struct {
	// ProxyName is the name of this
	ProxyName string `ini:"name" json:"name"`
	// ProxyType specifies the type of this  Valid values include "tcp",
	// "udp", "http", "https", "stcp", and "xtcp". By default, this value is
	// "tcp".
	ProxyType string `ini:"type" json:"type"`

	// UseEncryption controls whether or not communication with the server will
	// be encrypted. Encryption is done using the tokens supplied in the server
	// and client configuration. By default, this value is false.
	UseEncryption bool `ini:"use_encryption" json:"use_encryption"`
	// UseCompression controls whether or not communication with the server
	// will be compressed. By default, this value is false.
	UseCompression bool `ini:"use_compression" json:"use_compression"`
	// Group specifies which group the is a part of. The server will use
	// this information to load balance proxies in the same group. If the value
	// is "", this will not be in a group. By default, this value is "".
	Group string `ini:"group" json:"group"`
	// GroupKey specifies a group key, which should be the same among proxies
	// of the same group. By default, this value is "".
	GroupKey string `ini:"group_key" json:"group_key"`

	// ProxyProtocolVersion specifies which protocol version to use. Valid
	// values include "v1", "v2", and "". If the value is "", a protocol
	// version will be automatically selected. By default, this value is "".
	ProxyProtocolVersion string `ini:"proxy_protocol_version" json:"proxy_protocol_version"`

	// BandwidthLimit limit the bandwidth
	// 0 means no limit
	BandwidthLimit BandwidthQuantity `ini:"bandwidth_limit" json:"bandwidth_limit"`

	// meta info for each proxy
	Metas map[string]string `ini:"-" json:"metas"`

	LocalSvrConf    `ini:",extends"`
	HealthCheckConf `ini:",extends"`
}

BaseProxyConf provides configuration info that is common to all types.

func (*BaseProxyConf) GetBaseInfo

func (cfg *BaseProxyConf) GetBaseInfo() *BaseProxyConf

type BaseVisitorConf

type BaseVisitorConf struct {
	ProxyName      string `ini:"name" json:"name"`
	ProxyType      string `ini:"type" json:"type"`
	UseEncryption  bool   `ini:"use_encryption" json:"use_encryption"`
	UseCompression bool   `ini:"use_compression" json:"use_compression"`
	Role           string `ini:"role" json:"role"`
	Sk             string `ini:"sk" json:"sk"`
	ServerName     string `ini:"server_name" json:"server_name"`
	BindAddr       string `ini:"bind_addr" json:"bind_addr"`
	BindPort       int    `ini:"bind_port" json:"bind_port"`
}

func (*BaseVisitorConf) GetBaseInfo

func (cfg *BaseVisitorConf) GetBaseInfo() *BaseVisitorConf

Base

type ClientCommonConf

type ClientCommonConf struct {
	auth.ClientConfig `ini:",extends"`

	// ServerAddr specifies the address of the server to connect to. By
	// default, this value is "0.0.0.0".
	ServerAddr string `ini:"server_addr" json:"server_addr"`
	// ServerPort specifies the port to connect to the server on. By default,
	// this value is 7000.
	ServerPort int `ini:"server_port" json:"server_port"`
	// ConnectServerLocalIP specifies the address of the client bind when it connect to server.
	// By default, this value is empty.
	// this value only use in TCP/Websocket protocol. Not support in KCP protocol.
	ConnectServerLocalIP string `ini:"connect_server_local_ip" json:"connect_server_local_ip"`
	// HTTPProxy specifies a proxy address to connect to the server through. If
	// this value is "", the server will be connected to directly. By default,
	// this value is read from the "http_proxy" environment variable.
	HTTPProxy string `ini:"http_proxy" json:"http_proxy"`
	// LogFile specifies a file where logs will be written to. This value will
	// only be used if LogWay is set appropriately. By default, this value is
	// "console".
	LogFile string `ini:"log_file" json:"log_file"`
	// LogWay specifies the way logging is managed. Valid values are "console"
	// or "file". If "console" is used, logs will be printed to stdout. If
	// "file" is used, logs will be printed to LogFile. By default, this value
	// is "console".
	LogWay string `ini:"log_way" json:"log_way"`
	// LogLevel specifies the minimum log level. Valid values are "trace",
	// "debug", "info", "warn", and "error". By default, this value is "info".
	LogLevel string `ini:"log_level" json:"log_level"`
	// LogMaxDays specifies the maximum number of days to store log information
	// before deletion. This is only used if LogWay == "file". By default, this
	// value is 0.
	LogMaxDays int64 `ini:"log_max_days" json:"log_max_days"`
	// DisableLogColor disables log colors when LogWay == "console" when set to
	// true. By default, this value is false.
	DisableLogColor bool `ini:"disable_log_color" json:"disable_log_color"`
	// AdminAddr specifies the address that the admin server binds to. By
	// default, this value is "127.0.0.1".
	AdminAddr string `ini:"admin_addr" json:"admin_addr"`
	// AdminPort specifies the port for the admin server to listen on. If this
	// value is 0, the admin server will not be started. By default, this value
	// is 0.
	AdminPort int `ini:"admin_port" json:"admin_port"`
	// AdminUser specifies the username that the admin server will use for
	// login.
	AdminUser string `ini:"admin_user" json:"admin_user"`
	// AdminPwd specifies the password that the admin server will use for
	// login.
	AdminPwd string `ini:"admin_pwd" json:"admin_pwd"`
	// AssetsDir specifies the local directory that the admin server will load
	// resources from. If this value is "", assets will be loaded from the
	// bundled executable using statik. By default, this value is "".
	AssetsDir string `ini:"assets_dir" json:"assets_dir"`
	// PoolCount specifies the number of connections the client will make to
	// the server in advance. By default, this value is 0.
	PoolCount int `ini:"pool_count" json:"pool_count"`
	// TCPMux toggles TCP stream multiplexing. This allows multiple requests
	// from a client to share a single TCP connection. If this value is true,
	// the server must have TCP multiplexing enabled as well. By default, this
	// value is true.
	TCPMux bool `ini:"tcp_mux" json:"tcp_mux"`
	// TCPMuxKeepaliveInterval specifies the keep alive interval for TCP stream multipler.
	// If TCPMux is true, heartbeat of application layer is unnecessary because it can only rely on heartbeat in TCPMux.
	TCPMuxKeepaliveInterval int64 `ini:"tcp_mux_keepalive_interval" json:"tcp_mux_keepalive_interval"`
	// User specifies a prefix for proxy names to distinguish them from other
	// clients. If this value is not "", proxy names will automatically be
	// changed to "{user}.{proxy_name}". By default, this value is "".
	User string `ini:"user" json:"user"`
	// DNSServer specifies a DNS server address for FRPC to use. If this value
	// is "", the default DNS will be used. By default, this value is "".
	DNSServer string `ini:"dns_server" json:"dns_server"`
	// LoginFailExit controls whether or not the client should exit after a
	// failed login attempt. If false, the client will retry until a login
	// attempt succeeds. By default, this value is true.
	LoginFailExit bool `ini:"login_fail_exit" json:"login_fail_exit"`
	// Start specifies a set of enabled proxies by name. If this set is empty,
	// all supplied proxies are enabled. By default, this value is an empty
	// set.
	Start []string `ini:"start" json:"start"`
	//Start map[string]struct{} `json:"start"`
	// Protocol specifies the protocol to use when interacting with the server.
	// Valid values are "tcp", "kcp" and "websocket". By default, this value
	// is "tcp".
	Protocol string `ini:"protocol" json:"protocol"`
	// TLSEnable specifies whether or not TLS should be used when communicating
	// with the server. If "tls_cert_file" and "tls_key_file" are valid,
	// client will load the supplied tls configuration.
	TLSEnable bool `ini:"tls_enable" json:"tls_enable"`
	// TLSCertPath specifies the path of the cert file that client will
	// load. It only works when "tls_enable" is true and "tls_key_file" is valid.
	TLSCertFile string `ini:"tls_cert_file" json:"tls_cert_file"`
	// TLSKeyPath specifies the path of the secret key file that client
	// will load. It only works when "tls_enable" is true and "tls_cert_file"
	// are valid.
	TLSKeyFile string `ini:"tls_key_file" json:"tls_key_file"`
	// TLSTrustedCaFile specifies the path of the trusted ca file that will load.
	// It only works when "tls_enable" is valid and tls configuration of server
	// has been specified.
	TLSTrustedCaFile string `ini:"tls_trusted_ca_file" json:"tls_trusted_ca_file"`
	// TLSServerName specifices the custom server name of tls certificate. By
	// default, server name if same to ServerAddr.
	TLSServerName string `ini:"tls_server_name" json:"tls_server_name"`
	// By default, frpc will connect frps with first custom byte if tls is enabled.
	// If DisableCustomTLSFirstByte is true, frpc will not send that custom byte.
	DisableCustomTLSFirstByte bool `ini:"disable_custom_tls_first_byte" json:"disable_custom_tls_first_byte"`
	// HeartBeatInterval specifies at what interval heartbeats are sent to the
	// server, in seconds. It is not recommended to change this value. By
	// default, this value is 30. Set negative value to disable it.
	HeartbeatInterval int64 `ini:"heartbeat_interval" json:"heartbeat_interval"`
	// HeartBeatTimeout specifies the maximum allowed heartbeat response delay
	// before the connection is terminated, in seconds. It is not recommended
	// to change this value. By default, this value is 90. Set negative value to disable it.
	HeartbeatTimeout int64 `ini:"heartbeat_timeout" json:"heartbeat_timeout"`
	// Client meta info
	Metas map[string]string `ini:"-" json:"metas"`
	// UDPPacketSize specifies the udp packet size
	// By default, this value is 1500
	UDPPacketSize int64 `ini:"udp_packet_size" json:"udp_packet_size"`
	// Include other config files for proxies.
	IncludeConfigFiles []string `ini:"includes" json:"includes"`
}

ClientCommonConf contains information for a client service. It is recommended to use GetDefaultClientConf instead of creating this object directly, so that all unspecified fields have reasonable default values.

func GetDefaultClientConf

func GetDefaultClientConf() ClientCommonConf

GetDefaultClientConf returns a client configuration with default values.

func ParseClientConfig

func ParseClientConfig(filePath string) (
	cfg ClientCommonConf,
	pxyCfgs map[string]ProxyConf,
	visitorCfgs map[string]VisitorConf,
	err error,
)

func UnmarshalClientConfFromIni

func UnmarshalClientConfFromIni(source interface{}) (ClientCommonConf, error)

Supported sources including: string(file path), []byte, Reader interface.

func (*ClientCommonConf) Complete

func (cfg *ClientCommonConf) Complete()

func (*ClientCommonConf) Validate

func (cfg *ClientCommonConf) Validate() error

type DomainConf

type DomainConf struct {
	CustomDomains []string `ini:"custom_domains" json:"custom_domains"`
	SubDomain     string   `ini:"subdomain" json:"subdomain"`
}

type HTTPProxyConf

type HTTPProxyConf struct {
	BaseProxyConf `ini:",extends"`
	DomainConf    `ini:",extends"`

	Locations         []string          `ini:"locations" json:"locations"`
	HTTPUser          string            `ini:"http_user" json:"http_user"`
	HTTPPwd           string            `ini:"http_pwd" json:"http_pwd"`
	HostHeaderRewrite string            `ini:"host_header_rewrite" json:"host_header_rewrite"`
	Headers           map[string]string `ini:"-" json:"headers"`
}

HTTP

func (*HTTPProxyConf) CheckForCli

func (cfg *HTTPProxyConf) CheckForCli() (err error)

func (*HTTPProxyConf) CheckForSvr

func (cfg *HTTPProxyConf) CheckForSvr(serverCfg ServerCommonConf) (err error)

func (*HTTPProxyConf) Compare

func (cfg *HTTPProxyConf) Compare(cmp ProxyConf) bool

HTTP

func (*HTTPProxyConf) MarshalToMsg

func (cfg *HTTPProxyConf) MarshalToMsg(pMsg *msg.NewProxy)

func (*HTTPProxyConf) UnmarshalFromIni

func (cfg *HTTPProxyConf) UnmarshalFromIni(prefix string, name string, section *ini.Section) error

func (*HTTPProxyConf) UnmarshalFromMsg

func (cfg *HTTPProxyConf) UnmarshalFromMsg(pMsg *msg.NewProxy)

type HTTPSProxyConf

type HTTPSProxyConf struct {
	BaseProxyConf `ini:",extends"`
	DomainConf    `ini:",extends"`
}

HTTPS

func (*HTTPSProxyConf) CheckForCli

func (cfg *HTTPSProxyConf) CheckForCli() (err error)

func (*HTTPSProxyConf) CheckForSvr

func (cfg *HTTPSProxyConf) CheckForSvr(serverCfg ServerCommonConf) (err error)

func (*HTTPSProxyConf) Compare

func (cfg *HTTPSProxyConf) Compare(cmp ProxyConf) bool

HTTPS

func (*HTTPSProxyConf) MarshalToMsg

func (cfg *HTTPSProxyConf) MarshalToMsg(pMsg *msg.NewProxy)

func (*HTTPSProxyConf) UnmarshalFromIni

func (cfg *HTTPSProxyConf) UnmarshalFromIni(prefix string, name string, section *ini.Section) error

func (*HTTPSProxyConf) UnmarshalFromMsg

func (cfg *HTTPSProxyConf) UnmarshalFromMsg(pMsg *msg.NewProxy)

type HealthCheckConf

type HealthCheckConf struct {
	// HealthCheckType specifies what protocol to use for health checking.
	// Valid values include "tcp", "http", and "". If this value is "", health
	// checking will not be performed. By default, this value is "".
	//
	// If the type is "tcp", a connection will be attempted to the target
	// server. If a connection cannot be established, the health check fails.
	//
	// If the type is "http", a GET request will be made to the endpoint
	// specified by HealthCheckURL. If the response is not a 200, the health
	// check fails.
	HealthCheckType string `ini:"health_check_type" json:"health_check_type"` // tcp | http
	// HealthCheckTimeoutS specifies the number of seconds to wait for a health
	// check attempt to connect. If the timeout is reached, this counts as a
	// health check failure. By default, this value is 3.
	HealthCheckTimeoutS int `ini:"health_check_timeout_s" json:"health_check_timeout_s"`
	// HealthCheckMaxFailed specifies the number of allowed failures before the
	// is stopped. By default, this value is 1.
	HealthCheckMaxFailed int `ini:"health_check_max_failed" json:"health_check_max_failed"`
	// HealthCheckIntervalS specifies the time in seconds between health
	// checks. By default, this value is 10.
	HealthCheckIntervalS int `ini:"health_check_interval_s" json:"health_check_interval_s"`
	// HealthCheckURL specifies the address to send health checks to if the
	// health check type is "http".
	HealthCheckURL string `ini:"health_check_url" json:"health_check_url"`
	// HealthCheckAddr specifies the address to connect to if the health check
	// type is "tcp".
	HealthCheckAddr string `ini:"-"`
}

HealthCheckConf configures health checking. This can be useful for load balancing purposes to detect and remove proxies to failing services.

type LocalSvrConf

type LocalSvrConf struct {
	// LocalIP specifies the IP address or host name to to.
	LocalIP string `ini:"local_ip" json:"local_ip"`
	// LocalPort specifies the port to to.
	LocalPort int `ini:"local_port" json:"local_port"`

	// Plugin specifies what plugin should be used for ng. If this value
	// is set, the LocalIp and LocalPort values will be ignored. By default,
	// this value is "".
	Plugin string `ini:"plugin" json:"plugin"`
	// PluginParams specify parameters to be passed to the plugin, if one is
	// being used. By default, this value is an empty map.
	PluginParams map[string]string `ini:"-"`
}

LocalSvrConf configures what location the client will to, or what plugin will be used.

type ProxyConf

type ProxyConf interface {
	GetBaseInfo() *BaseProxyConf
	UnmarshalFromMsg(*msg.NewProxy)
	UnmarshalFromIni(string, string, *ini.Section) error
	MarshalToMsg(*msg.NewProxy)
	CheckForCli() error
	CheckForSvr(ServerCommonConf) error
	Compare(ProxyConf) bool
}

func DefaultProxyConf

func DefaultProxyConf(proxyType string) ProxyConf

Proxy Conf Loader DefaultProxyConf creates a empty ProxyConf object by proxyType. If proxyType doesn't exist, return nil.

func NewConfByType

func NewConfByType(proxyType string) ProxyConf

func NewProxyConfFromIni

func NewProxyConfFromIni(prefix, name string, section *ini.Section) (ProxyConf, error)

Proxy loaded from ini

func NewProxyConfFromMsg

func NewProxyConfFromMsg(pMsg *msg.NewProxy, serverCfg ServerCommonConf) (ProxyConf, error)

Proxy loaded from msg

type STCPProxyConf

type STCPProxyConf struct {
	BaseProxyConf `ini:",extends"`

	Role string `ini:"role" json:"role"`
	Sk   string `ini:"sk" json:"sk"`
}

STCP

func (*STCPProxyConf) CheckForCli

func (cfg *STCPProxyConf) CheckForCli() (err error)

func (*STCPProxyConf) CheckForSvr

func (cfg *STCPProxyConf) CheckForSvr(serverCfg ServerCommonConf) error

func (*STCPProxyConf) Compare

func (cfg *STCPProxyConf) Compare(cmp ProxyConf) bool

STCP

func (*STCPProxyConf) MarshalToMsg

func (cfg *STCPProxyConf) MarshalToMsg(pMsg *msg.NewProxy)

func (*STCPProxyConf) UnmarshalFromIni

func (cfg *STCPProxyConf) UnmarshalFromIni(prefix string, name string, section *ini.Section) error

func (*STCPProxyConf) UnmarshalFromMsg

func (cfg *STCPProxyConf) UnmarshalFromMsg(pMsg *msg.NewProxy)

Only for role server.

type STCPVisitorConf

type STCPVisitorConf struct {
	BaseVisitorConf `ini:",extends"`
}

func (*STCPVisitorConf) Check

func (cfg *STCPVisitorConf) Check() (err error)

func (*STCPVisitorConf) Compare

func (cfg *STCPVisitorConf) Compare(cmp VisitorConf) bool

func (*STCPVisitorConf) UnmarshalFromIni

func (cfg *STCPVisitorConf) UnmarshalFromIni(prefix string, name string, section *ini.Section) (err error)

type SUDPProxyConf

type SUDPProxyConf struct {
	BaseProxyConf `ini:",extends"`

	Role string `ini:"role" json:"role"`
	Sk   string `ini:"sk" json:"sk"`
}

SUDP

func (*SUDPProxyConf) CheckForCli

func (cfg *SUDPProxyConf) CheckForCli() (err error)

func (*SUDPProxyConf) CheckForSvr

func (cfg *SUDPProxyConf) CheckForSvr(serverCfg ServerCommonConf) error

func (*SUDPProxyConf) Compare

func (cfg *SUDPProxyConf) Compare(cmp ProxyConf) bool

SUDP

func (*SUDPProxyConf) MarshalToMsg

func (cfg *SUDPProxyConf) MarshalToMsg(pMsg *msg.NewProxy)

func (*SUDPProxyConf) UnmarshalFromIni

func (cfg *SUDPProxyConf) UnmarshalFromIni(prefix string, name string, section *ini.Section) error

func (*SUDPProxyConf) UnmarshalFromMsg

func (cfg *SUDPProxyConf) UnmarshalFromMsg(pMsg *msg.NewProxy)

Only for role server.

type SUDPVisitorConf

type SUDPVisitorConf struct {
	BaseVisitorConf `ini:",extends"`
}

func (*SUDPVisitorConf) Check

func (cfg *SUDPVisitorConf) Check() (err error)

func (*SUDPVisitorConf) Compare

func (cfg *SUDPVisitorConf) Compare(cmp VisitorConf) bool

func (*SUDPVisitorConf) UnmarshalFromIni

func (cfg *SUDPVisitorConf) UnmarshalFromIni(prefix string, name string, section *ini.Section) (err error)

type ServerCommonConf

type ServerCommonConf struct {
	auth.ServerConfig `ini:",extends"`

	// BindAddr specifies the address that the server binds to. By default,
	// this value is "0.0.0.0".
	BindAddr string `ini:"bind_addr" json:"bind_addr"`
	// BindPort specifies the port that the server listens on. By default, this
	// value is 7000.
	BindPort int `ini:"bind_port" json:"bind_port" validate:"gte=0,lte=65535"`
	// BindUDPPort specifies the UDP port that the server listens on. If this
	// value is 0, the server will not listen for UDP connections. By default,
	// this value is 0
	BindUDPPort int `ini:"bind_udp_port" json:"bind_udp_port" validate:"gte=0,lte=65535"`
	// KCPBindPort specifies the KCP port that the server listens on. If this
	// value is 0, the server will not listen for KCP connections. By default,
	// this value is 0.
	KCPBindPort int `ini:"kcp_bind_port" json:"kcp_bind_port" validate:"gte=0,lte=65535"`
	// ProxyBindAddr specifies the address that the proxy binds to. This value
	// may be the same as BindAddr.
	ProxyBindAddr string `ini:"proxy_bind_addr" json:"proxy_bind_addr"`
	// VhostHTTPPort specifies the port that the server listens for HTTP Vhost
	// requests. If this value is 0, the server will not listen for HTTP
	// requests. By default, this value is 0.
	VhostHTTPPort int `ini:"vhost_http_port" json:"vhost_http_port" validate:"gte=0,lte=65535"`
	// VhostHTTPSPort specifies the port that the server listens for HTTPS
	// Vhost requests. If this value is 0, the server will not listen for HTTPS
	// requests. By default, this value is 0.
	VhostHTTPSPort int `ini:"vhost_https_port" json:"vhost_https_port" validate:"gte=0,lte=65535"`
	// TCPMuxHTTPConnectPort specifies the port that the server listens for TCP
	// HTTP CONNECT requests. If the value is 0, the server will not multiplex TCP
	// requests on one single port. If it's not - it will listen on this value for
	// HTTP CONNECT requests. By default, this value is 0.
	TCPMuxHTTPConnectPort int `ini:"tcpmux_httpconnect_port" json:"tcpmux_httpconnect_port" validate:"gte=0,lte=65535"`
	// VhostHTTPTimeout specifies the response header timeout for the Vhost
	// HTTP server, in seconds. By default, this value is 60.
	VhostHTTPTimeout int64 `ini:"vhost_http_timeout" json:"vhost_http_timeout"`
	// DashboardAddr specifies the address that the dashboard binds to. By
	// default, this value is "0.0.0.0".
	DashboardAddr string `ini:"dashboard_addr" json:"dashboard_addr"`
	// DashboardPort specifies the port that the dashboard listens on. If this
	// value is 0, the dashboard will not be started. By default, this value is
	// 0.
	DashboardPort int `ini:"dashboard_port" json:"dashboard_port" validate:"gte=0,lte=65535"`
	// DashboardUser specifies the username that the dashboard will use for
	// login.
	DashboardUser string `ini:"dashboard_user" json:"dashboard_user"`
	// DashboardPwd specifies the password that the dashboard will use for
	// login.
	DashboardPwd string `ini:"dashboard_pwd" json:"dashboard_pwd"`
	// EnablePrometheus will export prometheus metrics on {dashboard_addr}:{dashboard_port}
	// in /metrics api.
	EnablePrometheus bool `ini:"enable_prometheus" json:"enable_prometheus"`
	// AssetsDir specifies the local directory that the dashboard will load
	// resources from. If this value is "", assets will be loaded from the
	// bundled executable using statik. By default, this value is "".
	AssetsDir string `ini:"assets_dir" json:"assets_dir"`
	// LogFile specifies a file where logs will be written to. This value will
	// only be used if LogWay is set appropriately. By default, this value is
	// "console".
	LogFile string `ini:"log_file" json:"log_file"`
	// LogWay specifies the way logging is managed. Valid values are "console"
	// or "file". If "console" is used, logs will be printed to stdout. If
	// "file" is used, logs will be printed to LogFile. By default, this value
	// is "console".
	LogWay string `ini:"log_way" json:"log_way"`
	// LogLevel specifies the minimum log level. Valid values are "trace",
	// "debug", "info", "warn", and "error". By default, this value is "info".
	LogLevel string `ini:"log_level" json:"log_level"`
	// LogMaxDays specifies the maximum number of days to store log information
	// before deletion. This is only used if LogWay == "file". By default, this
	// value is 0.
	LogMaxDays int64 `ini:"log_max_days" json:"log_max_days"`
	// DisableLogColor disables log colors when LogWay == "console" when set to
	// true. By default, this value is false.
	DisableLogColor bool `ini:"disable_log_color" json:"disable_log_color"`
	// DetailedErrorsToClient defines whether to send the specific error (with
	// debug info) to frpc. By default, this value is true.
	DetailedErrorsToClient bool `ini:"detailed_errors_to_client" json:"detailed_errors_to_client"`

	// SubDomainHost specifies the domain that will be attached to sub-domains
	// requested by the client when using Vhost proxying. For example, if this
	// value is set to "frps.com" and the client requested the subdomain
	// "test", the resulting URL would be "test.frps.com". By default, this
	// value is "".
	SubDomainHost string `ini:"subdomain_host" json:"subdomain_host"`
	// TCPMux toggles TCP stream multiplexing. This allows multiple requests
	// from a client to share a single TCP connection. By default, this value
	// is true.
	TCPMux bool `ini:"tcp_mux" json:"tcp_mux"`
	// TCPMuxKeepaliveInterval specifies the keep alive interval for TCP stream multipler.
	// If TCPMux is true, heartbeat of application layer is unnecessary because it can only rely on heartbeat in TCPMux.
	TCPMuxKeepaliveInterval int64 `ini:"tcp_mux_keepalive_interval" json:"tcp_mux_keepalive_interval"`
	// Custom404Page specifies a path to a custom 404 page to display. If this
	// value is "", a default page will be displayed. By default, this value is
	// "".
	Custom404Page string `ini:"custom_404_page" json:"custom_404_page"`

	// AllowPorts specifies a set of ports that clients are able to proxy to.
	// If the length of this value is 0, all ports are allowed. By default,
	// this value is an empty set.
	AllowPorts map[int]struct{} `ini:"-" json:"-"`
	// MaxPoolCount specifies the maximum pool size for each proxy. By default,
	// this value is 5.
	MaxPoolCount int64 `ini:"max_pool_count" json:"max_pool_count"`
	// MaxPortsPerClient specifies the maximum number of ports a single client
	// may proxy to. If this value is 0, no limit will be applied. By default,
	// this value is 0.
	MaxPortsPerClient int64 `ini:"max_ports_per_client" json:"max_ports_per_client"`
	// TLSOnly specifies whether to only accept TLS-encrypted connections.
	// By default, the value is false.
	TLSOnly bool `ini:"tls_only" json:"tls_only"`
	// TLSCertFile specifies the path of the cert file that the server will
	// load. If "tls_cert_file", "tls_key_file" are valid, the server will use this
	// supplied tls configuration. Otherwise, the server will use the tls
	// configuration generated by itself.
	TLSCertFile string `ini:"tls_cert_file" json:"tls_cert_file"`
	// TLSKeyFile specifies the path of the secret key that the server will
	// load. If "tls_cert_file", "tls_key_file" are valid, the server will use this
	// supplied tls configuration. Otherwise, the server will use the tls
	// configuration generated by itself.
	TLSKeyFile string `ini:"tls_key_file" json:"tls_key_file"`
	// TLSTrustedCaFile specifies the paths of the client cert files that the
	// server will load. It only works when "tls_only" is true. If
	// "tls_trusted_ca_file" is valid, the server will verify each client's
	// certificate.
	TLSTrustedCaFile string `ini:"tls_trusted_ca_file" json:"tls_trusted_ca_file"`
	// HeartBeatTimeout specifies the maximum time to wait for a heartbeat
	// before terminating the connection. It is not recommended to change this
	// value. By default, this value is 90. Set negative value to disable it.
	HeartbeatTimeout int64 `ini:"heartbeat_timeout" json:"heartbeat_timeout"`
	// UserConnTimeout specifies the maximum time to wait for a work
	// connection. By default, this value is 10.
	UserConnTimeout int64 `ini:"user_conn_timeout" json:"user_conn_timeout"`
	// HTTPPlugins specify the server plugins support HTTP protocol.
	HTTPPlugins map[string]plugin.HTTPPluginOptions `ini:"-" json:"http_plugins"`
	// UDPPacketSize specifies the UDP packet size
	// By default, this value is 1500
	UDPPacketSize int64 `ini:"udp_packet_size" json:"udp_packet_size"`
}

ServerCommonConf contains information for a server service. It is recommended to use GetDefaultServerConf instead of creating this object directly, so that all unspecified fields have reasonable default values.

func GetDefaultServerConf

func GetDefaultServerConf() ServerCommonConf

GetDefaultServerConf returns a server configuration with reasonable defaults.

func UnmarshalServerConfFromIni

func UnmarshalServerConfFromIni(source interface{}) (ServerCommonConf, error)

func (*ServerCommonConf) Complete

func (cfg *ServerCommonConf) Complete()

func (*ServerCommonConf) Validate

func (cfg *ServerCommonConf) Validate() error

type TCPMuxProxyConf

type TCPMuxProxyConf struct {
	BaseProxyConf `ini:",extends"`
	DomainConf    `ini:",extends"`

	Multiplexer string `ini:"multiplexer"`
}

TCPMux

func (*TCPMuxProxyConf) CheckForCli

func (cfg *TCPMuxProxyConf) CheckForCli() (err error)

func (*TCPMuxProxyConf) CheckForSvr

func (cfg *TCPMuxProxyConf) CheckForSvr(serverCfg ServerCommonConf) (err error)

func (*TCPMuxProxyConf) Compare

func (cfg *TCPMuxProxyConf) Compare(cmp ProxyConf) bool

TCPMux

func (*TCPMuxProxyConf) MarshalToMsg

func (cfg *TCPMuxProxyConf) MarshalToMsg(pMsg *msg.NewProxy)

func (*TCPMuxProxyConf) UnmarshalFromIni

func (cfg *TCPMuxProxyConf) UnmarshalFromIni(prefix string, name string, section *ini.Section) error

func (*TCPMuxProxyConf) UnmarshalFromMsg

func (cfg *TCPMuxProxyConf) UnmarshalFromMsg(pMsg *msg.NewProxy)

type TCPProxyConf

type TCPProxyConf struct {
	BaseProxyConf `ini:",extends"`
	RemotePort    int `ini:"remote_port" json:"remote_port"`
}

TCP

func (*TCPProxyConf) CheckForCli

func (cfg *TCPProxyConf) CheckForCli() (err error)

func (*TCPProxyConf) CheckForSvr

func (cfg *TCPProxyConf) CheckForSvr(serverCfg ServerCommonConf) error

func (*TCPProxyConf) Compare

func (cfg *TCPProxyConf) Compare(cmp ProxyConf) bool

TCP

func (*TCPProxyConf) MarshalToMsg

func (cfg *TCPProxyConf) MarshalToMsg(pMsg *msg.NewProxy)

func (*TCPProxyConf) UnmarshalFromIni

func (cfg *TCPProxyConf) UnmarshalFromIni(prefix string, name string, section *ini.Section) error

func (*TCPProxyConf) UnmarshalFromMsg

func (cfg *TCPProxyConf) UnmarshalFromMsg(pMsg *msg.NewProxy)

type UDPProxyConf

type UDPProxyConf struct {
	BaseProxyConf `ini:",extends"`

	RemotePort int `ini:"remote_port" json:"remote_port"`
}

UDP

func (*UDPProxyConf) CheckForCli

func (cfg *UDPProxyConf) CheckForCli() (err error)

func (*UDPProxyConf) CheckForSvr

func (cfg *UDPProxyConf) CheckForSvr(serverCfg ServerCommonConf) error

func (*UDPProxyConf) Compare

func (cfg *UDPProxyConf) Compare(cmp ProxyConf) bool

UDP

func (*UDPProxyConf) MarshalToMsg

func (cfg *UDPProxyConf) MarshalToMsg(pMsg *msg.NewProxy)

func (*UDPProxyConf) UnmarshalFromIni

func (cfg *UDPProxyConf) UnmarshalFromIni(prefix string, name string, section *ini.Section) error

func (*UDPProxyConf) UnmarshalFromMsg

func (cfg *UDPProxyConf) UnmarshalFromMsg(pMsg *msg.NewProxy)

type Values

type Values struct {
	Envs map[string]string // environment vars
}

func GetValues

func GetValues() *Values

type VisitorConf

type VisitorConf interface {
	GetBaseInfo() *BaseVisitorConf
	Compare(cmp VisitorConf) bool
	UnmarshalFromIni(prefix string, name string, section *ini.Section) error
	Check() error
}

func DefaultVisitorConf

func DefaultVisitorConf(visitorType string) VisitorConf

DefaultVisitorConf creates a empty VisitorConf object by visitorType. If visitorType doesn't exist, return nil.

func NewVisitorConfFromIni

func NewVisitorConfFromIni(prefix string, name string, section *ini.Section) (VisitorConf, error)

Visitor loaded from ini

type XTCPProxyConf

type XTCPProxyConf struct {
	BaseProxyConf `ini:",extends"`

	Role string `ini:"role" json:"role"`
	Sk   string `ini:"sk" json:"sk"`
}

XTCP

func (*XTCPProxyConf) CheckForCli

func (cfg *XTCPProxyConf) CheckForCli() (err error)

func (*XTCPProxyConf) CheckForSvr

func (cfg *XTCPProxyConf) CheckForSvr(serverCfg ServerCommonConf) error

func (*XTCPProxyConf) Compare

func (cfg *XTCPProxyConf) Compare(cmp ProxyConf) bool

XTCP

func (*XTCPProxyConf) MarshalToMsg

func (cfg *XTCPProxyConf) MarshalToMsg(pMsg *msg.NewProxy)

func (*XTCPProxyConf) UnmarshalFromIni

func (cfg *XTCPProxyConf) UnmarshalFromIni(prefix string, name string, section *ini.Section) error

func (*XTCPProxyConf) UnmarshalFromMsg

func (cfg *XTCPProxyConf) UnmarshalFromMsg(pMsg *msg.NewProxy)

Only for role server.

type XTCPVisitorConf

type XTCPVisitorConf struct {
	BaseVisitorConf `ini:",extends"`
}

func (*XTCPVisitorConf) Check

func (cfg *XTCPVisitorConf) Check() (err error)

func (*XTCPVisitorConf) Compare

func (cfg *XTCPVisitorConf) Compare(cmp VisitorConf) bool

func (*XTCPVisitorConf) UnmarshalFromIni

func (cfg *XTCPVisitorConf) UnmarshalFromIni(prefix string, name string, section *ini.Section) (err error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL