def handleWork(self, work, headers, metaData, pushed=False):
        if work is None or headers is None:
            return;
        
        rollntime = headers.getRawHeaders('X-Roll-Ntime')
        if rollntime:
            rollntime = rollntime[0]
        
        if not self.saidConnected:
            self.saidConnected = True
            self.runCallback('connect')
            self.useAskrate('askrate')
        
        if 'block' in work:
            try:
                block = int(work['block'])
            except (TypeError, ValueError):
                pass
            else:
                if self.block != block:
                    self.block = block
                    self.runCallback('block', block)
        
        aw = AssignedWork()
        aw.data = work['data'].decode('hex')[:80]
        aw.target = work['target'].decode('hex')
        aw.mask = work.get('mask', 32)

        aw.rollntime = rollntime
        if metaData is not None:
            aw.requestDuration = metaData.get('duration')
            aw.receivedAt = metaData.get('receivedAt')

        if pushed:
            self.runCallback('push', aw)
        self.runCallback('work', aw)