コード例 #1
0
ファイル: mdetect.py プロジェクト: srcnblgc/solaris-ips
        def locate(self):
                """When invoked, this populates the MirrorDetector object with
                URLs that name dynamically discovered content mirrors."""

                # Clear the list of mirrors.  It will be repopulated later.
                self._mirrors = []      

                if not "pybonjour" in globals():
                        return

                timedout = False
                tval = self.__timeout

                def browse_cb(sd_hdl, flags, interface_idx, error_code,
                    service_name, regtype, reply_domain):

                        if error_code != pybonjour.kDNSServiceErr_NoError:
                                return

                        if not (flags & pybonjour.kDNSServiceFlagsAdd):
                                return

                        self._resolve_server(interface_idx, error_code,
                            service_name, regtype, reply_domain)

                try:
                        sd_hdl = pybonjour.DNSServiceBrowse(
                            regtype=self.__service, callBack=browse_cb)
                except pybonjour.BonjourError as e:
                        errstr = "mDNS Service Browse Failed: {0}\n".format(
                            e.args[0][1])
                        raise tx.mDNSException(errstr)

                try:
                        while not timedout:
                                avail = select.select([sd_hdl], [], [], tval)
                                if sd_hdl in avail[0]:
                                        pybonjour.DNSServiceProcessResult(
                                            sd_hdl)
                                        tval = 0
                                else:
                                        timedout = True
                except select.error as e:
                        errstr = "Select failed: {0}\n".format(e.args[1])
                        raise tx.mDNSException(errstr)
                except pybonjour.BonjourError as e:
                        errstr = "mDNS Process Result failed: {0}\n".format(
                            e.args[0][1])
                        raise tx.mDNSException(errstr)
                finally:
                        sd_hdl.close()
コード例 #2
0
    def _resolve_server(self, if_idx, ec, service_name, regtype, reply_domain):
        """Invoked to resolve mDNS information about a service that
                was discovered by a Browse call."""

        timedout = False
        tval = self.__timeout

        def resolve_cb(sd_hdl, flags, interface_idx, error_code, full_name,
                       host_target, port, txt_record):

            if error_code != pybonjour.kDNSServiceErr_NoError:
                return

            tr = pybonjour.TXTRecord.parse(txt_record)
            if "url" in tr:
                url = tr["url"]
                if not misc.valid_pub_url(url):
                    return
                self._mirrors.append(pub.RepositoryURI(url))

        try:
            sd_hdl = pybonjour.DNSServiceResolve(0, if_idx, service_name,
                                                 regtype, reply_domain,
                                                 resolve_cb)
        except pybonjour.BonjourError, e:
            errstr = "mDNS Service Resolve Failed: %s\n" % e[0][1]
            raise tx.mDNSException(errstr)
コード例 #3
0
    def locate(self):
        """When invoked, this populates the MirrorDetector object with
                URLs that name dynamically discovered content mirrors."""

        # Clear the list of mirrors.  It will be repopulated later.
        self._mirrors = []

        if not "pybonjour" in globals():
            return

        timedout = False
        tval = self.__timeout

        def browse_cb(sd_hdl, flags, interface_idx, error_code, service_name,
                      regtype, reply_domain):

            if error_code != pybonjour.kDNSServiceErr_NoError:
                return

            if not (flags & pybonjour.kDNSServiceFlagsAdd):
                return

            self._resolve_server(interface_idx, error_code, service_name,
                                 regtype, reply_domain)

        try:
            sd_hdl = pybonjour.DNSServiceBrowse(regtype=self.__service,
                                                callBack=browse_cb)
        except pybonjour.BonjourError, e:
            errstr = "mDNS Service Browse Failed: %s\n" % e[0][1]
            raise tx.mDNSException(errstr)
コード例 #4
0
ファイル: mdetect.py プロジェクト: aszeszo/test
    def locate(self):
        """When invoked, this populates the MirrorDetector object with
                URLs that name dynamically discovered content mirrors."""

        # Clear the list of mirrors.  It will be repopulated later.
        self._mirrors = []

        if not "pybonjour" in globals():
            return

        timedout = False
        tval = self.__timeout

        def browse_cb(sd_hdl, flags, interface_idx, error_code, service_name, regtype, reply_domain):

            if error_code != pybonjour.kDNSServiceErr_NoError:
                return

            if not (flags & pybonjour.kDNSServiceFlagsAdd):
                return

            self._resolve_server(interface_idx, error_code, service_name, regtype, reply_domain)

        try:
            sd_hdl = pybonjour.DNSServiceBrowse(regtype=self.__service, callBack=browse_cb)
        except pybonjour.BonjourError, e:
            errstr = "mDNS Service Browse Failed: %s\n" % e[0][1]
            raise tx.mDNSException(errstr)
コード例 #5
0
ファイル: mdetect.py プロジェクト: srcnblgc/solaris-ips
        def _resolve_server(self, if_idx, ec, service_name, regtype,
            reply_domain):
                """Invoked to resolve mDNS information about a service that
                was discovered by a Browse call."""

                timedout = False
                tval = self.__timeout

                def resolve_cb(sd_hdl, flags, interface_idx, error_code,
                    full_name, host_target, port, txt_record):

                        if error_code != pybonjour.kDNSServiceErr_NoError:
                                return

                        tr = pybonjour.TXTRecord.parse(txt_record)
                        if "url" in tr:
                                url = tr["url"]
                                if not misc.valid_pub_url(url):
                                        return
                                self._mirrors.append(pub.RepositoryURI(url))

                try:
                        sd_hdl =  pybonjour.DNSServiceResolve(0, if_idx,
                            service_name, regtype, reply_domain, resolve_cb)
                except pybonjour.BonjourError as e:
                        errstr = "mDNS Service Resolve Failed: {0}\n".format(
                            e.args[0][1])
                        raise tx.mDNSException(errstr)

                try:
                        while not timedout:
                                avail = select.select([sd_hdl], [], [], tval)
                                if sd_hdl in avail[0]:
                                        pybonjour.DNSServiceProcessResult(
                                            sd_hdl)
                                        tval = 0
                                else:
                                        timedout = True
                except select.error as e:
                        errstr = "Select failed; {0}\n".format(e.args[1])
                        raise tx.mDNSException(errstr)
                except pybonjour.BonjourError as e:
                        errstr = "mDNS Process Result Failed: {0}\n".format(
                            e.args[0][1])
                        raise tx.mDNSException(errstr)
                finally:
                        sd_hdl.close()
コード例 #6
0
ファイル: mdetect.py プロジェクト: aszeszo/test
    def _resolve_server(self, if_idx, ec, service_name, regtype, reply_domain):
        """Invoked to resolve mDNS information about a service that
                was discovered by a Browse call."""

        timedout = False
        tval = self.__timeout

        def resolve_cb(sd_hdl, flags, interface_idx, error_code, full_name, host_target, port, txt_record):

            if error_code != pybonjour.kDNSServiceErr_NoError:
                return

            tr = pybonjour.TXTRecord.parse(txt_record)
            if "url" in tr:
                url = tr["url"]
                if not misc.valid_pub_url(url):
                    return
                self._mirrors.append(pub.RepositoryURI(url))

        try:
            sd_hdl = pybonjour.DNSServiceResolve(0, if_idx, service_name, regtype, reply_domain, resolve_cb)
        except pybonjour.BonjourError, e:
            errstr = "mDNS Service Resolve Failed: %s\n" % e[0][1]
            raise tx.mDNSException(errstr)
コード例 #7
0
class MirrorDetector(object):
    """This class uses mDNS and DNS-SD to find link-local content
        mirrors that may be present on the client's subnet."""
    def __init__(self):
        self._mirrors = []
        self.__timeout = 1
        self.__service = "_pkg5._tcp"

    def __contains__(self, key):
        return key in self._mirrors

    def __getitem__(self, pos):
        return self._mirrors[pos]

    def __iter__(self):
        """Each time iterator is invoked, randomly select up to
                five mirrors from the list of available mirrors."""

        listlen = len(self._mirrors)
        iterlst = random.sample(xrange(listlen), min(listlen, 5))

        for v in iterlst:
            yield self._mirrors[v]

    def locate(self):
        """When invoked, this populates the MirrorDetector object with
                URLs that name dynamically discovered content mirrors."""

        # Clear the list of mirrors.  It will be repopulated later.
        self._mirrors = []

        if not "pybonjour" in globals():
            return

        timedout = False
        tval = self.__timeout

        def browse_cb(sd_hdl, flags, interface_idx, error_code, service_name,
                      regtype, reply_domain):

            if error_code != pybonjour.kDNSServiceErr_NoError:
                return

            if not (flags & pybonjour.kDNSServiceFlagsAdd):
                return

            self._resolve_server(interface_idx, error_code, service_name,
                                 regtype, reply_domain)

        try:
            sd_hdl = pybonjour.DNSServiceBrowse(regtype=self.__service,
                                                callBack=browse_cb)
        except pybonjour.BonjourError, e:
            errstr = "mDNS Service Browse Failed: %s\n" % e[0][1]
            raise tx.mDNSException(errstr)

        try:
            while not timedout:
                avail = select.select([sd_hdl], [], [], tval)
                if sd_hdl in avail[0]:
                    pybonjour.DNSServiceProcessResult(sd_hdl)
                    tval = 0
                else:
                    timedout = True
        except select.error, e:
            errstr = "Select failed: %s\n" % e[1]
            raise tx.mDNSException(errstr)
コード例 #8
0
            raise tx.mDNSException(errstr)

        try:
            while not timedout:
                avail = select.select([sd_hdl], [], [], tval)
                if sd_hdl in avail[0]:
                    pybonjour.DNSServiceProcessResult(sd_hdl)
                    tval = 0
                else:
                    timedout = True
        except select.error, e:
            errstr = "Select failed: %s\n" % e[1]
            raise tx.mDNSException(errstr)
        except pybonjour.BonjourError, e:
            errstr = "mDNS Process Result failed: %s\n" % e[0][1]
            raise tx.mDNSException(errstr)
        finally:
            sd_hdl.close()

    def _resolve_server(self, if_idx, ec, service_name, regtype, reply_domain):
        """Invoked to resolve mDNS information about a service that
                was discovered by a Browse call."""

        timedout = False
        tval = self.__timeout

        def resolve_cb(sd_hdl, flags, interface_idx, error_code, full_name,
                       host_target, port, txt_record):

            if error_code != pybonjour.kDNSServiceErr_NoError:
                return
コード例 #9
0
ファイル: mdetect.py プロジェクト: aszeszo/test
            raise tx.mDNSException(errstr)

        try:
            while not timedout:
                avail = select.select([sd_hdl], [], [], tval)
                if sd_hdl in avail[0]:
                    pybonjour.DNSServiceProcessResult(sd_hdl)
                    tval = 0
                else:
                    timedout = True
        except select.error, e:
            errstr = "Select failed: %s\n" % e[1]
            raise tx.mDNSException(errstr)
        except pybonjour.BonjourError, e:
            errstr = "mDNS Process Result failed: %s\n" % e[0][1]
            raise tx.mDNSException(errstr)
        finally:
            sd_hdl.close()

    def _resolve_server(self, if_idx, ec, service_name, regtype, reply_domain):
        """Invoked to resolve mDNS information about a service that
                was discovered by a Browse call."""

        timedout = False
        tval = self.__timeout

        def resolve_cb(sd_hdl, flags, interface_idx, error_code, full_name, host_target, port, txt_record):

            if error_code != pybonjour.kDNSServiceErr_NoError:
                return