diff --git a/common/xray/json/badoption/range.go b/common/xray/json/badoption/range.go index fa32215b..28ed0896 100644 --- a/common/xray/json/badoption/range.go +++ b/common/xray/json/badoption/range.go @@ -71,6 +71,13 @@ func (c *Range) UnmarshalJSON(content []byte) error { return nil } +func (c *Range) String() string { + if c.From == c.To { + return strconv.FormatInt(int64(c.From), 10) + } + return fmt.Sprintf("%d-%d", c.From, c.To) +} + func (c Range) Rand() int32 { return int32(crypto.RandBetween(int64(c.From), int64(c.To))) } diff --git a/option/wireguard.go b/option/wireguard.go index 83ca3871..9ab1450b 100644 --- a/option/wireguard.go +++ b/option/wireguard.go @@ -3,6 +3,7 @@ package option import ( "net/netip" + Xbadoption "github.com/sagernet/sing-box/common/xray/json/badoption" "github.com/sagernet/sing/common/json/badoption" ) @@ -84,24 +85,24 @@ type LegacyWireGuardPeer struct { } type WireGuardAmnezia struct { - JC int `json:"jc,omitempty"` - JMin int `json:"jmin,omitempty"` - JMax int `json:"jmax,omitempty"` - S1 int `json:"s1,omitempty"` - S2 int `json:"s2,omitempty"` - S3 int `json:"s3,omitempty"` - S4 int `json:"s4,omitempty"` - H1 uint32 `json:"h1,omitempty"` - H2 uint32 `json:"h2,omitempty"` - H3 uint32 `json:"h3,omitempty"` - H4 uint32 `json:"h4,omitempty"` - I1 string `json:"i1,omitempty"` - I2 string `json:"i2,omitempty"` - I3 string `json:"i3,omitempty"` - I4 string `json:"i4,omitempty"` - I5 string `json:"i5,omitempty"` - J1 string `json:"j1,omitempty"` - J2 string `json:"j2,omitempty"` - J3 string `json:"j3,omitempty"` - ITime int64 `json:"itime,omitempty"` + JC int `json:"jc,omitempty"` + JMin int `json:"jmin,omitempty"` + JMax int `json:"jmax,omitempty"` + S1 int `json:"s1,omitempty"` + S2 int `json:"s2,omitempty"` + S3 int `json:"s3,omitempty"` + S4 int `json:"s4,omitempty"` + H1 *Xbadoption.Range `json:"h1,omitempty"` + H2 *Xbadoption.Range `json:"h2,omitempty"` + H3 *Xbadoption.Range `json:"h3,omitempty"` + H4 *Xbadoption.Range `json:"h4,omitempty"` + I1 string `json:"i1,omitempty"` + I2 string `json:"i2,omitempty"` + I3 string `json:"i3,omitempty"` + I4 string `json:"i4,omitempty"` + I5 string `json:"i5,omitempty"` + J1 string `json:"j1,omitempty"` + J2 string `json:"j2,omitempty"` + J3 string `json:"j3,omitempty"` + ITime int64 `json:"itime,omitempty"` } diff --git a/transport/wireguard/endpoint.go b/transport/wireguard/endpoint.go index 3d320517..fe7daf7d 100644 --- a/transport/wireguard/endpoint.go +++ b/transport/wireguard/endpoint.go @@ -202,17 +202,17 @@ func (e *Endpoint) Start(resolve bool) error { if e.options.Amnezia.S4 > 0 { ipcConf += "\ns4=" + strconv.Itoa(e.options.Amnezia.S4) } - if e.options.Amnezia.H1 > 0 { - ipcConf += "\nh1=" + strconv.FormatUint(uint64(e.options.Amnezia.H1), 10) + if e.options.Amnezia.H1 != nil { + ipcConf += "\nh1=" + e.options.Amnezia.H1.String() } - if e.options.Amnezia.H2 > 0 { - ipcConf += "\nh2=" + strconv.FormatUint(uint64(e.options.Amnezia.H2), 10) + if e.options.Amnezia.H2 != nil { + ipcConf += "\nh2=" + e.options.Amnezia.H2.String() } - if e.options.Amnezia.H3 > 0 { - ipcConf += "\nh3=" + strconv.FormatUint(uint64(e.options.Amnezia.H3), 10) + if e.options.Amnezia.H3 != nil { + ipcConf += "\nh3=" + e.options.Amnezia.H3.String() } - if e.options.Amnezia.H4 > 0 { - ipcConf += "\nh4=" + strconv.FormatUint(uint64(e.options.Amnezia.H4), 10) + if e.options.Amnezia.H4 != nil { + ipcConf += "\nh4=" + e.options.Amnezia.H4.String() } if e.options.Amnezia.I1 != "" { ipcConf += "\ni1=" + e.options.Amnezia.I1 diff --git a/transport/wireguard/endpoint_options.go b/transport/wireguard/endpoint_options.go index a339b328..5cd6ec99 100644 --- a/transport/wireguard/endpoint_options.go +++ b/transport/wireguard/endpoint_options.go @@ -5,6 +5,7 @@ import ( "net/netip" "time" + Xbadoption "github.com/sagernet/sing-box/common/xray/json/badoption" tun "github.com/sagernet/sing-tun" "github.com/sagernet/sing/common/logger" M "github.com/sagernet/sing/common/metadata" @@ -49,10 +50,10 @@ type AmneziaOptions struct { S2 int S3 int S4 int - H1 uint32 - H2 uint32 - H3 uint32 - H4 uint32 + H1 *Xbadoption.Range + H2 *Xbadoption.Range + H3 *Xbadoption.Range + H4 *Xbadoption.Range I1 string I2 string I3 string