mirror of https://github.com/XTLS/Xray-core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.3 KiB
100 lines
2.3 KiB
package conf |
|
|
|
import ( |
|
"github.com/xtls/xray-core/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 |
|
}
|
|
|