Пример #1
0
    def compress_packet(self):
        def byte_padding():
            padding = 8 - (len(self.bit_array) & 0x7)
            return 0 if padding == 8 else padding

        msb = self.bit_array[0]
        array_len = len(self.bit_array)
        sign_len = 1
        assert sign_len < array_len
        while sign_len < array_len:
            if msb != self.bit_array[sign_len]:
                break
            sign_len += 1

        self.stats["nbits"] += len(self.bit_array) + byte_padding()
        debug_print("  Payload %3d %s" % (len(self.bit_array), self.bit_array))
        self.bit_array = self.bit_array[sign_len - 1:]
        compressed_bits = len(self.bit_array)

        # Make sure it's a multiple of 8 bits
        self.bit_array = msb * byte_padding() + self.bit_array
        debug_print("     Sent %3d %s (Compressed %s-bits)" %
                    (len(self.bit_array), self.bit_array, compressed_bits))

        self.stats["nbits_compressed"] += len(self.bit_array)
        assert len(self.bit_array) % 8 == 0, len(self.bit_array)
Пример #2
0
    def __init__(self, owner, results, token):        
        QtGui.QMainWindow.__init__(self)
        self.ui = ui_finished.Ui_finishedDialog()
        self.ui.setupUi(self)
        self.ui.progressBar.hide()
        
        self.done = False
        self.submitter = submit.ResultSubmitter()
        self.token = token;
        

        # generate a temporary file and store the results there
        _, tmpfile = tempfile.mkstemp(suffix='.gz')
        tf = gzip.open(tmpfile, 'wb')
        tf.write(json.dumps(results, sort_keys=True, indent=4))
        tf.close()

        # store the tempfile path
        self.tmpfile = tmpfile
        
        utils.debug_print("Results saved to:" + tmpfile, utils.SUCC)
        
        self.ui.reviewPathLabel.setText('<b>' + tmpfile + '</b>')
        
        # signal/slot connections
        self.connect(self.ui.btnCancel, SIGNAL('clicked()'), self.cancel)
        self.connect(self.ui.btnNext, SIGNAL('clicked()'), self.next)
Пример #3
0
    def get_bits(self, field, nbits, is_hex=False):
        if self.output is None:
            print("Error: packet output has not been set")
            exit(1)

        if nbits == 0:
            return None
        # Check whether we need to decompress more bits (by sign-extension) to allow the
        # required field to be read
        if nbits > self.bit:
            self.extend_msb(nbits - self.bit)

        if utils.debug:
            msg = "get_bits(%d) = b%s" % (nbits,
                                          self.bits[self.bit - nbits:self.bit])
            if field is not None:
                msg += " -> %s" % field
            debug_print("b%s   %s" % (self.bits, msg))
            debug_print(" " * self.bit + "^")

        value = int(self.bits[self.bit - nbits:self.bit], 2)
        self.bit -= nbits
        self.bits_used += nbits
        if is_hex:
            self.output[field] = utils.as_hex(value, nbits)
        else:
            self.output[field] = value
        return value
Пример #4
0
 def cancel(self):
     if self.confirmClose():
         utils.debug_print("Cancelled scanning!", utils.ERR)
         self.scanThread.exit()
         quit()
     else:
         pass
    def next(self):
        # check if we have actually selected some folders
        dirs = self.dir_model.getCheckList()
        if dirs == []:
            reply = QtGui.QMessageBox.warning(self, 'No directories selected',
            "You have not selected any directories. Would you like to attempt to work " + 
            "out your home directory automatically?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
            if reply == QtGui.QMessageBox.Yes:
                homeDirPath = os.getenv("HOME","")
                if homeDirPath != "":
                    self.dir_model.addCheck(homeDirPath)
                else:
                    utils.debug_print("Could not work out the home directory", utils.ERR)
                    QtGui.QMessageBox.critical(self, 'Failed to detect home directory', 
                       "Failed to detect your home directory automatically. Please go back and select it manually.", QtGui.QMessageBox.Ok)
                    return
            else:
                return

        # run the scan
        utils.debug_print("Folders selected:", utils.SUCC, False)
        print dirs
        self.close()
        d = surveyScanningDialog(self.app, dirs, self.token)
        d.setAttribute(Qt.WA_DeleteOnClose)
        d.exec_()
Пример #6
0
 def next(self):
     utils.debug_print("Welcome screen confirmed", utils.SUCC)
     self.done = True
     #d = surveyFolderSelectionDialog(self.app)
     d = surveyTokenEntryDialog(self.app)
     d.setAttribute(QtCore.Qt.WA_DeleteOnClose)    
     self.close()
     d.exec_()
Пример #7
0
 def finishedScanning(self):
     utils.debug_print("Finished scanning", utils.SUCC)
     
     # show results screen
     self.done = True
     self.close()
     d = surveyFinishedDialog(self.app, self.scanThread.results, self.token)
     d.setAttribute(Qt.WA_DeleteOnClose)
     d.exec_()
Пример #8
0
    def walk(self, scanDirs):
        totalSize = 0
        numFiles = 0
        numDirs = 0
        id = 0
        
        for dir in scanDirs:
            for root, dirs, files in os.walk(dir, onerror=self.walkError):
                try:
                    if self.exiting:
                        return
                    #utils.debug_print("DIR: " + root)
                    
                    numFiles += len(files)
                    numDirs += 1
                    #self.emit(SIGNAL("scanned(int, int)"), numFiles, numDirs)
    
                    # ignore filer snapshot dirs at the CL
                    if '.snapshot' in dirs:
                        dirs.remove('.snapshot')
                        
                    #print sum(getsize(join(root, name)) for name in files),
                    totalSize += sum(getsize(join(root, name)) for name in files)
                    #print "bytes in", len(files), "non-directory files"
                    
                    for f in files:
                        #utils.debug_print("FILE: " + f)
                        # create a dict for this file
                        fp = join(root, f)
                        mime = mimetypes.guess_type(fp, False)
                        statinfo = str(os.stat(fp))
                        fileDict = {'elementID': sha1(fp).hexdigest(), 'size': getsize(fp), 'isDir': False, 'type': mime, 'namehash': sha1(f).hexdigest(), 'statinfo': statinfo, 'parent': sha1(fp).hexdigest() }
                        self.results.append(fileDict)
                        id += 1
    
                    for d in dirs:
                        #utils.debug_print("SUBDIR: " + d)
                        # create a dict for this subdirectory
                        dp = join(root, d)
                        mime = mimetypes.guess_type(dp, False)
                        statinfo = str(os.stat(dp))
                        dirDict = {'elementID': sha1(dp).hexdigest(), 'size': getsize(join(root, d)), 'isDir': True, 'type': mime, 'namehash': sha1(d).hexdigest(), 'statinfo': statinfo, 'parent': sha1(fp).hexdigest() }
                        self.results.append(dirDict)
                        id += 1
                    
                except OSError as e:
                    self.walkError(e)
                else:
                    pass
        utils.debug_print("walked " + str(numFiles) + " files and " + str(numDirs) + 
                          " directories, totalling " + str(totalSize) + " bytes", utils.SUCC)

        # return the list of dicts (this will be MASSIVE)
        #print json.dumps(results, sort_keys=True, indent=4)
        
        return self.results
Пример #9
0
 def check(self, msg=None):
     # Can only check that not more than 7-bits has not been used.
     if self.bit > 7:
         error = "Error: up to %d bits have not been assigned." % self.bit
         if msg is not None:
             error += " [%s]" % msg
         print(error)
         exit(1)
     if msg is not None:
         debug_print("Packet check for %s successful" % msg)
Пример #10
0
    def __init__(self, parent = None):
        '''
        Constructor
        '''
        QThread.__init__(self, parent)
        self.exiting = False

        # set up main result data structure: a list of dicts
        self.results = []
        utils.debug_print("Resetting results dict")
Пример #11
0
    def extend_msb(self, nbits):
        msb = self.bits[0]
        assert nbits > 0
        self.bits = (msb * nbits) + self.bits

        # Adjust current bit being processed as extension made to the start of string
        self.bit += nbits
        if utils.debug:
            debug_print("%s bit pos %d extended msb %d-bits" %
                        (self.bits, self.bit, nbits))
            debug_print(" " * self.bit + "^")
Пример #12
0
    def next(self):
        utils.debug_print("Token entry screen confirmed", utils.SUCC)
        self.done = True
        self.ui.lblPleaseWait.setVisible(True);
        self.ui.lblExamplePic.setVisible(False);
        self.ui.progressBar.setVisible(True);

        self.ui.lblToken.setEnabled(False);
        self.ui.txtToken.setEnabled(False);
        self.ui.btnNext.setEnabled(False);
        self.ui.btnCancel.setEnabled(False);
        
        self.app.processEvents();
        
        d = surveyFolderSelectionDialog(self.app, str(self.ui.txtToken.text()))
        d.setAttribute(QtCore.Qt.WA_DeleteOnClose)    
        self.close()
        d.exec_()
Пример #13
0
 def add_bits(self, field, nbits):
     assert field not in self.fields_added, field
     self.fields_added.append(field)
     value = self.source[field]
     # Allow None values to be ignored to simplify the logic
     if value is not None and nbits != 0:
         debug_print("add_bits: %s=%s nbits=%d" % (field, value, nbits))
         if isinstance(value, str):
             assert field in self.hex_fields, field
             value = int(value, 16)
         format_str = "{0:0%db}" % nbits
         all_bits = format_str.format(value)
         bits = all_bits[-nbits:]  # Take the nbits required
         discard = all_bits[0:-nbits]
         if len(discard) != 0:  # Check we're only discarding sign bits
             assert (
                 bits[0] * len(discard) == discard
             ), "Field %s discards non sign bit data %s" % (field, discard)
         self.bit_array = bits + self.bit_array
     else:
         debug_print("add_bits: field %s IGNORED" % field)
Пример #14
0
    def __init__(self, owner, dirs, token):        
        QtGui.QMainWindow.__init__(self)
        self.ui = ui_scanning.Ui_scanDialog()
        self.ui.setupUi(self)
        self.app = owner
        self.done = False
        self.token = token;
        
        # set up worker thread
        self.scanThread = walker.Walker()
        self.callbacks = 0

        # signal/slot connections
        self.connect(self.scanThread, SIGNAL("finished()"), self.finishedScanning)
        self.connect(self.scanThread, SIGNAL("terminated()"), self.error)
        #self.connect(self.scanThread, SIGNAL(""))
        self.connect(self.ui.btnCancel, SIGNAL('clicked()'), self.cancel)
        self.connect(self.scanThread, SIGNAL("scanned(int, int)"), self.iterate)

        #vpos = d.height() / 2 - (self.height() / 2);
        #if (d.width() > 2*d.height()):
        #    hpos = d.width() / 4 - (self.width() / 2);
        #else:
        #    hpos = d.width() / 2 - (self.width() / 2);
        #self.move(hpos, vpos);
        self.center()
        
        #homeDirPath = os.getenv("HOME","")
        #utils.debug_print("Your home directory is: " + homeDirPath)
        
        if dirs == []:
            utils.debug_print("No directories selected!", utils.ERR)
        
        #for d in dirs:
        #    self.scanThread.scan(d)
        self.scanThread.scan(dirs)
Пример #15
0
 def exit(self):
     utils.debug_print("Scan thread exiting...", utils.MSG)
     self.exiting = True
Пример #16
0
 def error(self):
     utils.debug_print("Scan thread terminated unexpectedly!", utils.ERR)
Пример #17
0
 def cancel(self):
     if self.confirmClose():
         utils.debug_print("Cancelled before submission!", utils.ERR)
         quit()
     else:
         pass
Пример #18
0
 def run(self):
     utils.debug_print("Starting scan thread...", utils.MSG)
     self.results = self.walk(self.dirs)
Пример #19
0
 def __del__(self):
     self.exiting = True
     utils.debug_print("Scan thread waiting to terminate...", utils.MSG, False)
     self.wait()
     
     
Пример #20
0
 def walkError(self, err):
     utils.debug_print(err.strerror + " on " + err.filename, utils.ERR)
     pass