123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- 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
- }
|