12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package conf
- import (
- "fmt"
- "net"
- "strings"
- )
- // ProtoAddr ProtoAddr
- type ProtoAddr struct {
- Proto, Net, Addr string
- }
- func (p ProtoAddr) String() string {
- return p.Proto + "://" + p.Addr
- }
- // socketPath tests if a given address describes a domain socket,
- // and returns the relevant path part of the string if it is.
- func socketPath(addr string) string {
- if !strings.HasPrefix(addr, "unix://") {
- return ""
- }
- return strings.TrimPrefix(addr, "unix://")
- }
- // ClientListener is used to format a listener for a
- // port on a addr, whatever HTTP, HTTPS, DNS or RPC.
- func (c *Config) ClientListener(addr string, port int) (net.Addr, error) {
- if path := socketPath(addr); path != "" {
- return &net.UnixAddr{Name: path, Net: "unix"}, nil
- }
- ip := net.ParseIP(addr)
- if ip == nil {
- return nil, fmt.Errorf("Failed to parse IP: %v", addr)
- }
- return &net.TCPAddr{IP: ip, Port: port}, nil
- }
- // DNSAddrs returns the bind addresses for the DNS server.
- func (c *Config) DNSAddrs() ([]ProtoAddr, error) {
- if c.DNS == nil {
- return nil, nil
- }
- a, err := c.ClientListener(c.DNS.Addr, c.DNS.Port)
- if err != nil {
- return nil, err
- }
- addrs := []ProtoAddr{
- {"dns", "tcp", a.String()},
- {"dns", "udp", a.String()},
- }
- return addrs, nil
- }
- // HTTPAddrs returns the bind addresses for the HTTP server and
- // the application protocol which should be served, e.g. 'http'
- // or 'https'.
- func (c *Config) HTTPAddrs() ([]ProtoAddr, error) {
- var addrs []ProtoAddr
- if c.HTTP != nil {
- a, err := c.ClientListener(c.HTTP.Addr, c.HTTP.Port)
- if err != nil {
- return nil, err
- }
- addrs = append(addrs, ProtoAddr{"http", a.Network(), a.String()})
- }
- return addrs, nil
- }
|