mirror of https://github.com/XTLS/Xray-core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
749 B
38 lines
749 B
package domainsocket |
|
|
|
import ( |
|
"github.com/xtls/xray-core/common" |
|
"github.com/xtls/xray-core/common/net" |
|
"github.com/xtls/xray-core/transport/internet" |
|
) |
|
|
|
const ( |
|
protocolName = "domainsocket" |
|
sizeofSunPath = 108 |
|
) |
|
|
|
func (c *Config) GetUnixAddr() (*net.UnixAddr, error) { |
|
path := c.Path |
|
if path == "" { |
|
return nil, newError("empty domain socket path") |
|
} |
|
if c.Abstract && path[0] != '@' { |
|
path = "@" + path |
|
} |
|
if c.Abstract && c.Padding { |
|
raw := []byte(path) |
|
addr := make([]byte, sizeofSunPath) |
|
copy(addr, raw) |
|
path = string(addr) |
|
} |
|
return &net.UnixAddr{ |
|
Name: path, |
|
Net: "unix", |
|
}, nil |
|
} |
|
|
|
func init() { |
|
common.Must(internet.RegisterProtocolConfigCreator(protocolName, func() interface{} { |
|
return new(Config) |
|
})) |
|
}
|
|
|