Example #1
0
    def handleDirectOutput(self):
        logger.info("direct output")
        bytes = self.tipi_io.receive()
        unit = bytes[0]
        blocks = bytes[1]
        filename = str(self.tipi_io.receive(), 'latin1').strip()
        bytes = self.tipi_io.receive()
        startblock = bytes[1] + (bytes[0] << 8)
        finfo = bytes[2:]

        logger.info("unit: %d, blocks: %d, filename: %s, startblock %d", unit,
                    blocks, filename, startblock)

        localfilename = self.getLocalName(unit, filename)
        if localfilename is None:
            logger.info("passing request to next device")
            self.tipi_io.send([EDVNAME])
            return True
        if os.path.exists(localfilename) and os.path.isdir(localfilename):
            logger.info("folder with same name exists")
            self.tipi_io.send([EDEVERR])
            return True

        # check protect flag
        if os.path.exists(localfilename) and ti_files.isTiFile(localfilename):
            fh = open(localfilename, "rb")
            header = bytearray(fh.read())[:128]
            # if ti_files.isProtected(header):
            #     self.tipi_io.send([EWPROT])
            #     return True

        startbyte = 128 + (startblock * 256)
        endbyte = startbyte + (blocks * 256)

        if os.path.exists(localfilename) and blocks != 0:
            fbytes = self.getFileBytes(localfilename)
        else:
            raw = bytearray(endbyte - 128)
            header = ti_files.createHeader(0, filename, raw)
            logger.debug("header len %d, raw len %d", len(header), len(raw))
            fbytes = header + raw
            logger.debug("created file bytes: %d", len(fbytes))

        if blocks == 0:
            fbytes[10:16] = finfo[0:6]
            self.saveFile(localfilename, fbytes)

        logger.info("Accepting request")
        self.tipi_io.send([SUCCESS])

        if blocks == 0:
            return True

        blockdata = self.tipi_io.receive()
        fbytes[startbyte:endbyte] = blockdata
        self.saveFile(localfilename, fbytes)

        self.tipi_io.send([SUCCESS])
        return True
Example #2
0
    def create(device_name, unix_file_name, body):
        nameParts = str(device_name).split('.')
        tiname = nameParts[len(nameParts) - 1]

        header = ti_files.createHeader(ti_files.PROGRAM, tiname, body)
        fdata = bytearray(256 * (len(body) / 256 + 1) + 128)
        fdata[0:127] = header
        fdata[128:] = body
        return ProgramImageFile(fdata)
Example #3
0
 def create(devname, localPath, pab):
     nameParts = str(devname).split('.')
     tiname = nameParts[len(nameParts) - 1]
     recLen = recordLength(pab)
     if recLen == 0:
         recLen = 80
     flags = ti_files.VARIABLE
     if dataType(pab) == INTERNAL:
         flags |= ti_files.INTERNAL
     header = ti_files.createHeader(flags, tiname, bytearray(0))
     ti_files.setRecordLength(header, recLen)
     ti_files.setRecordsPerSector(header, int(256 / recLen))
     return VariableRecordFile(header, pab)
Example #4
0
 def create(devname, localpath, pab):
     nameParts = str(devname).split('.')
     tiname = nameParts[len(nameParts) - 1]
     recLen = recordLength(pab)
     if recLen == 0:
         recLen = 80
     # FIXED is default (or flag clear/unset)
     flags = 0
     if dataType(pab) == INTERNAL:
         flags |= ti_files.INTERNAL
     header = ti_files.createHeader(flags, tiname, bytearray(0))
     ti_files.setRecordLength(header, recLen)
     ti_files.setRecordsPerSector(header, int(256 / recLen))
     return FixedRecordFile(header, pab)