mirror of
https://github.com/XTLS/Xray-core.git
synced 2025-05-01 01:44:15 +00:00
v1.0.0
This commit is contained in:
parent
47d23e9972
commit
c7f7c08ead
711 changed files with 82154 additions and 2 deletions
100
infra/conf/policy.go
Normal file
100
infra/conf/policy.go
Normal file
|
@ -0,0 +1,100 @@
|
|||
package conf
|
||||
|
||||
import (
|
||||
"github.com/xtls/xray-core/v1/app/policy"
|
||||
)
|
||||
|
||||
type Policy struct {
|
||||
Handshake *uint32 `json:"handshake"`
|
||||
ConnectionIdle *uint32 `json:"connIdle"`
|
||||
UplinkOnly *uint32 `json:"uplinkOnly"`
|
||||
DownlinkOnly *uint32 `json:"downlinkOnly"`
|
||||
StatsUserUplink bool `json:"statsUserUplink"`
|
||||
StatsUserDownlink bool `json:"statsUserDownlink"`
|
||||
BufferSize *int32 `json:"bufferSize"`
|
||||
}
|
||||
|
||||
func (t *Policy) Build() (*policy.Policy, error) {
|
||||
config := new(policy.Policy_Timeout)
|
||||
if t.Handshake != nil {
|
||||
config.Handshake = &policy.Second{Value: *t.Handshake}
|
||||
}
|
||||
if t.ConnectionIdle != nil {
|
||||
config.ConnectionIdle = &policy.Second{Value: *t.ConnectionIdle}
|
||||
}
|
||||
if t.UplinkOnly != nil {
|
||||
config.UplinkOnly = &policy.Second{Value: *t.UplinkOnly}
|
||||
}
|
||||
if t.DownlinkOnly != nil {
|
||||
config.DownlinkOnly = &policy.Second{Value: *t.DownlinkOnly}
|
||||
}
|
||||
|
||||
p := &policy.Policy{
|
||||
Timeout: config,
|
||||
Stats: &policy.Policy_Stats{
|
||||
UserUplink: t.StatsUserUplink,
|
||||
UserDownlink: t.StatsUserDownlink,
|
||||
},
|
||||
}
|
||||
|
||||
if t.BufferSize != nil {
|
||||
bs := int32(-1)
|
||||
if *t.BufferSize >= 0 {
|
||||
bs = (*t.BufferSize) * 1024
|
||||
}
|
||||
p.Buffer = &policy.Policy_Buffer{
|
||||
Connection: bs,
|
||||
}
|
||||
}
|
||||
|
||||
return p, nil
|
||||
}
|
||||
|
||||
type SystemPolicy struct {
|
||||
StatsInboundUplink bool `json:"statsInboundUplink"`
|
||||
StatsInboundDownlink bool `json:"statsInboundDownlink"`
|
||||
StatsOutboundUplink bool `json:"statsOutboundUplink"`
|
||||
StatsOutboundDownlink bool `json:"statsOutboundDownlink"`
|
||||
}
|
||||
|
||||
func (p *SystemPolicy) Build() (*policy.SystemPolicy, error) {
|
||||
return &policy.SystemPolicy{
|
||||
Stats: &policy.SystemPolicy_Stats{
|
||||
InboundUplink: p.StatsInboundUplink,
|
||||
InboundDownlink: p.StatsInboundDownlink,
|
||||
OutboundUplink: p.StatsOutboundUplink,
|
||||
OutboundDownlink: p.StatsOutboundDownlink,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
type PolicyConfig struct {
|
||||
Levels map[uint32]*Policy `json:"levels"`
|
||||
System *SystemPolicy `json:"system"`
|
||||
}
|
||||
|
||||
func (c *PolicyConfig) Build() (*policy.Config, error) {
|
||||
levels := make(map[uint32]*policy.Policy)
|
||||
for l, p := range c.Levels {
|
||||
if p != nil {
|
||||
pp, err := p.Build()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
levels[l] = pp
|
||||
}
|
||||
}
|
||||
config := &policy.Config{
|
||||
Level: levels,
|
||||
}
|
||||
|
||||
if c.System != nil {
|
||||
sc, err := c.System.Build()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
config.System = sc
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue