Skip to content

Instantly share code, notes, and snippets.

@lemenkov
Last active January 30, 2022 01:18
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save lemenkov/7515376 to your computer and use it in GitHub Desktop.
Save lemenkov/7515376 to your computer and use it in GitHub Desktop.
How to register service with Avahi using golang and dbus
package main
import (
"github.com/guelfey/go.dbus"
"log"
"bufio"
"os"
)
func main() {
var dconn *dbus.Conn
var obj *dbus.Object
var path dbus.ObjectPath
var err error
dconn, err = dbus.SystemBus()
if err != nil {
log.Fatal("Fatal error ", err.Error())
}
obj = dconn.Object("org.freedesktop.Avahi", "/")
obj.Call("org.freedesktop.Avahi.Server.EntryGroupNew", 0).Store(&path)
obj = dconn.Object("org.freedesktop.Avahi", path)
var AAY [][]byte
for _, s := range []string{"email=lemenkov@gmail.com", "jid=lemenkov@gmail.com", "status=avail"} {
AAY = append(AAY, []byte(s))
}
// http://www.dns-sd.org/ServiceTypes.html
obj.Call("org.freedesktop.Avahi.EntryGroup.AddService", 0,
int32(-1), // avahi.IF_UNSPEC
int32(-1), // avahi.PROTO_UNSPEC
uint32(0), // flags
"epmd@Hostname", // sname
"_epmd._tcp", // stype
"local", // sdomain
"work.local", // shost
uint16(4369), // port
AAY) // text record
obj.Call("org.freedesktop.Avahi.EntryGroup.Commit", 0)
// Wait for getch and exit
bufio.NewReader(os.Stdin).ReadString('\n')
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment