aboutsummaryrefslogtreecommitdiff
path: root/osp/go/cmd/osp.go
diff options
context:
space:
mode:
Diffstat (limited to 'osp/go/cmd/osp.go')
-rw-r--r--osp/go/cmd/osp.go46
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 {