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()
Ejemplo n.º 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)
Ejemplo n.º 3
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()
    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
Ejemplo n.º 5
0
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()
Ejemplo n.º 6
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)

		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()
Ejemplo n.º 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
Ejemplo n.º 8
0
 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            
Ejemplo n.º 9
0
    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()
Ejemplo n.º 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)
Ejemplo n.º 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
Ejemplo n.º 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
Ejemplo n.º 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()
Ejemplo n.º 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)
Ejemplo n.º 15
0
 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
Ejemplo n.º 16
0
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()
Ejemplo n.º 17
0
 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
Ejemplo n.º 18
0
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(""),
    )
Ejemplo n.º 19
0
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/",
        ]))
Ejemplo n.º 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
Ejemplo n.º 21
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()
Ejemplo n.º 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()
Ejemplo n.º 23
0
    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()
Ejemplo n.º 24
0
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
    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
Ejemplo n.º 26
0
    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()
    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()
Ejemplo n.º 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)
Ejemplo n.º 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()
Ejemplo n.º 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()
Ejemplo n.º 31
0
    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"
Ejemplo n.º 32
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)

        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()
Ejemplo n.º 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()
Ejemplo n.º 34
0
 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()
    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
Ejemplo n.º 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
Ejemplo n.º 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()
Ejemplo n.º 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
Ejemplo n.º 39
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
Ejemplo n.º 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()
Ejemplo n.º 41
0
 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))
Ejemplo n.º 42
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()
Ejemplo n.º 43
0
 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()
Ejemplo n.º 44
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()
    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()
Ejemplo n.º 46
0
Archivo: ffs.py Proyecto: 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("()")
Ejemplo n.º 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()
    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()
Ejemplo n.º 49
0
 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"
Ejemplo n.º 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
Ejemplo n.º 51
0
    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] ) )
Ejemplo n.º 52
0
    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()