示例#1
0
def echo(ver_msg):
    """
    Process valid node msg/queues, ie, msg must contain a valid node ID
    and version (where "valid" version is >= minimum baseline version).
    Old format conatins only the node ID string, new format is JSON msg
    with node ID and `fpnd` version string.
    :param ver_msg: node ID or json
    :return: parsed msg if version is valid, else UPGRADE msg
    """
    msg = parse_version_msg(ver_msg)
    min_ver = '0.9.6'

    if msg != []:
        if valid_announce_msg(msg[0]):
            logger.debug('Got valid announce msg: {}'.format(msg))
            clean_stale_cfgs(msg[0], cfg_q)
            node_data = lookup_node_id(msg[0], tmp_q)
            if node_data:
                logger.info('Got valid announce msg from host {} (node {})'.format(node_data[msg[0]], msg))
            if valid_version(min_ver, msg[1]):
                handle_announce_msg(node_q, reg_q, wait_q, msg[0])
                reply = make_version_msg(msg[0])
                logger.info('Got valid node version: {}'.format(msg))
            else:
                reply = make_version_msg(msg[0], 'UPGRADE_REQUIRED')
                logger.error('Invalid version from host {} is: {} < {}'.format(node_data[msg[0]], msg, min_ver))
            return reply
        else:
            node_data = lookup_node_id(msg, tmp_q)
            if node_data:
                logger.warning('Bad announce msg from host {} (node {})'.format(node_data[msg[0]], msg))
            else:
                logger.warning('Bad announce msg: {}'.format(msg))
    else:
        logger.error('Could not parse version msg: {}'.format(msg))
示例#2
0
    def test_handle_msgs(self):
        self.assertEqual(list(self.node_q), [])
        self.node_q.append(self.node1)
        self.node_q.append(self.node2)
        self.node_q.append(self.node3)
        self.wait_q.append(self.node3)

        self.assertEqual(list(self.node_q), [self.node1, self.node2, self.node3])
        self.assertEqual(list(self.reg_q), [])
        self.assertEqual(list(self.wait_q), [self.node3])

        handle_announce_msg(self.node_q, self.reg_q, self.wait_q, self.node1)
        self.assertEqual(list(self.node_q), [self.node1, self.node2, self.node3])
        self.assertEqual(list(self.reg_q), [self.node1])
        self.assertEqual(list(self.wait_q), [self.node3])

        handle_announce_msg(self.node_q, self.reg_q, self.wait_q, self.node2)
        self.assertEqual(list(self.node_q), [self.node1, self.node2, self.node3])
        self.assertEqual(list(self.reg_q), [self.node1, self.node2])
        self.assertEqual(list(self.wait_q), [self.node3])

        # we now allow duplicate IDs in the reg queue
        handle_announce_msg(self.node_q, self.reg_q, self.wait_q, self.node3)
        self.assertIn(self.node3, list(self.reg_q))
        self.assertEqual(list(self.wait_q), [self.node3])
示例#3
0
def echo(msg):
    """
    Process valid node msg/queues, ie, msg must be a valid node ID.
    :param str node ID: zerotier node identity
    :return: str node ID
    """
    if valid_announce_msg(msg):
        logger.debug('Got valid announce msg: {}'.format(msg))
        clean_stale_cfgs(msg, cfg_q)
        handle_announce_msg(node_q, reg_q, wait_q, msg)
        node_data = lookup_node_id(msg, tmp_q)
        if node_data:
            logger.info('Got valid announce msg from host {} (node {})'.format(
                node_data[msg], msg))
        return msg
    else:
        node_data = lookup_node_id(msg, tmp_q)
        if node_data:
            logger.info('Bad announce msg from host {} (node {})'.format(
                node_data[msg], msg))
        else:
            logger.warning('Bad announce msg: {}'.format(msg))