This commit is contained in:
maycxc.github.io 2024-10-13 11:41:54 -04:00
parent 5f4614b643
commit 49b1d05db7
13 changed files with 25 additions and 25 deletions

View File

@ -351,7 +351,7 @@ func (admin AdminConfig) allowedOrigins(addr NetworkAddress) []*url.URL {
}
}
if !addr.IsUnixNetwork() && !addr.IsFdNetwork() {
uniqueOrigins[addr.JoinHostPort(0)] = struct{}{}
uniqueOrigins[addr.JoinAt(0)] = struct{}{}
}
}
allowed := make([]*url.URL, 0, len(uniqueOrigins))

View File

@ -332,7 +332,7 @@ func (st *ServerType) listenersForServerBlockAddress(sblock serverBlock, addr Ad
for _, lnAddr := range lnCfgVal.addresses {
lnNetw, lnHost, _, err := caddy.SplitNetworkAddress(lnAddr)
if err != nil {
return nil, fmt.Errorf("splitting listener address: %v %s", err, lnAddr)
return nil, fmt.Errorf("splitting listener address: %v", err)
}
networkAddr, err := caddy.ParseNetworkAddress(caddy.JoinNetworkAddress(lnNetw, lnHost, lnPort))
if err != nil {

View File

@ -647,7 +647,7 @@ func AdminAPIRequest(adminAddr, method, uri string, headers http.Header, body io
if err != nil || parsedAddr.PortRangeSize() > 1 {
return nil, fmt.Errorf("invalid admin address %s: %v", adminAddr, err)
}
origin := "http://" + parsedAddr.JoinHostPort(0)
origin := "http://" + parsedAddr.JoinAt(0)
if parsedAddr.IsUnixNetwork() {
origin = "http://127.0.0.1" // bogus host is a hack so that http.NewRequest() is happy
@ -704,7 +704,7 @@ func AdminAPIRequest(adminAddr, method, uri string, headers http.Header, body io
client := http.Client{
Transport: &http.Transport{
DialContext: func(_ context.Context, _, _ string) (net.Conn, error) {
return net.Dial(parsedAddr.Network, parsedAddr.JoinHostPort(0))
return net.Dial(parsedAddr.Network, parsedAddr.JoinAt(0))
},
},
}

View File

@ -139,7 +139,7 @@ func (na NetworkAddress) Listen(ctx context.Context, portOffset uint, config net
}
// check to see if plugin provides listener
if ln, err := getListenerFromPlugin(ctx, na.Network, na.JoinHostPort(portOffset), config); ln != nil || err != nil {
if ln, err := getListenerFromPlugin(ctx, na.Network, na.Host, na.port(), portOffset, config); ln != nil || err != nil {
return ln, err
}
@ -165,7 +165,7 @@ func (na NetworkAddress) listen(ctx context.Context, portOffset uint, config net
} else if na.IsFdNetwork() {
address = na.Host
} else {
address = na.JoinHostPort(portOffset)
address = na.JoinAt(portOffset)
}
if strings.HasPrefix(na.Network, "ip") {
@ -216,9 +216,9 @@ func (na NetworkAddress) IsFdNetwork() bool {
return IsFdNetwork(na.Network)
}
// JoinHostPort is like net.JoinHostPort, but where the port
// JoinAt is like net.JoinHostPort, but where the port
// is StartPort + offset.
func (na NetworkAddress) JoinHostPort(offset uint) string {
func (na NetworkAddress) JoinAt(offset uint) string {
if na.IsUnixNetwork() || na.IsFdNetwork() {
return na.Host
}
@ -431,7 +431,7 @@ func JoinNetworkAddress(network, host, port string) string {
//
// NOTE: This API is EXPERIMENTAL and may be changed or removed.
func (na NetworkAddress) ListenQUIC(ctx context.Context, portOffset uint, config net.ListenConfig, tlsConf *tls.Config) (http3.QUICEarlyListener, error) {
lnKey := listenerKey("quic"+na.Network, na.JoinHostPort(portOffset))
lnKey := listenerKey("quic"+na.Network, na.JoinAt(portOffset))
sharedEarlyListener, _, err := listenerPool.LoadOrNew(lnKey, func() (Destructor, error) {
lnAny, err := na.Listen(ctx, portOffset, config)
@ -658,11 +658,11 @@ var unixSocketsMu sync.Mutex
// getListenerFromPlugin returns a listener on the given network and address
// if a plugin has registered the network name. It may return (nil, nil) if
// no plugin can provide a listener.
func getListenerFromPlugin(ctx context.Context, network, addr string, config net.ListenConfig) (any, error) {
func getListenerFromPlugin(ctx context.Context, network, host, port string, portOffset uint, config net.ListenConfig) (any, error) {
// get listener from plugin if network type is registered
if getListener, ok := networkTypes[network]; ok {
Log().Debug("getting listener from plugin", zap.String("network", network))
return getListener(ctx, network, addr, config)
return getListener(ctx, network, host, port, portOffset, config)
}
return nil, nil
@ -676,7 +676,7 @@ func listenerKey(network, addr string) string {
// The listeners must be capable of overlapping: with Caddy, new configs are loaded
// before old ones are unloaded, so listeners may overlap briefly if the configs
// both need the same listener. EXPERIMENTAL and subject to change.
type ListenerFunc func(ctx context.Context, network, addr string, cfg net.ListenConfig) (any, error)
type ListenerFunc func(ctx context.Context, network, host, port string, portOffset uint, cfg net.ListenConfig) (any, error)
var networkTypes = map[string]ListenerFunc{}

View File

@ -471,7 +471,7 @@ func TestJoinHostPort(t *testing.T) {
expect: "/run/php/php7.3-fpm.sock",
},
} {
actual := tc.pa.JoinHostPort(tc.offset)
actual := tc.pa.JoinAt(tc.offset)
if actual != tc.expect {
t.Errorf("Test %d: Expected '%s' but got '%s'", i, tc.expect, actual)
}

View File

@ -508,7 +508,7 @@ func (app *App) Start() error {
_, h3ok := protocolsUnique["h3"]
for portOffset := uint(0); portOffset < listenAddr.PortRangeSize(); portOffset++ {
hostport := listenAddr.JoinHostPort(portOffset)
hostport := listenAddr.JoinAt(portOffset)
// enable TLS if there is a policy and if this is not the HTTP port
useTLS := len(srv.TLSConnPolicies) > 0 && int(listenAddr.StartPort+portOffset) != app.httpPort()
@ -628,7 +628,7 @@ func (app *App) Stop() error {
for _, server := range app.Servers {
for _, na := range server.addresses {
for _, addr := range na.Expand() {
if caddy.ListenerUsage(addr.Network, addr.JoinHostPort(0)) < 2 {
if caddy.ListenerUsage(addr.Network, addr.JoinAt(0)) < 2 {
app.logger.Debug("listener closing and shutdown delay is configured", zap.String("address", addr.String()))
server.shutdownAtMu.Lock()
server.shutdownAt = scheduledTime

View File

@ -343,7 +343,7 @@ func (h *Handler) doActiveHealthCheckForAllHosts() {
}
return
}
hostAddr := addr.JoinHostPort(0)
hostAddr := addr.JoinAt(0)
dialAddr := hostAddr
if addr.IsUnixNetwork() || addr.IsFdNetwork() {
// this will be used as the Host portion of a http.Request URL, and

View File

@ -119,7 +119,7 @@ func (u *Upstream) fillDialInfo(r *http.Request) (DialInfo, error) {
return DialInfo{
Upstream: u,
Network: addr.Network,
Address: addr.JoinHostPort(0),
Address: addr.JoinAt(0),
Host: addr.Host,
Port: strconv.Itoa(int(addr.StartPort)),
}, nil

View File

@ -201,12 +201,12 @@ func (h *HTTPTransport) NewTransport(caddyCtx caddy.Context) (*http.Transport, e
}
switch netaddr.Network {
case "tcp", "tcp4", "tcp6":
dialer.LocalAddr, err = net.ResolveTCPAddr(netaddr.Network, netaddr.JoinHostPort(0))
dialer.LocalAddr, err = net.ResolveTCPAddr(netaddr.Network, netaddr.JoinAt(0))
if err != nil {
return nil, err
}
case "unix", "unixgram", "unixpacket":
dialer.LocalAddr, err = net.ResolveUnixAddr(netaddr.Network, netaddr.JoinHostPort(0))
dialer.LocalAddr, err = net.ResolveUnixAddr(netaddr.Network, netaddr.JoinAt(0))
if err != nil {
return nil, err
}
@ -230,7 +230,7 @@ func (h *HTTPTransport) NewTransport(caddyCtx caddy.Context) (*http.Transport, e
Dial: func(ctx context.Context, _, _ string) (net.Conn, error) {
//nolint:gosec
addr := h.Resolver.netAddrs[weakrand.Intn(len(h.Resolver.netAddrs))]
return d.DialContext(ctx, addr.Network, addr.JoinHostPort(0))
return d.DialContext(ctx, addr.Network, addr.JoinAt(0))
},
}
}

View File

@ -103,7 +103,7 @@ func (su *SRVUpstreams) Provision(ctx caddy.Context) error {
Dial: func(ctx context.Context, _, _ string) (net.Conn, error) {
//nolint:gosec
addr := su.Resolver.netAddrs[weakrand.Intn(len(su.Resolver.netAddrs))]
return d.DialContext(ctx, addr.Network, addr.JoinHostPort(0))
return d.DialContext(ctx, addr.Network, addr.JoinAt(0))
},
}
}
@ -323,7 +323,7 @@ func (au *AUpstreams) Provision(ctx caddy.Context) error {
Dial: func(ctx context.Context, _, _ string) (net.Conn, error) {
//nolint:gosec
addr := au.Resolver.netAddrs[weakrand.Intn(len(au.Resolver.netAddrs))]
return d.DialContext(ctx, addr.Network, addr.JoinHostPort(0))
return d.DialContext(ctx, addr.Network, addr.JoinAt(0))
},
}
}

View File

@ -390,7 +390,7 @@ func cmdRespond(fl caddycmd.Flags) (int, error) {
if !listenAddr.IsUnixNetwork() && !listenAddr.IsFdNetwork() {
listenAddrs := make([]string, 0, listenAddr.PortRangeSize())
for offset := uint(0); offset < listenAddr.PortRangeSize(); offset++ {
listenAddrs = append(listenAddrs, listenAddr.JoinHostPort(offset))
listenAddrs = append(listenAddrs, listenAddr.JoinAt(offset))
}
for i, addr := range listenAddrs {

View File

@ -308,7 +308,7 @@ func (ash Handler) makeClient() (acme.Client, error) {
Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
//nolint:gosec
addr := ash.resolvers[weakrand.Intn(len(ash.resolvers))]
return dialer.DialContext(ctx, addr.Network, addr.JoinHostPort(0))
return dialer.DialContext(ctx, addr.Network, addr.JoinAt(0))
},
}
} else {

View File

@ -212,7 +212,7 @@ func (reconn *redialerConn) Write(b []byte) (n int, err error) {
}
func (reconn *redialerConn) dial() (net.Conn, error) {
return net.DialTimeout(reconn.nw.addr.Network, reconn.nw.addr.JoinHostPort(0), reconn.timeout)
return net.DialTimeout(reconn.nw.addr.Network, reconn.nw.addr.JoinAt(0), reconn.timeout)
}
// Interface guards