swift: add NWConnection-inspired Swift 6 compatible Tailscale.framework

updates tailscale/tailscale#13937

Builds a TailscaleKit.framework which wraps libtailscale.a in an actor,
providing IncomingConnection, Listener, and OutgoingConnection
types which are more usable in pure async Swift code.  The
method signatures are intended to be similar in form to NWConnection.

We also provide an extension to URLSession so you can make URL
requests via the user-space proxy.

Adds a static library mirroring much of the test control utilities in go, minus
the dependency on testing, so that we can export the signatures and
link it to tests that cannot run in go.

Added functionality to get both the local interface IPs as well as
the remote IP of  incoming connections accepted by a listener.

Fixed a bug in the log writer so we append a newline.

This also updates to the latest go toolchain and tailscale version.

Signed-off-by: Jonathan Nobels <jonathan@tailscale.com>
This commit is contained in:
Jonathan Nobels
2025-01-02 14:32:59 -05:00
committed by Jonathan Nobels
parent 9095651d2d
commit 2948fe1136
34 changed files with 3139 additions and 260 deletions
+19
View File
@@ -58,3 +58,22 @@ func TestConn(t *testing.T) {
t.Errorf("want no remaining tsnet_listener objects, got %d", remLns)
}
}
func TestExtractIP(t *testing.T) {
ipv4 := "1.23.33.4:12343"
ipv6 := "[1::2234::34fc::44]:56576"
got4 := extractIP(ipv4)
got6 := extractIP(ipv6)
want4 := "1.23.33.4"
want6 := "[1::2234::34fc::44]"
if got4 != want4 {
t.Errorf("ipv4 port stripping failed")
}
if got6 != want6 {
t.Errorf("ipv6 port stripping failed %s != %s", got6, want6)
}
}