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