All pastes #80566 Raw Edit

daap

public python v1 · immutable
·published 2006-07-06 15:28 UTC
rendered paste body
#!@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.try:    import avahi, gobject, dbusexcept ImportError:    print "mdns publication requires avahi and dbus"try:    import dbus.glibexcept ImportError, e:    passdomain = ""host = ""    name = "Haagen Daap"stype = "_daap._tcp"port = 8080txt = "Haagen Daap"# python-dbus doesn't allow transmission of empty arrays, therefore we "fix" it with a bogus entryif len(txt) == 0:    txt.append("python-dbus=brain-damage")group = Nonen_rename = 0def remove_service():    global group    if not group is None:        group.Reset()def add_service():    global server, group, name, stype, domain, host, port, txt    if group is None:        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)            assert group.IsEmpty()    print "Adding service '%s' of type '%s' ..." % (name, stype)    group.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0), name, stype, domain, host, dbus.UInt16(port), avahi.string_array_to_txt_array(txt))    group.Commit()def entry_group_state_changed(state):    global name, server, n_rename#    print "state change: %i" % state        if state == avahi.ENTRY_GROUP_ESTABLISHED:        print "Service established."    elif state == avahi.ENTRY_GROUP_COLLISION:        n_rename = n_rename + 1        if n_rename >= 12:            print "ERROR: No suitable service name found after %i retries, exiting." % n_rename            #main_loop.quit()        else:            name = server.GetAlternativeServiceName(name)            print "WARNING: Service name collision, changing name to '%s' ..." % name            remove_service()            add_service()def server_state_changed(state):    if state == avahi.SERVER_COLLISION:        print "WARNING: Server name collision"        remove_service()    elif state == avahi.SERVER_RUNNING:        add_service()#main_loop = gobject.MainLoop()#from twisted.internet import glib2reactor#glib2reactor.install()bus = dbus.SystemBus()server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)server.connect_to_signal("StateChanged", server_state_changed)server_state_changed(server.GetState())#try:#    main_loop.run()#except KeyboardInterrupt, k:#    passfrom twisted.internet import glib2reactorglib2reactor.install()from twisted.internet import reactorreactor.run()if not group is None:    group.Free()