config.go 806 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. //go:build !confonly
  2. // +build !confonly
  3. package domainsocket
  4. import (
  5. "github.com/v2fly/v2ray-core/v4/common"
  6. "github.com/v2fly/v2ray-core/v4/common/net"
  7. "github.com/v2fly/v2ray-core/v4/transport/internet"
  8. )
  9. const (
  10. protocolName = "domainsocket"
  11. sizeofSunPath = 108
  12. )
  13. func (c *Config) GetUnixAddr() (*net.UnixAddr, error) {
  14. path := c.Path
  15. if path == "" {
  16. return nil, newError("empty domain socket path")
  17. }
  18. if c.Abstract && path[0] != '@' {
  19. path = "@" + path
  20. }
  21. if c.Abstract && c.Padding {
  22. raw := []byte(path)
  23. addr := make([]byte, sizeofSunPath)
  24. copy(addr, raw)
  25. path = string(addr)
  26. }
  27. return &net.UnixAddr{
  28. Name: path,
  29. Net: "unix",
  30. }, nil
  31. }
  32. func init() {
  33. common.Must(internet.RegisterProtocolConfigCreator(protocolName, func() interface{} {
  34. return new(Config)
  35. }))
  36. }