コード例 #1
0
	def publish(self):
		text_ap = ["deviceid=" + self.info.deviceid, "features=" + hex(self.info.features), "model=" + self.info.model]
		text_at = ["tp=UDP", "sm=false", "sv=false", "ek=1", "et=0,1", "cn=0,1", "ch=2", "ss=16", "sr=44100", "pw=false", "vn=3", "txtvers=1"]
		bus = dbus.SystemBus()
		server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)

		self.group = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()), avahi.DBUS_INTERFACE_ENTRY_GROUP)
		self.group.AddService(
			avahi.IF_UNSPEC,
			avahi.PROTO_UNSPEC,
			dbus.UInt32(0),
			AIRPLAY_BANNER + platform.node(),
			"_airplay._tcp",
			"",
			"",
			dbus.UInt16(AIRPLAY_PORT),
			avahi.string_array_to_txt_array(text_ap)
		)
		self.group.AddService(
			avahi.IF_UNSPEC,
			avahi.PROTO_UNSPEC,
			dbus.UInt32(0),
			self.info.deviceid + "@" + AIRPLAY_BANNER + platform.node(),
			"_raop._tcp",
			"",
			"",
			dbus.UInt16(AIRTUNES_PORT),
			avahi.string_array_to_txt_array(text_at)
		)
		self.group.Commit()
コード例 #2
0
 def test_string_array_to_txt_array(self):
     self.assertEqual(
         avahi.string_array_to_txt_array(['abc', b'\x01', u'\u00e1']),
         [
             [dbus.Byte(97), dbus.Byte(98), dbus.Byte(99)],
             [dbus.Byte(0x01)],
             [dbus.Byte(0xc3), dbus.Byte(0xa1)]])
     self.assertIsInstance(
         avahi.string_array_to_txt_array(['abc'])[0][0],
         dbus.Byte)
コード例 #3
0
ファイル: zeroconf.py プロジェクト: schneider42/fkie-ros-pkg
 def _registerService(self):
     try:
         if self.__group is None:
             if (self.masterInfo.domain is None) or len(self.masterInfo.domain) == 0:
                 self.masterInfo.domain = "local"
             self.masterInfo.host = self.masterInfo.host + "." + self.masterInfo.domain
             self.__group = dbus.Interface(
                 self.__bus.get_object(avahi.DBUS_NAME, self.__server.EntryGroupNew()),
                 avahi.DBUS_INTERFACE_ENTRY_GROUP,
             )
             self.__group.connect_to_signal("StateChanged", self.__avahi_callback_group_state_changed)
         self.__group.AddService(
             avahi.IF_UNSPEC,
             avahi.PROTO_UNSPEC,
             dbus.UInt32(0),
             self.masterInfo.name,
             self.masterInfo.stype,
             self.masterInfo.domain,
             self.masterInfo.host,
             dbus.UInt16(str(self.masterInfo.port)),
             avahi.string_array_to_txt_array(self.masterInfo.txt),
         )
         self.__group.Commit()
     except dbus.DBusException, e:
         rospy.logfatal("".join(["registerService: ", str(e)]))
         self.on_group_collision()
    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,                #interface
            avahi.PROTO_UNSPEC,             #protocol
            dbus.UInt32(0),                 #flags
            self.name, self.type,           
            self.domain, self.host,
            dbus.UInt16(self.port),
            avahi.string_array_to_txt_array(self.text))

        g.Commit()
        self.group = g
        if(self.DEBUG):
            print("service : %s, published :)" % self.name)
        return 1
コード例 #5
0
ファイル: web.py プロジェクト: hummans/xandikos
def avahi_register(port: int, path: str):
    import avahi
    import dbus

    bus = dbus.SystemBus()
    server = dbus.Interface(
        bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER),
        avahi.DBUS_INTERFACE_SERVER,
    )
    group = dbus.Interface(
        bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()),
        avahi.DBUS_INTERFACE_ENTRY_GROUP,
    )

    for service in ["_carddav._tcp", "_caldav._tcp"]:
        try:
            group.AddService(
                avahi.IF_UNSPEC,
                avahi.PROTO_INET,
                0,
                MDNS_NAME,
                service,
                "",
                "",
                port,
                avahi.string_array_to_txt_array(["path=%s" % path]),
            )
        except dbus.DBusException as e:
            logging.error("Error registering %s: %s", service, e)

    group.Commit()
コード例 #6
0
ファイル: AvahiTools.py プロジェクト: F1ash/LightMight
	def add_service(self):
		if self.group is None :
			self.group = dbus.Interface(
					self.bus.get_object( avahi.DBUS_NAME, self.server.EntryGroupNew()),
					avahi.DBUS_INTERFACE_ENTRY_GROUP)
			self.group.connect_to_signal('StateChanged', self.entry_group_state_changed)

		print "Adding service '%s' of type '%s' ..." % (QtCore.QString(self.serviceName).toUtf8(), self.serviceType)

		try :
			str_ = ''
			for i in xrange(len(self.serviceTXT)) :
				str_ += self.serviceTXT[len(self.serviceTXT) - 1 - i]
			self.group.AddService(
				avahi.IF_UNSPEC,	#interface
				avahi.PROTO_UNSPEC, #protocol
				dbus.UInt32(0),				  #flags
				self.serviceName, self.serviceType,
				self.domain, self.host,
				dbus.UInt16(self.servicePort),
				avahi.string_array_to_txt_array(str_))
			self.group.Commit()
		except dbus.exceptions.DBusException, err :
			""" DBusError :  org.freedesktop.Avahi.CollisionError: Local name collision """
			#print 'DBusError : ', err
			self.serviceName += '_' + randomString(3)
			self.add_service()
コード例 #7
0
    def publish(self):
        bus = dbus.SystemBus()
        server = dbus.Interface(
            bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER),
            avahi.DBUS_INTERFACE_SERVER)
        group = dbus.Interface(
            bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()),
            avahi.DBUS_INTERFACE_ENTRY_GROUP)

        i = 0
        while True:
            try:
                group.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC,
                                 dbus.UInt32(0), self.name,
                                 self.stype, self.domain, self.host,
                                 dbus.UInt16(self.port),
                                 avahi.string_array_to_txt_array(self.text))
            # name collision so try to make it unique
            except dbus.DBusException:
                i += 1
                self.name = '%s _%s' % (name, str(i))
            else:
                break

        group.Commit()
        self.group = group
コード例 #8
0
ファイル: Publications.py プロジェクト: jredrejo/controlaula
 def publish(self):
     bus = dbus.SystemBus()
     try:
         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), avahi.string_array_to_txt_array(self.text ))
             
 
 
         g.Commit()
         self.group = g
                 
     except:
         logging.getLogger().error('Avahi is not working in this computer, relay on plan B to work')
                              
     self.online=True            
コード例 #9
0
ファイル: zeroconf.py プロジェクト: rossburton/barf
    def publish(self):
        print "publishing"
        if self.group is None:
            self.group = dbus.Interface(
                self.bus.get_object(avahi.DBUS_NAME,
                                    self.server.EntryGroupNew()),
                avahi.DBUS_INTERFACE_ENTRY_GROUP)
            self.group.connect_to_signal('StateChanged',
                                         self.entry_group_state_changed)
        assert self.group.IsEmpty()

        # TODO only if we're running, otherwise set a flag for server_state_changed()
        try:
            self.group.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC,
                                  dbus.UInt32(0), self.name,
                                  self.stype, self.domain, self.host,
                                  dbus.UInt16(self.port),
                                  avahi.string_array_to_txt_array(self.text))
            self.group.Commit()
        except dbus.exceptions.DBusException, e:
            print e
            # TODO: this exception is bad
            print "FAIL"
            self.name = self.server.GetAlternativeServiceName(self.name)
            self.publish()
コード例 #10
0
    def publish(self):
        print('Publishing')
        try:
            self.group
        except:
            pass
        else:
            return
        g = dbus.Interface(
            self.bus.get_object(avahi.DBUS_NAME, self.server.EntryGroupNew()),
            avahi.DBUS_INTERFACE_ENTRY_GROUP)

        index = 0
        name = self.name
        while True:
            try:
                g.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC,
                             dbus.UInt32(0), name, self.stype, self.domain,
                             self.host, dbus.UInt16(self.port),
                             avahi.string_array_to_txt_array(self.text))
            except Exception as e:
                print(e)
                index += 1
                name = '%s #%s' % (self.name, str(index))
            else:
                break
        g.Commit()
        self.group = g
        self.group.connect_to_signal("StateChanged",
                                     self.entryGroupStateHandler)
コード例 #11
0
    def _register_dev_controller_service(self):
        # get a new group object
        group_path = self.server.EntryGroupNew()
        # bus object
        group_obj = self.bus.get_object(avahi.DBUS_NAME, group_path)
        self.logger.debug('dev controller service object: %s', group_obj)
        # group entry proxy
        group = dbus.Interface(group_obj, avahi.DBUS_INTERFACE_ENTRY_GROUP)
        # watch group registration changes
        group.connect_to_signal('StateChanged', self._group_state_changed)

        description = []
        description.append("system=" + self.service.system_config.get_system())

        self.logger.warning('system description: %s', description)
        group.AddService(
            avahi.IF_UNSPEC,  # any interface
            avahi.PROTO_INET,  # IPv4
            dbus.UInt32(0),  # flags
            self.service_name,
            ZeroconfTask.SERVICE_TYPE,
            "",
            "",
            dbus.UInt16(ZeroconfTask.SERVICE_PORT),
            avahi.string_array_to_txt_array(description))
        group.Commit()
        # keep track of group proxy
        self.group = group
コード例 #12
0
    def _register_dev_controller_service(self):
        # get a new group object
        group_path = self.server.EntryGroupNew()
        # bus object
        group_obj = self.bus.get_object(avahi.DBUS_NAME, group_path)
        self.logger.debug("dev controller service object: %s", group_obj)
        # group entry proxy
        group = dbus.Interface(group_obj, avahi.DBUS_INTERFACE_ENTRY_GROUP)
        # watch group registration changes
        group.connect_to_signal("StateChanged", self._group_state_changed)

        description = []
        description.append("system=" + self.service.system_config.get_system())

        self.logger.warning("system description: %s", description)
        group.AddService(
            avahi.IF_UNSPEC,  # any interface
            avahi.PROTO_INET,  # IPv4
            dbus.UInt32(0),  # flags
            self.service_name,
            ZeroconfTask.SERVICE_TYPE,
            "",
            "",
            dbus.UInt16(ZeroconfTask.SERVICE_PORT),
            avahi.string_array_to_txt_array(description),
        )
        group.Commit()
        # keep track of group proxy
        self.group = group
コード例 #13
0
    def add_service(self):
        if self.group is None:
            group = dbus.Interface(
                    self.bus.get_object(
                        avahi.DBUS_NAME, self.server.EntryGroupNew()),
                    avahi.DBUS_INTERFACE_ENTRY_GROUP)
            group.connect_to_signal('StateChanged',
                self.entry_group_state_changed)

            self.group = group

        self.log.info("Adding service '%s' of type '%s'",
            self.service_name, self.service_type)


        group = self.group
        group.AddService(
                avahi.IF_UNSPEC,    #interface
                avahi.PROTO_UNSPEC, #protocol
                dbus.UInt32 (0),    #flags
                self.service_name, self.service_type,
                self.domain, self.host,
                dbus.UInt16 (self.service_port),
                avahi.string_array_to_txt_array (self.service_txt))
        group.Commit()
コード例 #14
0
 def get_text_record(self):
     node_info = {'vendor': self.__vendor_name,
                  'product': self.__product_name,
                  'version': self.__version_string}
     text = []
     for key, value in node_info.items():
         text.append(key + "=" + value)
     return avahi.string_array_to_txt_array(text)
コード例 #15
0
ファイル: avahi_publisher.py プロジェクト: svn2github/Xpra
 def __init__(self, name, port, stype=XPRA_MDNS_TYPE, domain="", host="", text=[], interface=avahi.IF_UNSPEC):
     log("AvahiPublisher%s", (name, port, stype, domain, host, text, interface))
     self.name = name
     self.stype = stype
     self.domain = domain
     self.host = host
     self.port = port
     self.text = avahi.string_array_to_txt_array(text)
     self.interface = interface
     self.group = None
コード例 #16
0
ファイル: avahi_publish.py プロジェクト: public/foolscap
def add_service(group, name, stype, domain, host, port, txt):
    group.AddService(
            avahi.IF_UNSPEC,
            avahi.PROTO_UNSPEC,
            dbus.UInt32(avahi.PUBLISH_UPDATE), # flags
            name, stype,
            domain,
            host,
            dbus.UInt16(port),
            avahi.string_array_to_txt_array(txt))
    group.Commit()
コード例 #17
0
ファイル: avahi_publisher.py プロジェクト: TianyouLi/Xpra
 def __init__(self, bus, name, port, stype=XPRA_MDNS_TYPE, domain="", host="", text=[], interface=avahi.IF_UNSPEC):
     log("AvahiPublisher%s", (bus, name, port, stype, domain, host, text, interface))
     self.bus = bus
     self.name = name
     self.stype = stype
     self.domain = domain
     self.host = host
     self.port = port
     self.text = avahi.string_array_to_txt_array(text)
     self.interface = interface
     self.server = None
     self.group = None
コード例 #18
0
ファイル: mdns.py プロジェクト: davesteele/comitup
def add_service(host):
    group.AddService(
        avahi.IF_UNSPEC,
        avahi.PROTO_UNSPEC,
        dbus.UInt32(0),
        "Comitup Service",
        "_http._tcp",
        "",
        host,
        dbus.UInt16(80),
        avahi.string_array_to_txt_array(""),
    )
コード例 #19
0
ファイル: mdns.py プロジェクト: zpriddy/comitup
def add_service(host, devindex, addr):
    name = host
    if '.local' in name:
        name = name[:-len('.local')]

    group.AddService(
        devindex, avahi.PROTO_INET, dbus.UInt32(0), name, "_workstation._tcp",
        "", host, dbus.UInt16(9),
        avahi.string_array_to_txt_array([
            "hostname=%s" % host,
            "ipaddr=%s" % addr,
            "comitup-home=https://davesteele.github.io/comitup/",
        ]))
コード例 #20
0
    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,
        )

        # insert fqdn in announcement
        fqdn = str(server.GetHostNameFqdn())
        text = avahi.string_array_to_txt_array(
            [t % {
                'fqdn': fqdn
            } for t in self.text])
        name = self.name % {'fqdn': fqdn}

        iface = avahi.IF_UNSPEC
        if self.loopback:
            iface = 0

        g.AddService(
            iface,
            avahi.PROTO_INET,
            dbus.UInt32(0),
            name,
            self.stype,
            self.domain,
            self.host,
            dbus.UInt16(self.port),
            text,
        )

        if self.subtype:
            g.AddServiceSubtype(
                iface,
                avahi.PROTO_INET,
                dbus.UInt32(0),
                name,
                self.stype,
                self.domain,
                self.subtype,
            )

        g.Commit()
        self.group = g
コード例 #21
0
ファイル: zeroconf.py プロジェクト: Lolu28/multimaster_fkie
 def updateService(self, txt_array = []):
   try:
     self._lock.acquire(True)
     if not (self.__group is None):
       self.__group.UpdateServiceTxt(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0), 
                                self.masterInfo.name, 
                                self.masterInfo.stype, 
                                self.masterInfo.domain, 
                                avahi.string_array_to_txt_array(txt_array),
                                reply_handler=self.__avahi_callback_zeroconf_service_updated,
                                error_handler=self.__avahi_callback_error)
     else:
       raise Exception("ServiceGroup %s not registered in avahi", self.masterInfo.name)
   finally:
     self._lock.release()
コード例 #22
0
 def updateService(self, txt_array=[]):
     try:
         self._lock.acquire(True)
         if not (self.__group is None):
             self.__group.UpdateServiceTxt(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0),
                                           self.masterInfo.name,
                                           self.masterInfo.stype,
                                           self.masterInfo.domain,
                                           avahi.string_array_to_txt_array(txt_array),
                                           reply_handler=self.__avahi_callback_zeroconf_service_updated,
                                           error_handler=self.__avahi_callback_error)
         else:
             raise Exception("ServiceGroup %s not registered in avahi", self.masterInfo.name)
     finally:
         self._lock.release()
コード例 #23
0
ファイル: service.py プロジェクト: Gordon01/smarthome
    def _add_service(self):
        if self.entry_group is None:
            self.entry_group = dbus.Interface(self.bus.get_object(avahi.DBUS_NAME, self.avahi_server.EntryGroupNew()),
                                              avahi.DBUS_INTERFACE_ENTRY_GROUP)

        self.entry_group.AddService(avahi.IF_UNSPEC,
                                    avahi.PROTO_UNSPEC,
                                    dbus.UInt32(0),
                                    "smarthome-%s" % self.name,
                                    "_http._tcp",
                                    "",
                                    "",
                                    dbus.UInt16(46408),
                                    avahi.string_array_to_txt_array(""))
        self.entry_group.Commit()
コード例 #24
0
ファイル: main.py プロジェクト: vaishnav98/pygbmodule
def setupAvahiServiceAdvertisement():
    iface = avahi.IF_UNSPEC
    bus = dbus.SystemBus()
    server = dbus.Interface(
        bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER),
        avahi.DBUS_INTERFACE_SERVER)
    avahi_dbus_interface = dbus.Interface(
        bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()),
        avahi.DBUS_INTERFACE_ENTRY_GROUP)
    avahi_dbus_interface.AddService(
        iface, avahi.PROTO_UNSPEC, dbus.UInt32(0), avahi_name,
        avahi_service_type, avahi_domain, avahi_host, dbus.UInt16(avahi_port),
        avahi.string_array_to_txt_array(avahi_text))
    avahi_dbus_interface.Commit()
    return avahi_dbus_interface
コード例 #25
0
    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),
                     avahi.string_array_to_txt_array(self.text))

        g.Commit()
        self.group = g
コード例 #26
0
ファイル: server.py プロジェクト: turbonetlink/stoq-server
    def _setup_avahi(self):
        bus = dbus.SystemBus()
        dbus_server = dbus.Interface(
            bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER),
            avahi.DBUS_INTERFACE_SERVER)

        self.group = dbus.Interface(
            bus.get_object(avahi.DBUS_NAME, dbus_server.EntryGroupNew()),
            avahi.DBUS_INTERFACE_ENTRY_GROUP)
        self.group.AddService(
            avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0), SERVER_NAME,
            AVAHI_STYPE, AVAHI_DOMAIN, AVAHI_HOST,
            dbus.UInt16(SERVER_AVAHI_PORT),
            avahi.string_array_to_txt_array(['foo=bar']))

        self.group.Commit()
コード例 #27
0
    def publish(self):
        self.group = dbus.Interface(
            self.systemBus.get_object(avahi.DBUS_NAME,
                                      self.server.EntryGroupNew()),
            avahi.DBUS_INTERFACE_ENTRY_GROUP)

        self.group.AddService(
            avahi.IF_UNSPEC,  # interface
            avahi.PROTO_UNSPEC,  # protocol
            dbus.UInt32(0),  # flags
            self.name,
            self.stype,
            self.domain,
            self.host,
            dbus.UInt16(self.port),
            avahi.string_array_to_txt_array([]))
        self.group.Commit()
コード例 #28
0
    def _add_service(self):
        '''Add a service via dbus'''
        if self.bus and self.group is None:
            self.group = dbus.Interface(
                  self.bus.get_object(avahi.DBUS_NAME, self.server.EntryGroupNew()),
                  avahi.DBUS_INTERFACE_ENTRY_GROUP)

            self.group.AddService(
                avahi.IF_UNSPEC,    #interface
                avahi.PROTO_UNSPEC, #protocol
                dbus.UInt32(0),                  #flags
                self.serviceName, self.serviceType,
                self.domain, self.host,
                dbus.UInt16(self.servicePort),
                avahi.string_array_to_txt_array(self.serviceTXT))

            self.group.Commit()
            time.sleep(60)
コード例 #29
0
def add_service():
    global group, serviceName, serviceType, servicePort, serviceTXT, domain, host, bus
    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 )
    

    group.AddService(
        avahi.IF_UNSPEC,
        avahi.PROTO_UNSPEC,
        dbus.UInt32(0),
        serviceName, serviceType,
        domain, host,
        dbus.UInt16(servicePort),
        avahi.string_array_to_txt_array(serviceTXT))
    group.Commit()
コード例 #30
0
    def add_service(self):
        """add a service
        run by self.server_state_change() and self.entry_group_state_changed()
        """
        if self.asGroup is None:
            self.asGroup = dbus.Interface(
                self.bus.get_object(avahi.DBUS_NAME,
                                    self.server.EntryGroupNew()),
                avahi.DBUS_INTERFACE_ENTRY_GROUP)
            self.asGroup.connect_to_signal('StateChange',
                                           self.entry_group_state_changed)

            self.asGroup.AddService(
                avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0),
                socket.gethostname(), self.asType, self.asDomain, '',
                dbus.UInt16(self.asPort),
                avahi.string_array_to_txt_array(self.asTXT))
            self.asGroup.Commit()
コード例 #31
0
ファイル: myavahi.py プロジェクト: JoakimLindbom/agocontrol
    def add_service(self, name, proto, port, txt):
        print "Adding service '%s' of type '%s' ..." % (name, proto)
	try:
		if self.group is None:
			self.group = dbus.Interface(self.bus.get_object(avahi.DBUS_NAME, self.server.EntryGroupNew()), avahi.DBUS_INTERFACE_ENTRY_GROUP)
			self.group.connect_to_signal('StateChanged', self._entry_group_state_changed)
		self.group.AddService(
			avahi.IF_UNSPEC,                # interface
			avahi.PROTO_UNSPEC,             # protocol
			dbus.UInt32(0),                 # flags
			name, proto,
			self.domain, self.host,
			dbus.UInt16(port),
			avahi.string_array_to_txt_array(txt))
		self.group.Commit()
		self._services.append((name, proto, port, txt))
	except:
		print "can't connect to avahi"
コード例 #32
0
ファイル: local_server.py プロジェクト: JordanTipton/gdpds
    def add_service(self):
        if self.group is None:
            self.group = dbus.Interface(
                    self.bus.get_object( avahi.DBUS_NAME, self.server.EntryGroupNew()),
                    avahi.DBUS_INTERFACE_ENTRY_GROUP)
            self.group.connect_to_signal('StateChanged', self.entry_group_state_changed)

        print "Adding service '%s' of type '%s' ..." % (self.serviceName, self.serviceType)

        self.group.AddService(
                              avahi.IF_UNSPEC,    #interface
                              avahi.PROTO_UNSPEC, #protocol
                              dbus.UInt32(0),                  #flags
                              self.serviceName, self.serviceType,
                              self.serviceDomain, self.serviceHost,
                              dbus.UInt16(self.servicePort),
                              avahi.string_array_to_txt_array(self.serviceTXT))
        self.group.Commit()
コード例 #33
0
    def add_service(self):
        if self.group is None:
            self.group = dbus.Interface(
                self.bus.get_object( avahi.DBUS_NAME, self.server.EntryGroupNew()),
                avahi.DBUS_INTERFACE_ENTRY_GROUP)
            self.group.connect_to_signal('StateChanged', self.entry_group_state_changed)

        #logging.debug( "Adding service '%s' of type '%s' ..." % (self.serviceName, self.serviceType))

        self.group.AddService(
            avahi.IF_UNSPEC,  #interface
            avahi.PROTO_INET, #protocol (IPv4)
            dbus.UInt32(0),   #flags
            self.serviceName, self.serviceType,
            self.domain, self.host,
            dbus.UInt16(self.servicePort),
            avahi.string_array_to_txt_array(self.serviceTXT))
        self.group.Commit()
コード例 #34
0
ファイル: smdns.py プロジェクト: derosa/Sigala
 def publish(self, s_name, s_data={}):
     s_data['hostname'] = self.hostname
     s_data['ip'] = self.ip
     s_txt = json.dumps(s_data)
                                         
     self.group = dbus.Interface(self.sysbus.get_object(avahi.DBUS_NAME, self.server.EntryGroupNew()),
                                 avahi.DBUS_INTERFACE_ENTRY_GROUP)
                                 
     self.group.connect_to_signal('StateChanged', self._entry_group_state_changed)
     
     self.group.AddService(
         avahi.IF_UNSPEC,		#interface
         avahi.PROTO_UNSPEC,		#protocol
         dbus.UInt32(0),			#flags
         s_name, AVAHI_SERVICE_TYPE,
         self.domain, "",
         dbus.UInt16(AVAHI_SERVICE_PORT),
         avahi.string_array_to_txt_array(s_txt))
     self.group.Commit()
コード例 #35
0
    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),
            avahi.string_array_to_txt_array(self.text),
        )

        g.Commit()
        self.group = g
コード例 #36
0
  def publish(self):
    bus = dbus.SystemBus()
    server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)
    group = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()), avahi.DBUS_INTERFACE_ENTRY_GROUP)

    i = 0
    while True:
      try:
        group.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0),
                         self.name, self.stype, self.domain, self.host, dbus.UInt16(self.port),
                         avahi.string_array_to_txt_array(self.text))
      # name collision so try to make it unique
      except dbus.DBusException:
        i += 1
        self.name = '%s _%s' % (name, str(i))
      else:
        break

    group.Commit()
    self.group = group
コード例 #37
0
    def addService(self):
        group = self.getGroup()
        logging.info("Adding service '%s' of type '%s'" %
                     (self.serviceName, self.serviceType))

        servname = self.serviceName + '.local'
        hostname = str(self.server.GetHostNameFqdn())
        logging.info("Adding address '%s' => '%s'\n", servname, hostname)

        group.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0),
                         self.serviceName, self.serviceType,
                         self.domain, self.host,
                         dbus.UInt16(self.servicePort),
                         avahi.string_array_to_txt_array(self.serviceTxt))

        #cname = self.EncodeDNS(servname)
        #rdata = self.CreateRR(hostname)
        #group.AddRecord(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0),
        #                cname, CLASS_IN, TYPE_CNAME, TTL, rdata)
        group.Commit()
コード例 #38
0
 def provide(self, name, type, port, txt):
     """
     Provide a service with the given name and type listening on the given
     port with additional information in the txt record. This function returns
     the id of the service to remove the service later.
     """
     self._nextid += 1
     self._provided[self._nextid] = [
         avahi.IF_UNSPEC,            # interface
         avahi.PROTO_UNSPEC,         # protocol
         0,                          # flags
         name, type,                 # name, service type
         "",                         # domain
         "",                         # host
         dbus.UInt16(port),          # port
         avahi.string_array_to_txt_array([ '%s=%s' % t for t in txt.items() ]),
     ]
     self._sync_required = True
     self._sync()
     return self._nextid
コード例 #39
0
ファイル: mdns.py プロジェクト: Dischi/kaa-base
 def provide(self, name, type, port, txt):
     """
     Provide a service with the given name and type listening on the given
     port with additional information in the txt record. This function returns
     the id of the service to remove the service later.
     """
     self._nextid += 1
     self._provided[self._nextid] = [
         avahi.IF_UNSPEC,            # interface
         avahi.PROTO_UNSPEC,         # protocol
         0,                          # flags
         name, type,                 # name, service type
         "",                         # domain
         "",                         # host
         dbus.UInt16(port),          # port
         avahi.string_array_to_txt_array([ '%s=%s' % t for t in txt.items() ]),
     ]
     self._sync_required = True
     self._sync()
     return self._nextid
コード例 #40
0
def add_service():
    global group, serviceName, serviceType, servicePort, serviceTXT, domain, host
    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)

    print "Adding service '%s' of type '%s' ..." % (serviceName, serviceType)

    group.AddService(
        avahi.IF_UNSPEC,  #interface
        avahi.PROTO_UNSPEC,  #protocol
        0,  #flags
        serviceName,
        serviceType,
        domain,
        host,
        dbus.UInt16(servicePort),
        avahi.string_array_to_txt_array(serviceTXT))
    group.Commit()
コード例 #41
0
ファイル: avahi_example.py プロジェクト: Darth-Neo/PyAPRS
 def add_service(self, name, proto, port, txt):
     print("Adding service '%s' of type '%s' ..." % (name, proto))
     if self.group is None:
         #self.bus = dbus.SystemBus()
         #ob = self.bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER)
         #self.server = dbus.Interface(ob, avahi.DBUS_INTERFACE_SERVER)
         #eg = self.server.EntryGroupNew()
         #ob = self.bus.get_object(avahi.DBUS_NAME, eg)
         #self.group = dbus.Interface(ob, avahi.DBUS_INTERFACE_ENTRY_GROUP)
         self.group = dbus.Interface(self.bus.get_object(avahi.DBUS_NAME, self.server.EntryGroupNew()), avahi.DBUS_INTERFACE_ENTRY_GROUP)
         self.group.connect_to_signal('StateChanged', self._entry_group_state_changed)
     self.group.AddService(
             avahi.IF_UNSPEC,                # interface
             avahi.PROTO_UNSPEC,             # protocol
             dbus.UInt32(0),                 # flags
             name, proto,
             self.domain, self.host,
             dbus.UInt16(port),
             avahi.string_array_to_txt_array(txt))
     self.group.Commit()
     self._services.append((name, proto, port, txt))
コード例 #42
0
ファイル: master.py プロジェクト: Nucleoos/quinn
    def add_service(self):
        """add a service
        run by self.server_state_change() and self.entry_group_state_changed()
        """
        if self.asGroup is None:
            self.asGroup = dbus.Interface(
                self.bus.get_object(avahi.DBUS_NAME, self.server.EntryGroupNew()),
                avahi.DBUS_INTERFACE_ENTRY_GROUP)
            self.asGroup.connect_to_signal('StateChange', self.entry_group_state_changed)

            self.asGroup.AddService(
                avahi.IF_UNSPEC,
                avahi.PROTO_UNSPEC,
                dbus.UInt32(0),
                socket.gethostname(),
                self.asType,
                self.asDomain,
                '',
                dbus.UInt16(self.asPort),
                avahi.string_array_to_txt_array(self.asTXT))
            self.asGroup.Commit()
コード例 #43
0
ファイル: zeroconf.py プロジェクト: rossburton/barf
 def publish(self):
     print "publishing"
     if self.group is None:
         self.group = dbus.Interface(
             self.bus.get_object(avahi.DBUS_NAME,
                                 self.server.EntryGroupNew()),
             avahi.DBUS_INTERFACE_ENTRY_GROUP)
         self.group.connect_to_signal('StateChanged', self.entry_group_state_changed)
     assert self.group.IsEmpty()
     
     # TODO only if we're running, otherwise set a flag for server_state_changed()
     try:
         self.group.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0),
                               self.name, self.stype, self.domain, self.host,
                               dbus.UInt16(self.port), avahi.string_array_to_txt_array(self.text))
         self.group.Commit()
     except dbus.exceptions.DBusException, e:
         print e
         # TODO: this exception is bad
         print "FAIL"
         self.name = self.server.GetAlternativeServiceName(self.name)
         self.publish()
コード例 #44
0
ファイル: wfut-server.py プロジェクト: sajty/libwfut
def add_service():
    global group, serviceName, serviceType, servicePort, serviceTXT, domain, host
    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)

    print "Adding service '%s' of type '%s' ..." % (serviceName, serviceType)

    group.AddService(
        avahi.IF_UNSPEC,  # interface
        avahi.PROTO_UNSPEC,  # protocol
        0,  # flags
        serviceName,
        serviceType,
        domain,
        host,
        dbus.UInt16(servicePort),
        avahi.string_array_to_txt_array(serviceTXT),
    )
    group.Commit()
コード例 #45
0
    def add_service(self):
        if self.group is None:
            self.group = dbus.Interface(
                self.bus.get_object(avahi.DBUS_NAME,
                                    self.server.EntryGroupNew()),
                avahi.DBUS_INTERFACE_ENTRY_GROUP)
            #self.group.connect_to_signal('StateChanged', self.entry_group_state_changed)
        LOG.info("[Avahi] Adding service '%s' of type '%s' ..." %
                 (self.service_name, self.service_type))

        domain = ""
        host = ""
        self.group.AddService(
            avahi.IF_UNSPEC,  #interface
            avahi.PROTO_UNSPEC,  #protocol
            dbus.UInt32(0),  #flags
            self.service_name,
            self.service_type,
            domain,
            host,
            dbus.UInt16(self.service_port),
            avahi.string_array_to_txt_array(self.text))
        self.group.Commit()
コード例 #46
0
ファイル: ffs.py プロジェクト: jku/ffs
    def __init__(self, name, port, stype="_http._tcp", domain="", host="", text="path=/"):

        # these _should_ not block but async would still be proper

        server = Gio.DBusProxy.new_for_bus_sync(
            Gio.BusType.SYSTEM, 0, None, avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER, avahi.DBUS_INTERFACE_SERVER, None
        )
        self.group = Gio.DBusProxy.new_for_bus_sync(
            Gio.BusType.SYSTEM, 0, None, avahi.DBUS_NAME, server.EntryGroupNew(), avahi.DBUS_INTERFACE_ENTRY_GROUP, None
        )
        self.group.AddService(
            "(iiussssqaay)",
            avahi.IF_UNSPEC,
            avahi.PROTO_UNSPEC,
            0,
            name,
            stype,
            domain,
            host,
            port,
            avahi.string_array_to_txt_array([text]),
        )
        self.group.Commit("()")
コード例 #47
0
 def _registerService(self):
     try:
       if self.__group is None:
         if (self.masterInfo.domain is None) or len(self.masterInfo.domain) == 0:
           self.masterInfo.domain = 'local'
         self.masterInfo.host = self.masterInfo.host + '.' + self.masterInfo.domain
         self.__group = dbus.Interface(self.__bus.get_object(avahi.DBUS_NAME,
                                                             self.__server.EntryGroupNew()),
                                      avahi.DBUS_INTERFACE_ENTRY_GROUP)
         self.__group.connect_to_signal('StateChanged', self.__avahi_callback_group_state_changed)
       self.__group.AddService(avahi.IF_UNSPEC,
                               avahi.PROTO_UNSPEC,
                               dbus.UInt32(0),
                               self.masterInfo.name, 
                               self.masterInfo.stype,
                               self.masterInfo.domain,
                               self.masterInfo.host,
                               dbus.UInt16(str(self.masterInfo.port)),
                               avahi.string_array_to_txt_array(self.masterInfo.txt))
       self.__group.Commit()
     except dbus.DBusException, e:
       rospy.logfatal(''.join(['registerService: ', str(e)]))
       self.on_group_collision()
コード例 #48
0
    def add_service(self):
        if self.group is None:
            self.group = dbus.Interface(
                self.bus.get_object(avahi.DBUS_NAME,
                                    self.server.EntryGroupNew()),
                avahi.DBUS_INTERFACE_ENTRY_GROUP)
            self.group.connect_to_signal('StateChanged',
                                         self.entry_group_state_changed)

        Log.d(
            log_src, "Adding service '{0}' of type '{1}' ...".format(
                self.name, avahi_service_type))

        self.group.AddService(
            avahi.IF_UNSPEC,  #interface
            avahi.PROTO_INET,  #protocol
            dbus.UInt32(0),  #flags
            self.name,
            avahi_service_type,
            domain,
            host,
            dbus.UInt16(avahi_service_port),
            avahi.string_array_to_txt_array([avahi_service_TXT]))
        self.group.Commit()
コード例 #49
0
ファイル: myavahi.py プロジェクト: patrickrath/agocontrol
 def add_service(self, name, proto, port, txt):
     print "Adding service '%s' of type '%s' ..." % (name, proto)
     try:
         if self.group is None:
             self.group = dbus.Interface(
                 self.bus.get_object(avahi.DBUS_NAME,
                                     self.server.EntryGroupNew()),
                 avahi.DBUS_INTERFACE_ENTRY_GROUP)
             self.group.connect_to_signal('StateChanged',
                                          self._entry_group_state_changed)
         self.group.AddService(
             avahi.IF_UNSPEC,  # interface
             avahi.PROTO_UNSPEC,  # protocol
             dbus.UInt32(0),  # flags
             name,
             proto,
             self.domain,
             self.host,
             dbus.UInt16(port),
             avahi.string_array_to_txt_array(txt))
         self.group.Commit()
         self._services.append((name, proto, port, txt))
     except:
         print "can't connect to avahi"
コード例 #50
0
	def ServiceAdd(self, name, type, addr, required, optional):
		#print "ServiceAdd"

		stype = "_%s._tcp" % type

		entrygroup = self.server.EntryGroupNew()
		group = dbus.Interface(dbus.SystemBus().get_object(avahi.DBUS_NAME, entrygroup), avahi.DBUS_INTERFACE_ENTRY_GROUP)

		def entry_group_state_changed(state, hrm, self=self, entrygroup=entrygroup):
			#print "entry_group_state_changed...."
			#print state, hrm, self, entrygroup
			group = dbus.Interface(dbus.SystemBus().get_object(avahi.DBUS_NAME, self.server.EntryGroupNew()), avahi.DBUS_INTERFACE_ENTRY_GROUP)
			self.entry_group_state_changed(group, state)
		group.connect_to_signal('StateChanged', entry_group_state_changed)

		#print "Adding service '%s' of type '%s' ..." % (name, stype)
		txt = self.dict_to_pair(required) + self.dict_to_pair(optional)
		#print txt, addr, avahi.string_array_to_txt_array(txt)
		group.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, 0,
			name, stype, "", "", dbus.UInt16(addr[2]), 
			avahi.string_array_to_txt_array(txt))
		group.Commit()

		self.groups[(name, type, addr)] = group
コード例 #51
0
ファイル: nfs-mount-browser.py プロジェクト: bmario/nfs-mount
    def export_share( self, share ):

        serviceName = "%s:%s" % ( self.hostname, share )
        serviceTXT = "%s%s" % ( serviceTXTPrefix, share )
        self.group.AddService( IF_UNSPEC, PROTO_INET, UInt32( 0 ), serviceName, serviceType, serviceDomain, self.hostname, UInt16( servicePort ), string_array_to_txt_array( [serviceTXT] ) )
コード例 #52
0
ファイル: discovery.py プロジェクト: deklungel/iRulez
    def __init__(self, name, service, port, txt):
        bus = dbus.SystemBus()
        server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)
        group = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()),
                               avahi.DBUS_INTERFACE_ENTRY_GROUP)

        self._service_name = name
        index = 1
        while True:
            try:
                group.AddService(avahi.IF_UNSPEC, avahi.PROTO_INET, 0, self._service_name, service, '', '', port, avahi.string_array_to_txt_array(txt))
            except dbus.DBusException: # name collision -> rename
                index += 1
                self._service_name = '%s #%s' % (name, str(index))
            else:
                break

        group.Commit()