// Copyright 2021, Henrik Sölver henrik.solver@gmail.com // SPDX-License-Identifier: BSD-3-Clause package mdnsserver import ( "context" "fmt" log "github.com/sirupsen/logrus" "github.com/godbus/dbus/v5" "github.com/holoplot/go-avahi" ) func Run(ctx context.Context, location string, port uint16, name string) { conn, err := dbus.SystemBus() if err != nil { return } a, err := avahi.ServerNew(conn) if err != nil { log.Fatalf("Failed to connect to avahi: %v", err) } eg, err := a.EntryGroupNew() if err != nil { log.Fatalf("Failed to create entry group: %v", err) } fqdn, err := a.GetHostNameFqdn() if err != nil { log.Fatalf("failed to get hostname: %v", err) } var txt [][]byte notestring := fmt.Sprintf("note=%v", location) txt = append(txt, []byte(notestring)) txt = append(txt, []byte("product=ChroBroPrint V1")) txt = append(txt, []byte("Color=T")) txt = append(txt, []byte("rp=ipp/print")) txt = append(txt, []byte("ty=ChroBroPrint")) err = eg.AddService(avahi.InterfaceUnspec, avahi.ProtoUnspec, 0, name, "_ipp._tcp", "local", fqdn, port, txt) if err != nil { log.Fatalf("Failed to add service to avahi: %v", err) } err = eg.Commit() if err != nil { log.Fatalf("Failed to commit avahi changes: %v", err) } <-ctx.Done() eg.Reset() conn.Close() }