mirror of
https://github.com/tailscale/tailscale.git
synced 2025-01-10 10:03:43 +00:00
ipn: convert ServeConfig Range methods to iterators
These were the last two Range funcs in this repo. Updates #12912 Change-Id: I6ba0a911933cb5fc4e43697a9aac58a8035f9622 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
4b56bf9039
commit
2b8f02b407
@ -5882,12 +5882,11 @@ func (b *LocalBackend) setTCPPortsInterceptedFromNetmapAndPrefsLocked(prefs ipn.
|
|||||||
b.reloadServeConfigLocked(prefs)
|
b.reloadServeConfigLocked(prefs)
|
||||||
if b.serveConfig.Valid() {
|
if b.serveConfig.Valid() {
|
||||||
servePorts := make([]uint16, 0, 3)
|
servePorts := make([]uint16, 0, 3)
|
||||||
b.serveConfig.RangeOverTCPs(func(port uint16, _ ipn.TCPPortHandlerView) bool {
|
for port := range b.serveConfig.TCPs() {
|
||||||
if port > 0 {
|
if port > 0 {
|
||||||
servePorts = append(servePorts, uint16(port))
|
servePorts = append(servePorts, uint16(port))
|
||||||
}
|
}
|
||||||
return true
|
}
|
||||||
})
|
|
||||||
handlePorts = append(handlePorts, servePorts...)
|
handlePorts = append(handlePorts, servePorts...)
|
||||||
|
|
||||||
b.setServeProxyHandlersLocked()
|
b.setServeProxyHandlersLocked()
|
||||||
@ -5915,7 +5914,7 @@ func (b *LocalBackend) setServeProxyHandlersLocked() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
var backends map[string]bool
|
var backends map[string]bool
|
||||||
b.serveConfig.RangeOverWebs(func(_ ipn.HostPort, conf ipn.WebServerConfigView) (cont bool) {
|
for _, conf := range b.serveConfig.Webs() {
|
||||||
for _, h := range conf.Handlers().All() {
|
for _, h := range conf.Handlers().All() {
|
||||||
backend := h.Proxy()
|
backend := h.Proxy()
|
||||||
if backend == "" {
|
if backend == "" {
|
||||||
@ -5937,8 +5936,7 @@ func (b *LocalBackend) setServeProxyHandlersLocked() {
|
|||||||
}
|
}
|
||||||
b.serveProxyHandlers.Store(backend, p)
|
b.serveProxyHandlers.Store(backend, p)
|
||||||
}
|
}
|
||||||
return true
|
}
|
||||||
})
|
|
||||||
|
|
||||||
// Clean up handlers for proxy backends that are no longer present
|
// Clean up handlers for proxy backends that are no longer present
|
||||||
// in configuration.
|
// in configuration.
|
||||||
|
28
ipn/serve.go
28
ipn/serve.go
@ -6,6 +6,7 @@ package ipn
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"iter"
|
||||||
"net"
|
"net"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"net/url"
|
"net/url"
|
||||||
@ -564,40 +565,43 @@ func ExpandProxyTargetValue(target string, supportedSchemes []string, defaultSch
|
|||||||
return u.String(), nil
|
return u.String(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// RangeOverTCPs ranges over both background and foreground TCPs.
|
// TCPs returns an iterator over both background and foreground TCP
|
||||||
// If the returned bool from the given f is false, then this function stops
|
// listeners.
|
||||||
// iterating immediately and does not check other foreground configs.
|
//
|
||||||
func (v ServeConfigView) RangeOverTCPs(f func(port uint16, _ TCPPortHandlerView) bool) {
|
// The key is the port number.
|
||||||
|
func (v ServeConfigView) TCPs() iter.Seq2[uint16, TCPPortHandlerView] {
|
||||||
|
return func(yield func(uint16, TCPPortHandlerView) bool) {
|
||||||
for k, v := range v.TCP().All() {
|
for k, v := range v.TCP().All() {
|
||||||
if !f(k, v) {
|
if !yield(k, v) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, conf := range v.Foreground().All() {
|
for _, conf := range v.Foreground().All() {
|
||||||
for k, v := range conf.TCP().All() {
|
for k, v := range conf.TCP().All() {
|
||||||
if !f(k, v) {
|
if !yield(k, v) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// RangeOverWebs ranges over both background and foreground Webs.
|
// Webs returns an iterator over both background and foreground Web configurations.
|
||||||
// If the returned bool from the given f is false, then this function stops
|
func (v ServeConfigView) Webs() iter.Seq2[HostPort, WebServerConfigView] {
|
||||||
// iterating immediately and does not check other foreground configs.
|
return func(yield func(HostPort, WebServerConfigView) bool) {
|
||||||
func (v ServeConfigView) RangeOverWebs(f func(HostPort, WebServerConfigView) bool) {
|
|
||||||
for k, v := range v.Web().All() {
|
for k, v := range v.Web().All() {
|
||||||
if !f(k, v) {
|
if !yield(k, v) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, conf := range v.Foreground().All() {
|
for _, conf := range v.Foreground().All() {
|
||||||
for k, v := range conf.Web().All() {
|
for k, v := range conf.Web().All() {
|
||||||
if !f(k, v) {
|
if !yield(k, v) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindTCP returns the first TCP that matches with the given port. It
|
// FindTCP returns the first TCP that matches with the given port. It
|
||||||
|
Loading…
x
Reference in New Issue
Block a user