def __inner(sdRef, flags, interfaceIndex, errorCode, serviceName, regtype, replyDomain): # print "_browse_callback(%r, %r, %r, %r, %r, %r, %r)" % (sdRef, flags, interfaceIndex, errorCode, serviceName, regtype, replyDomain) if errorCode != pybonjour.kDNSServiceErr_NoError: return if not (flags & pybonjour.kDNSServiceFlagsAdd): if not registerOnly: callback({"action": "remove", "name": serviceName, "type": regtype}) return if replyDomain == "local.": resolve_sdRef = pybonjour.DNSServiceResolve(0, interfaceIndex, serviceName, regtype, replyDomain, _resolve_callback(serviceName, regtype, callback)) self.rlist.append((resolve_sdRef, pybonjour.DNSServiceProcessResult)) else: query_sdRef = pybonjour.DNSServiceQueryRecord(interfaceIndex=interfaceIndex, fullname=serviceName + '.' + replyDomain, rrtype = pybonjour.kDNSServiceType_SRV, callBack = _query_SRV_callback(serviceName, regtype, callback)) self.rlist.append((query_sdRef, pybonjour.DNSServiceProcessResult))
def resolve_callback(self, sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): if errorCode != pybonjour.kDNSServiceErr_NoError: return hw, pver, dummy = hosttarget.split('_') if hw != 'moku10' or pver != self.pversion: return query_sdRef = \ pybonjour.DNSServiceQueryRecord(interfaceIndex = interfaceIndex, fullname = hosttarget, rrtype = pybonjour.kDNSServiceType_A, callBack = self.query_record_callback) try: while not self.queried: ready = select.select([query_sdRef], [], [], self.timeout) if query_sdRef not in ready[0]: break pybonjour.DNSServiceProcessResult(query_sdRef) else: self.queried.pop() finally: query_sdRef.close() self.resolved.append(True)
def resolve_callback(sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): if errorCode != pybonjour.kDNSServiceErr_NoError: return print 'Resolved service:' print ' fullname =', fullname print ' hosttarget =', hosttarget print ' port =', port print ' txt =', parseText(txtRecord) global services services[fullname] = { "fullname": fullname, "hosttarget": hosttarget, "port": port, "txtRecord": parseText(txtRecord) } query_sdRef = pybonjour.DNSServiceQueryRecord( interfaceIndex=interfaceIndex, fullname=hosttarget, rrtype=pybonjour.kDNSServiceType_A, callBack=query_record_callback) try: while not queried: ready = select.select([query_sdRef], [], [], timeout) if query_sdRef not in ready[0]: print 'Query record timed out' break pybonjour.DNSServiceProcessResult(query_sdRef) else: queried.pop() finally: query_sdRef.close() resolved.append(True)
def resolve_cb(self, sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): if errorCode == pybonjour.kDNSServiceErr_NoError: #print 'Resolved service:' #print ' fullname =', fullname #print ' hosttarget =', hosttarget #print ' port =', port self.service_name = fullname self.hostname = hosttarget self.port = port address_sdRef = pybonjour.DNSServiceQueryRecord( fullname=hosttarget, rrtype=pybonjour.kDNSServiceType_A, callBack=self.address_cb) try: ready = select.select([address_sdRef], [], [], TIMEOUT) if address_sdRef in ready[0]: pybonjour.DNSServiceProcessResult(address_sdRef) else: print('Resolve timed out') finally: address_sdRef.close() self.resolved.append(True)
def resolve_callback(sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): global m_ip, m_port if errorCode != pybonjour.kDNSServiceErr_NoError: return print 'Resolved service:' print ' fullname =', fullname print ' hosttarget =', hosttarget print ' port =', port m_port = port query_sdRef = \ pybonjour.DNSServiceQueryRecord(interfaceIndex = interfaceIndex, fullname = hosttarget, rrtype = pybonjour.kDNSServiceType_A, callBack = query_record_callback) try: #print "debug:queried:",queried while not queried: ready = select.select([query_sdRef], [], [], timeout) if query_sdRef not in ready[0]: print 'Query record timed out' break pybonjour.DNSServiceProcessResult(query_sdRef) else: queried.pop() finally: query_sdRef.close() resolved.append(True)
def resolve_callback(self, sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): if errorCode != pybonjour.kDNSServiceErr_NoError: return #print 'Resolved service:' #print ' fullname =', fullname.encode('utf-8') #print ' hosttarget =', hosttarget.encode('utf-8') #print ' port =', port self.bonjourName.append(fullname) self.bonjourPort.append(str(port)) query_sdRef = \ pybonjour.DNSServiceQueryRecord(interfaceIndex = interfaceIndex, fullname = hosttarget, rrtype = pybonjour.kDNSServiceType_A, callBack = self.query_record_callback) try: while not self.queried: ready = select.select([query_sdRef], [], [], self.timeout) if query_sdRef not in ready[0]: print 'Query record timed out' break pybonjour.DNSServiceProcessResult(query_sdRef) else: self.queried.pop() finally: query_sdRef.close() self.resolved.append(True)
def resolve_callback(self, sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): if errorCode != pybonjour.kDNSServiceErr_NoError: return print('Resolved service:') print(' fullname =', fullname) print(' hosttarget =', hosttarget) print(' port =', port) query_sdRef = \ pybonjour.DNSServiceQueryRecord(interfaceIndex = interfaceIndex, fullname = hosttarget, rrtype = pybonjour.kDNSServiceType_A, callBack = self.query_record_callback) try: while not self.queried: ready = select.select([query_sdRef], [], [], self.querytimeout) if query_sdRef not in ready[0]: print('Query record timed out') break pybonjour.DNSServiceProcessResult(query_sdRef) else: self.queried.pop() finally: query_sdRef.close() self.results.append((fullname, hosttarget, port, txtRecord,self.quip)) print("resolve.. done.") self.resolved.append(True)
def resolve_callback(sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): if errorCode != pybonjour.kDNSServiceErr_NoError: return confero_server_bonjour_info.append({ 'fullname': fullname, 'hosttarget': hosttarget, 'port': port }) query_sdRef = \ pybonjour.DNSServiceQueryRecord(interfaceIndex = interfaceIndex, fullname = hosttarget, rrtype = pybonjour.kDNSServiceType_A, callBack = query_record_callback) try: while not queried: ready = select.select([query_sdRef], [], [], timeout) if query_sdRef not in ready[0]: print 'Query record timed out' break pybonjour.DNSServiceProcessResult(query_sdRef) else: queried.pop() finally: query_sdRef.close() resolved.append(True)
def __bonjour_resolve_callback(self, sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): if errorCode == pybonjour.kDNSServiceErr_NoError: if fullname.startswith(self.bj_name): #print 'ignoring my own service' return if not (fullname.startswith(self.name+'__') and ('._delugefs._tcp.' in fullname )): #print 'ignoring unrelated service', fullname return servicename = fullname[:fullname.index('.')] print 'bonjour resolve found peer', servicename if not servicename in self.httpd.peers: self.httpd.peers[servicename] = Peer(servicename, hosttarget) if '._delugefs._tcp.' in fullname: self.httpd.peers[servicename].bt_port = port print 'self.httpd.peers', self.httpd.peers query_sdRef = pybonjour.DNSServiceQueryRecord(interfaceIndex = interfaceIndex, fullname = hosttarget, rrtype = pybonjour.kDNSServiceType_A, callBack = self.__bonjour_query_record_callback) try: while not queried: ready = select.select([query_sdRef], [], [], 5) if query_sdRef not in ready[0]: #print 'Query timed out' break pybonjour.DNSServiceProcessResult(query_sdRef) else: queried.pop() finally: query_sdRef.close() resolved.append(True)
def resolve_callback(sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): if errorCode != pybonjour.kDNSServiceErr_NoError: return with self.browserLock: self.currentClient.fullname = fullname self.currentClient.port = port self.currentClient.hostname = hosttarget.decode('utf-8') query_sdRef = \ pybonjour.DNSServiceQueryRecord(interfaceIndex = interfaceIndex, fullname = hosttarget, rrtype = pybonjour.kDNSServiceType_A, callBack = query_record_callback) try: while not self.browserQueried: ready = select.select([query_sdRef], [], [], self.timeout) if query_sdRef not in ready[0]: print 'Query record timed out' break pybonjour.DNSServiceProcessResult(query_sdRef) else: self.browserQueried.pop() finally: query_sdRef.close() self.browserResolved.append(True)
def resolve_callback(sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): if errorCode == pybonjour.kDNSServiceErr_NoError: it = itunesClients[fullname.split(".")[0]] it.resolved(hosttarget, fullname, port, txtRecord) it.query_sdRef = pybonjour.DNSServiceQueryRecord( interfaceIndex=interfaceIndex, fullname=hosttarget, rrtype=pybonjour.kDNSServiceType_A, callBack=query_record_callback)
def _browse_callback(self, sdRef, flags, interfaceIndex, errorCode, serviceName, regtype, replyDomain): print "browse callback" if errorCode != pybonjour.kDNSServiceErr_NoError: return if not (flags & pybonjour.kDNSServiceFlagsAdd): print 'Service removed' return print 'Service added; resolving' resolve_sdRef = pybonjour.DNSServiceResolve(0, interfaceIndex, serviceName, regtype, replyDomain, self._resolve_callback) try: while not self.resolved: ready = select.select([resolve_sdRef], [], [], self.timeout) if resolve_sdRef not in ready[0]: print 'Resolve timed out' break pybonjour.DNSServiceProcessResult(resolve_sdRef) else: self.resolved.pop() finally: resolve_sdRef.close() #### query_sdRef = pybonjour.DNSServiceQueryRecord( interfaceIndex=self.host.interfaceIndex, fullname=self.host.hosttarget, rrtype=pybonjour.kDNSServiceType_A, callBack=self._query_record_callback) try: while not self.queried: ready = select.select([query_sdRef], [], [], self.timeout) if query_sdRef not in ready[0]: print "Query not in record" break pybonjour.DNSServiceProcessResult(query_sdRef) else: self.queried.pop() finally: query_sdRef.close()
def __inner(sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): # print "_resolve_callback(%r, %r, %r, %r, %r, %r, %r, %r)" % (sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord) if errorCode != pybonjour.kDNSServiceErr_NoError: return query_sdRef = pybonjour.DNSServiceQueryRecord(interfaceIndex = interfaceIndex, fullname = hosttarget, rrtype = pybonjour.kDNSServiceType_A, callBack = _query_record_callback(serviceName, regtype, port, pybonjour.TXTRecord.parse(txtRecord), callback)) self.rlist.append((query_sdRef, pybonjour.DNSServiceProcessResult)) X = [ x for x in self.rlist if x[0] == sdRef ] for x in X: self.rlist.remove(x) sdRef.close()
def resolve_callback(self, sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): if errorCode != pb.kDNSServiceErr_NoError: logging.error('AvahiService: resolve_callback: error={}'. format(errorCode)) return logging.debug('Resolved service: {}; {}; {}'.format(fullname, hosttarget, port)) if fullname not in self._targets: self._targets[fullname] = [] host = hosttarget[:hosttarget.rfind('.local')] if INCLUDE_SELF or host != platform.node(): service = fullname[fullname.find('.') + 1:-7] target = {'host': host, 'port': port, 'service': service} self._targets[fullname].append(target) self.fire_event() self._lock.acquire() sd = pb.DNSServiceQueryRecord(interfaceIndex=interfaceIndex, fullname=hosttarget, rrtype=pb.kDNSServiceType_A, callBack=self.query_callback) old_input = self._input self._input = (sd,) self._lock.release() while not self._stoped and not self._queried: R, W, E = select(self._input, [], [], self.TIMEOUT) if not (R or W or E): break map(lambda sd: pb.DNSServiceProcessResult(sd), R) else: self._queried.pop() self.remove_input() self._lock.acquire() self._input = old_input self._lock.release() self._resolved.append(True)
def resolve_callback(sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): global queried, resolved if errorCode != pybonjour.kDNSServiceErr_NoError: return query_sdRef = pybonjour.DNSServiceQueryRecord(interfaceIndex = interfaceIndex, fullname = hosttarget, rrtype = pybonjour.kDNSServiceType_A, callBack = query_record_callback(port)) print "Service {} Resolved; Querying".format(hosttarget) while service_address is None and not queried: ready = select.select([query_sdRef], [], [], 5) if query_sdRef not in ready[0]: print 'Query record timed out' break pybonjour.DNSServiceProcessResult(query_sdRef) else: queried.pop() query_sdRef.close() resolved.append(True)
def resolve_callback(self, sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): """ Callback for resolving hosts that have been detected through the browse routine. """ if errorCode == pybonjour.kDNSServiceErr_NoError: if self.fullname == fullname: localhost = True self.debug("Resolved Self") else: localhost = False for client in self.clients.itervalues(): if sdRef == client.resolve_sdRef: client.hostname = hosttarget.decode('utf-8') client.port = port break; if localhost: if self.clients.has_key(client.serviceName): del self.clients[client.serviceName] return client.query_sdRef = \ pybonjour.DNSServiceQueryRecord(interfaceIndex=interfaceIndex, fullname=hosttarget, rrtype=pybonjour.kDNSServiceType_A, callBack=self.query_record_callback) try: while not self.queried: ready = select.select([client.query_sdRef], [], [], self.timeout) if client.query_sdRef not in ready[0]: self.debug("Query record timed out") break pybonjour.DNSServiceProcessResult(client.query_sdRef) else: self.queried.pop() finally: client.query_sdRef.close() self.resolved.append(True) else: self.error("Resolve failed with code: %s" % errorCode)
def resolve_all(self): if not self.connected: return False # for now put here as this is synchronous if not self.browse_loop(): return False # Monitor TXT Records with DNSServiceQueryRecord because # its more efficient (see pybonjour documentation) for val in self.contacts.values(): try: query_sdRef = None query_sdRef = \ pybonjour.DNSServiceQueryRecord( interfaceIndex=pybonjour.kDNSServiceInterfaceIndexAny, fullname=val[Constant.RESOLVED_INFO][0][Constant.BARE_NAME], rrtype=pybonjour.kDNSServiceType_TXT, callBack=self.query_txt_callback) while not self.queried: ready = select.select([query_sdRef], [], [], resolve_timeout) if query_sdRef not in ready[0]: log.info('Query record timed out') break pybonjour.DNSServiceProcessResult(query_sdRef) else: self.queried.pop() except pybonjour.BonjourError as error: if error.errorCode == pybonjour.kDNSServiceErr_ServiceNotRunning: log.info('Service not running') return False else: log.error('Error in query for TXT records. %s', error) finally: if query_sdRef: query_sdRef.close() return True
def _callback_resolve(self, sdref, flags, interfaceindex, error, fullname, hosttarget, port, txtrecord): if error != pybonjour.kDNSServiceErr_NoError: return self.__service._full_name = fullname self.__service._host_target = hosttarget self.__service._port = port self.__service._txt_record = txtrecord sdref = pybonjour.DNSServiceQueryRecord( interfaceIndex=interfaceindex, fullname=hosttarget, rrtype=pybonjour.kDNSServiceType_A, callBack=self._callback_query) ready = select.select([sdref], [], [], 5) if sdref not in ready[0]: return pybonjour.DNSServiceProcessResult(sdref) sdref.close()
def service_resolved_callback(self, sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): if errorCode != pybonjour.kDNSServiceErr_NoError: log.error('Error in service_resolved_callback: %s', str(errorCode)) return self.resolved_contacts[hosttarget] = (fullname, port, txtRecord) try: query_sdRef = None query_sdRef = \ pybonjour.DNSServiceQueryRecord( interfaceIndex=interfaceIndex, fullname=hosttarget, rrtype=pybonjour.kDNSServiceType_A, callBack=self.query_record_callback) while not self.queried: ready = select.select([query_sdRef], [], [], resolve_timeout) if query_sdRef not in ready[0]: log.warning('Query record timed out') break pybonjour.DNSServiceProcessResult(query_sdRef) else: self.queried.pop() except pybonjour.BonjourError as error: if error.errorCode == pybonjour.kDNSServiceErr_ServiceNotRunning: log.info('Service not running') else: self.error_CB(_('Error while adding service. %s') % error) finally: if query_sdRef: query_sdRef.close() self.resolved.append(True)
def resolve_callback(sdRef, flags, interfaceIndex, errorCode, fullname, hosttarget, port, txtRecord): if errorCode != pybonjour.kDNSServiceErr_NoError: return print 'Resolved service:' print ' fullname =', fullname print ' hosttarget =', hosttarget print ' port =', port def query_record_callback(sdRef, flags, interfaceIndex, errorCode, fullname, rrtype, rrclass, rdata, ttl): if errorCode == pybonjour.kDNSServiceErr_NoError: ip = socket.inet_ntoa(rdata) print ' IP =', ip self.queried.append(True) self.callback(ip, port) query_sdRef = pybonjour.DNSServiceQueryRecord( interfaceIndex=interfaceIndex, fullname=hosttarget, rrtype=pybonjour.kDNSServiceType_A, callBack=query_record_callback) try: while not self.queried: ready = select.select([query_sdRef], [], [], self.timeout) if query_sdRef not in ready[0]: print 'Query record timed out' break pybonjour.DNSServiceProcessResult(query_sdRef) else: self.queried.pop() finally: query_sdRef.close() self.resolved.append(True)
count += 1 print "-----" selectedHost = int(raw_input("Select your airplay device...\n")) - 1 else: selectedHost = 0 if selectedHost >= len(resolvedHosts): sys.exit("ERROR: There is no device at that index") host = resolvedHosts[selectedHost] print "Connecting to: %s" % (resolvedHosts[selectedHost].displayname) query_sdRef = pybonjour.DNSServiceQueryRecord( interfaceIndex=host.interfaceIndex, fullname=host.hosttarget, rrtype=pybonjour.kDNSServiceType_A, callBack=query_record_callback) try: while not queried: ready = select.select([query_sdRef], [], [], timeout) if query_sdRef not in ready[0]: print "Query not in record" break pybonjour.DNSServiceProcessResult(query_sdRef) else: queried.pop() finally: query_sdRef.close()