diff options
author | Lennart Poettering <lennart@poettering.net> | 2005-07-30 01:13:56 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2005-07-30 01:13:56 +0000 |
commit | 48cfb3c876636d79dace3ebc8e82c946bc0b7ebf (patch) | |
tree | 484d9e332faa80fc75cb8364a20de231d0d0fd8a /avahi-utils/avahi-publish-address | |
parent | 38b45921cd1d33119f1c06979a57bcfe982e22da (diff) |
* add new tool avahi-publish-address
* avahi-publish-service: fail after 12 collisions
* avahi-daemon: dump record data on SIGUSR1 to syslog
* avahi-core:
* improve dumping API
* shorten response history time to 500ms, infriniging the RFC but fixing ping-pong behaviour on RR registration
* remove gcc warning
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@195 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'avahi-utils/avahi-publish-address')
-rwxr-xr-x | avahi-utils/avahi-publish-address | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/avahi-utils/avahi-publish-address b/avahi-utils/avahi-publish-address new file mode 100755 index 0000000..dce00bd --- /dev/null +++ b/avahi-utils/avahi-publish-address @@ -0,0 +1,73 @@ +#!/usr/bin/python2.4 +# -*-python-*- +# $Id$ + +import avahi, dbus, gobject, sys, getopt, string + +try: + import dbus.glib +except ImportError, e: + pass + +def usage(retval = 0): + print "%s <name> <address>" % sys.argv[0] + sys.exit(retval) + +if len(sys.argv) != 3: + usage(2) + +name = sys.argv[1] +address = sys.argv[2] + +group = None +n_rename = 0 + +def remove_address(): + global group + + if not (group is None): + group.Free() + group = None + +def add_address(): + global server, group, name, address + assert group is None + + print "Adding address '%s' for '%s' ..." % (name, address) + group = dbus.Interface(bus.get_object("org.freedesktop.Avahi", server.EntryGroupNew()), 'org.freedesktop.Avahi.EntryGroup') + group.connect_to_signal('StateChanged', entry_group_state_changed) + group.AddAddress(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, name, address) + group.Commit() + +def entry_group_state_changed(state): + global name, server, n_rename, main_loop + + if state == avahi.ENTRY_GROUP_ESTABLISHED: + print "Address established." + elif state == avahi.ENTRY_GROUP_COLLISION: + + n_rename = n_rename + 1 + if n_rename >= 12: + print "ERROR: No suitable name found after %i retries, exiting." % n_rename + main_loop.quit() + else: + hn = name.split('.') + hn[0] = server.GetAlternativeHostName(hn[0]) + name = string.join(hn, '.') + print "WARNING: Address/host name collision, changing name to '%s' ..." % name + remove_address() + add_address() + +main_loop = gobject.MainLoop() + +bus = dbus.SystemBus() +server = dbus.Interface(bus.get_object("org.freedesktop.Avahi", '/org/freedesktop/Avahi/Server'), 'org.freedesktop.Avahi.Server') + +add_address() + +try: + main_loop.run() +except KeyboardInterrupt, k: + pass + +remove_address() |