From 79eeb90079e417f0a9d040c1de8f3278c628810f Mon Sep 17 00:00:00 2001 From: xegineering Date: Thu, 31 Oct 2024 22:10:36 +0100 Subject: Change module name and restructure content The repository names for soundbox are named as below: - app: soundbox-app - Go library module: soundbox-go - Device: soundbox The Go module names were: - app: xengineering.eu/soundbox/app - Go library module: xengineering.eu/soundbox This does not make clear which module is related to which repository since the names are different. Thus it should be changed to: - app: xengineering.eu/soundbox-app - Go library module: xengineering.eu/soundbox-go The import statement for the library is then: import "xengineering.eu/soundbox-go/soundbox" This is a bit longer but it keeps the property that the library is referenced inside the code by the simple name `soundbox`. --- soundbox/interfaces.go | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 soundbox/interfaces.go (limited to 'soundbox/interfaces.go') diff --git a/soundbox/interfaces.go b/soundbox/interfaces.go new file mode 100644 index 0000000..2854b1a --- /dev/null +++ b/soundbox/interfaces.go @@ -0,0 +1,39 @@ +package soundbox + +import ( + "fmt" + "net" +) + +// getInterface is a function guessing which interface should be used for +// soundbox streaming. This is required since soundbox relies on communication +// via IPv6 link-local addresses which require a specified interface to allow +// communication. This function returns the first interface it finds which is +// up and has a link-local address assigned. +func getInterface() (net.Interface, error) { + all, err := net.Interfaces() + if err != nil { + return net.Interface{}, err + } + + for _, iface := range all { + if iface.Flags & net.FlagUp == 0 { + continue + } + addresses, err := iface.Addrs() + if err != nil { + return net.Interface{}, err + } + for _, addr := range addresses { + ip, _, err := net.ParseCIDR(addr.String()) + if err != nil { + return net.Interface{}, err + } + if ip.IsLinkLocalUnicast() { + return iface, nil + } + } + } + + return net.Interface{}, fmt.Errorf("No interface found for soundbox streaming") +} -- cgit v1.2.3-70-g09d2