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()
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)
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
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()
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()
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
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
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()
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)
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
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
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()
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)
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
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()
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
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(""), )
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/", ]))
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
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()
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()
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()
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
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()
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)
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()
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()
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"
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()
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()
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
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
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()
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
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, 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))
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()
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("()")
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()
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"
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
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] ) )
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()