コード例 #1
0
            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))
コード例 #2
0
    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)
コード例 #3
0
ファイル: webjour.py プロジェクト: sparkslabs/webjour
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)
コード例 #4
0
    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)
コード例 #5
0
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)
コード例 #6
0
    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)
コード例 #7
0
    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)
コード例 #8
0
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)
コード例 #9
0
 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)
コード例 #10
0
ファイル: Bonjour.py プロジェクト: sloev/robot_sem4
        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)
コード例 #11
0
ファイル: connect.py プロジェクト: jasonhector/remote
    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)
コード例 #12
0
ファイル: frontend.py プロジェクト: glebb/mopidy-appletv
    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()
コード例 #13
0
            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()
コード例 #14
0
    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)
コード例 #15
0
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)
コード例 #16
0
    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)
コード例 #17
0
    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
コード例 #18
0
ファイル: dacp.py プロジェクト: zutroy97/DACPy
    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()
コード例 #19
0
    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)
コード例 #20
0
ファイル: easyzeroconf.py プロジェクト: rowanj/zerocache
        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)
コード例 #21
0
ファイル: airplayer.py プロジェクト: flow12/AirPlayer
        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()