mirror of
https://github.com/SagerNet/sing-box.git
synced 2025-08-14 22:37:37 +08:00
34 lines
809 B
Go
34 lines
809 B
Go
package srs
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"net/netip"
|
|
|
|
M "github.com/sagernet/sing/common/metadata"
|
|
"github.com/sagernet/sing/common/varbin"
|
|
)
|
|
|
|
func readPrefix(reader varbin.Reader) (netip.Prefix, error) {
|
|
addrSlice, err := varbin.ReadValue[[]byte](reader, binary.BigEndian)
|
|
if err != nil {
|
|
return netip.Prefix{}, err
|
|
}
|
|
prefixBits, err := varbin.ReadValue[uint8](reader, binary.BigEndian)
|
|
if err != nil {
|
|
return netip.Prefix{}, err
|
|
}
|
|
return netip.PrefixFrom(M.AddrFromIP(addrSlice), int(prefixBits)), nil
|
|
}
|
|
|
|
func writePrefix(writer varbin.Writer, prefix netip.Prefix) error {
|
|
err := varbin.Write(writer, binary.BigEndian, prefix.Addr().AsSlice())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = binary.Write(writer, binary.BigEndian, uint8(prefix.Bits()))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|