From ced0d86acf70f435ffdadb794db891be63a5b82a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 15 Nov 2005 00:39:45 +0000 Subject: move python tools from avahi-utils to avahi-python git-svn-id: file:///home/lennart/svn/public/avahi/trunk@969 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- avahi-python/avahi-publish-address.in | 96 +++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100755 avahi-python/avahi-publish-address.in (limited to 'avahi-python/avahi-publish-address.in') diff --git a/avahi-python/avahi-publish-address.in b/avahi-python/avahi-publish-address.in new file mode 100755 index 0000000..4ffebd7 --- /dev/null +++ b/avahi-python/avahi-publish-address.in @@ -0,0 +1,96 @@ +#!@PYTHON@ +# -*-python-*- +# $Id$ + +# This file is part of avahi. +# +# avahi is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# avahi is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +# License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with avahi; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA. + +import sys, getopt, string + +try: + import avahi, gobject, dbus +except ImportError: + print "Sorry, to use this tool you need to install Avahi, pygtk and python-dbus." + sys.exit(1) + +try: + import dbus.glib +except ImportError, e: + pass + +def usage(retval = 0): + print "%s
" % 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(avahi.DBUS_NAME, server.EntryGroupNew()), avahi.DBUS_INTERFACE_ENTRY_GROUP) + group.connect_to_signal('StateChanged', entry_group_state_changed) + group.AddAddress(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0), 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(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER) + +add_address() + +try: + main_loop.run() +except KeyboardInterrupt, k: + pass + +remove_address() -- cgit