diff options
Diffstat (limited to 'osp/go/cmd/osp.go')
-rw-r--r-- | osp/go/cmd/osp.go | 46 |
1 files changed, 31 insertions, 15 deletions
diff --git a/osp/go/cmd/osp.go b/osp/go/cmd/osp.go index ad8d7f0d..f9c27bb9 100644 --- a/osp/go/cmd/osp.go +++ b/osp/go/cmd/osp.go @@ -4,7 +4,8 @@ package main -// TODO(pthatcher): Add response messages from receiver +// TODO(jophba): +// Add response messages from receiver // Inject JS into viewURL to using .Eval and .Bind to send and receiver presentation connection messages @@ -15,8 +16,9 @@ import ( "fmt" "log" - "osp" + "osp" + mdns "github.com/grandcat/zeroconf" "github.com/zserge/webview" ) @@ -30,7 +32,7 @@ func runServer(ctx context.Context, mdnsInstanceName string, port int) { func browseMdns(ctx context.Context) { entries, err := osp.BrowseMdns(ctx) - if (err != nil) { + if err != nil { log.Fatalf("Failed to browse mDNS: %v\n", err) } for entry := range entries { @@ -38,21 +40,35 @@ func browseMdns(ctx context.Context) { } } +func getMdnsHost(entry *mdns.ServiceEntry) string { + for _, ipv6 := range entry.AddrIPv6 { + log.Printf("Choosing IPv6 address [%s]\n", ipv6) + return fmt.Sprintf("[%s]", ipv6) + } + for _, ipv4 := range entry.AddrIPv4 { + log.Printf("Choosing IPv4 address %s\n", ipv4) + return fmt.Sprintf("%s", ipv4) + } + + // This shouldn't happen + log.Printf("No IP address found. Falling back to hostname %s\n", entry.HostName) + return entry.HostName +} + func flingUrl(ctx context.Context, target string, url string) { log.Printf("Search for %s\n", target) - entries, err := osp.BrowseMdns(ctx) - if (err != nil) { + entries, err := osp.LookupMdns(ctx, target) + if err != nil { log.Fatalf("Failed to browse mDNS: %v\n", err) } for entry := range entries { - if entry.Instance == target { - log.Printf("Fling %s to %s:%d\n", url, entry.HostName, entry.Port) - err := osp.StartPresentation(ctx, entry.HostName, entry.Port, url); - if err != nil { - log.Fatalln("Failed to start presentation."); - } - break + log.Printf("Fling %s to %s:%d\n", url, entry.HostName, entry.Port) + host := getMdnsHost(entry) + err := osp.StartPresentation(ctx, host, entry.Port, url) + if err != nil { + log.Fatalln("Failed to start presentation.") } + break } } @@ -91,10 +107,10 @@ func main() { log.Fatalln("Usage: osp server name") } mdnsInstanceName := args[1] - runServer(ctx, mdnsInstanceName, *port) + runServer(ctx, mdnsInstanceName, *port) case "browse": - browseMdns(ctx) + browseMdns(ctx) case "fling": if len(args) < 3 { @@ -103,7 +119,7 @@ func main() { target := args[1] url := args[2] - flingUrl(ctx, target, url) + flingUrl(ctx, target, url) case "view": if len(args) < 2 { |