Beispiel #1
0
    def __init__(self, ip_address=None, port=0, verbose=False):
        super(InternalTftp, self).__init__()
        self.daemon = True

        self.tftp_dir = temp_dir()
        self.verbose = verbose

        self.server = TftpServer(tftproot=self.tftp_dir)
        self.ip_address = ip_address
        self.port = port
        self.start()

        # Get the port we actually hosted on
        if port == 0:
            deadline = datetime.now() + timedelta(seconds=10)
            while datetime.now() < deadline:
                try:
                    self.port = self.server.sock.getsockname()[1]
                    break
                except (AttributeError, socket.error):
                    pass
            else:
                # don't catch the error on our last attempt
                self.port = self.server.sock.getsockname()[1]
Beispiel #2
0
    def __init__(self, ip_address=None, port=0, verbose=False):
        super(InternalTftp, self).__init__()
        self.daemon = True

        self.tftp_dir = temp_dir()
        self.verbose = verbose

        self.server = TftpServer(tftproot=self.tftp_dir)
        self.ip_address = ip_address
        self.port = port
        self.start()

        # Get the port we actually hosted on
        if port == 0:
            deadline = datetime.now() + timedelta(seconds=10)
            while datetime.now() < deadline:
                try:
                    self.port = self.server.sock.getsockname()[1]
                    break
                except (AttributeError, socket.error):
                    pass
            else:
                # don't catch the error on our last attempt
                self.port = self.server.sock.getsockname()[1]
Beispiel #3
0
    def __init__(self, filename=None):
        """Default constructor for the FirmwarePackage class."""
        self.images = []
        self.version = None
        self.config = None
        self.required_socman_version = None
        self.work_dir = temp_dir()

        if filename:
            # Extract files and read config
            try:
                tarfile.open(filename, "r").extractall(self.work_dir)
            except (IOError, tarfile.ReadError):
                raise ValueError("%s is not a valid tar.gz file"
                        % os.path.basename(filename))
            config = ConfigParser.SafeConfigParser()

            if len(config.read(self.work_dir + "/MANIFEST")) == 0:
                raise ValueError("%s is not a valid firmware package"
                        % os.path.basename(filename))

            if "package" in config.sections():
                required_cxmanage_version = config.get(
                    "package", "required_cxmanage_version"
                )
                if (pkg_resources.parse_version(cxmanage_api.__version__) <
                        pkg_resources.parse_version(required_cxmanage_version)):
                    # @todo: CxmanageVersionError?
                    raise ValueError(
                        "%s requires cxmanage version %s or later."
                        % (filename, required_cxmanage_version)
                    )

                if config.has_option("package", "required_socman_version"):
                    self.required_socman_version = config.get("package",
                            "required_socman_version")
                if config.has_option("package", "firmware_version"):
                    self.version = config.get("package", "firmware_version")
                if config.has_option("package", "firmware_config"):
                    self.config = config.get("package", "firmware_config")

            # Add all images from package
            image_sections = [x for x in config.sections() if x != "package"]
            for section in image_sections:
                filename = "%s/%s" % (self.work_dir, section)
                image_type = config.get(section, "type").upper()
                simg = None
                daddr = None
                skip_crc32 = False
                version = None

                # Read image options from config
                if config.has_option(section, "simg"):
                    simg = config.getboolean(section, "simg")
                if config.has_option(section, "daddr"):
                    daddr = int(config.get(section, "daddr"), 16)
                if config.has_option(section, "skip_crc32"):
                    skip_crc32 = config.getboolean(section, "skip_crc32")
                if config.has_option(section, "versionstr"):
                    version = config.get(section, "versionstr")

                self.images.append(Image(filename, image_type, simg, daddr,
                        skip_crc32, version))