Files
ippserver/packages/mdnsserver/server.go

55 lines
1.3 KiB
Go

// 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()
}