'We\'ve received a half block, either because we sent a SIGNED message to some one or we are crawling
:param messages The half block messages'

def received_half_block(self, messages):

    self.logger.debug('Received    %d    half    block    messages.', len(messages))
    for message in messages:
        blk = message.payload.block
        validation = blk.validate(self.persistence)
        self.logger.debug('Block    validation    result    %s,    %s,    (%s)', validation[0], validation[1], blk)
        if (validation[0] == ValidationResult.invalid):
            continue
        elif (not self.persistence.contains(blk)):
            self.persistence.add_block(blk)
        else:
            self.logger.debug('Received    already    known    block    (%s)', blk)
        block_id = ('%s.%s' % (blk.public_key.encode('hex'), blk.sequence_number))
        if (block_id in self.expected_sig_requests):
            self.expected_sig_requests[block_id].callback(block_id)
            del self.expected_sig_requests[block_id]
        self.received_block_ids.add(block_id)
        if ((blk.link_sequence_number != UNKNOWN_SEQ) or (blk.link_public_key != self.my_member.public_key) or (self.persistence.get_linked(blk) is not None)):
            continue
        self.logger.info('Received    request    block    addressed    to    us    (%s)', blk)
        if (not self.should_sign(message)):
            continue
        crawl_task = ('crawl_%s' % blk.hash)
        if ((validation[0] == ValidationResult.partial_previous) or (validation[0] == ValidationResult.partial) or (validation[0] == ValidationResult.no_info)):
            self.logger.info('Request    block    could    not    be    validated    sufficiently,    crawling    requester.    %s', validation)
            if self.is_pending_task_active(crawl_task):
                continue
            self.send_crawl_request(message.candidate, blk.public_key, max(GENESIS_SEQ, (blk.sequence_number - 5)))
            self.register_task(crawl_task, reactor.callLater(5.0, self.received_half_block, [message]))
        else:
            self.sign_block(message.candidate, linked=blk)
            if self.is_pending_task_active(crawl_task):
                self.cancel_pending_task(crawl_task)
                continue
