5 import avahi, dbus, gobject, sys, getopt, string
12 def usage(retval = 0):
13 print "%s <name> <address>" % sys.argv[0]
16 if len(sys.argv) != 3:
28 if not (group is None):
33 global server, group, name, address
36 print "Adding address '%s' for '%s' ..." % (name, address)
37 group = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()), avahi.DBUS_INTERFACE_ENTRY_GROUP)
38 group.connect_to_signal('StateChanged', entry_group_state_changed)
39 group.AddAddress(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, name, address)
42 def entry_group_state_changed(state):
43 global name, server, n_rename, main_loop
45 if state == avahi.ENTRY_GROUP_ESTABLISHED:
46 print "Address established."
47 elif state == avahi.ENTRY_GROUP_COLLISION:
49 n_rename = n_rename + 1
51 print "ERROR: No suitable name found after %i retries, exiting." % n_rename
55 hn[0] = server.GetAlternativeHostName(hn[0])
56 name = string.join(hn, '.')
57 print "WARNING: Address/host name collision, changing name to '%s' ..." % name
61 main_loop = gobject.MainLoop()
63 bus = dbus.SystemBus()
64 server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)
70 except KeyboardInterrupt, k: