import avahi import dbus __all__ = [ "ZeroconfService" ] class ZeroconfService: """A simple class to publish a network service with zeroconf using avahi. """ def __init__ ( self , name, port, stype= "_http._tcp" , domain= "" , host= "" , text= "" ) : self . name = name self . stype = stype self . domain = domain self . host = host self . port = port self . text = text def publish ( self ) : bus = dbus. SystemBus ( ) server = dbus. Interface ( bus. get_object ( avahi. DBUS_NAME , avahi. DBUS_PATH_SERVER ) , avahi. DBUS_INTERFACE_SERVER ) g = dbus. Interface ( bus. get_object ( avahi. DBUS_NAME , server. EntryGroupNew ( ) ) , avahi. DBUS_INTERFACE_ENTRY_GROUP ) g. AddService ( avahi. IF_UNSPEC , avahi. PROTO_UNSPEC ,dbus. UInt32 ( 0 ) , self . name , self . stype , self . domain , self . host , dbus. UInt16 ( self . port ) , self . text ) g. Commit ( ) self . group = g def unpublish ( self ) : self . group . Reset ( ) def test ( ) : service = ZeroconfService ( name= "TestService" , port= 3000 ) service. publish ( ) raw_input ( "Press any key to unpublish the service " ) service. unpublish ( ) if __name__ == "__main__" : test ( )