Example #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)
    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)
Example #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
 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_()
 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_()
 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_()
Example #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
Example #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)
Example #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")
Example #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 + "^")
    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_()
Example #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)
    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)
Example #15
0
 def exit(self):
     utils.debug_print("Scan thread exiting...", utils.MSG)
     self.exiting = True
 def error(self):
     utils.debug_print("Scan thread terminated unexpectedly!", utils.ERR)
 def cancel(self):
     if self.confirmClose():
         utils.debug_print("Cancelled before submission!", utils.ERR)
         quit()
     else:
         pass
Example #18
0
 def run(self):
     utils.debug_print("Starting scan thread...", utils.MSG)
     self.results = self.walk(self.dirs)
Example #19
0
 def __del__(self):
     self.exiting = True
     utils.debug_print("Scan thread waiting to terminate...", utils.MSG, False)
     self.wait()
     
     
Example #20
0
 def walkError(self, err):
     utils.debug_print(err.strerror + " on " + err.filename, utils.ERR)
     pass