예제 #1
0
 def __init__(self, sender_id, nodes2=None, nodes=None):
     if nodes is not None:
         raise MsgError, 'not implemented'
     if nodes2 is not None:
         self._bencoded_msg = BENCODED_MSG_TEMPLATES['og_find_node_r']
         self._values = [sender_id.bin_id,
                         mt.compact_nodes2(nodes2), '']  #TID
     else:
         raise MsgError, 'must have nodes OR nodes2'
예제 #2
0
 def __init__(self, sender_id, nodes2=None, nodes=None):
     if nodes is not None:
         raise MsgError, 'not implemented'
     if nodes2 is not None:
         self._bencoded_msg = BENCODED_MSG_TEMPLATES['og_find_node_r']
         self._values = [sender_id.bin_id,
                         mt.compact_nodes2(nodes2),
                         ''] #TID
     else:
         raise MsgError, 'must have nodes OR nodes2'
예제 #3
0
    def test_tools_error(self):
        c_nodes = mt.compact_nodes(tc.NODES)
        # Compact nodes is one byte short
#        assert_raises(m.MsgError, mt.uncompact_nodes, c_nodes[:-1])
        # IP size is weird
#        assert_raises(m.MsgError, mt.bin_to_ip, '123')
        # Port is 0 (
        eq_(mt.uncompact_nodes(c_nodes), tc.NODES)
        n = tc.NODES[0]
        tc.NODES[0] = node.Node((n.addr[0], 0), n.id)
        c_nodes = mt.compact_nodes(tc.NODES)
        eq_(mt.uncompact_nodes(c_nodes), tc.NODES[1:])
        c_nodes2 = mt.compact_nodes2(tc.NODES)
        eq_(mt.uncompact_nodes2(c_nodes2), tc.NODES[1:])
        tc.NODES[0] = n
예제 #4
0
 def __init__(self, sender_id, token,
              nodes2=None, peers=None):
     if peers:
         self._bencoded_msg = BENCODED_MSG_TEMPLATES['og_get_peers_r_values']
         self._values = [sender_id.bin_id,
                         token,
                         mt.compact_peers(peers),
                         ''] #TID
         
     elif nodes2:
         self._bencoded_msg = BENCODED_MSG_TEMPLATES['og_get_peers_r_nodes']
         self._values = [sender_id.bin_id,
                         mt.compact_nodes2(nodes2),
                         token,
                         ''] #TID
     else:
         raise MsgError, 'must have nodes OR peers'
예제 #5
0
    def __init__(self, sender_id, token, nodes2=None, peers=None):
        if peers:
            self._bencoded_msg = BENCODED_MSG_TEMPLATES[
                'og_get_peers_r_values']
            self._values = [
                sender_id.bin_id, token,
                mt.compact_peers(peers), ''
            ]  #TID

        elif nodes2:
            self._bencoded_msg = BENCODED_MSG_TEMPLATES['og_get_peers_r_nodes']
            self._values = [
                sender_id.bin_id,
                mt.compact_nodes2(nodes2), token, ''
            ]  #TID
        else:
            raise MsgError, 'must have nodes OR peers'
예제 #6
0
    def test_tools_error(self):
        c_nodes = mt.compact_nodes(tc.NODES)
        # Compact nodes is one byte short
        eq_(mt.uncompact_nodes(c_nodes[:-1]), [])
        # Port is 0 (
        eq_(mt.uncompact_nodes(c_nodes), tc.NODES)

        nodes = [n for n in tc.NODES]
        # One address has port ZERO
        nodes[0] = node.Node((nodes[0].addr[0], 0), nodes[0].id)
        peers = [n.addr for n in nodes]

        c_nodes = mt.compact_nodes(nodes)
        eq_(mt.uncompact_nodes(c_nodes), nodes[1:])
        c_nodes2 = mt.compact_nodes2(nodes)
        eq_(mt.uncompact_nodes2(c_nodes2), nodes[1:])
        c_peers = mt.compact_peers(peers)
        eq_(mt.uncompact_peers(c_peers), peers[1:])
예제 #7
0
    def test_tools_error(self):
        c_nodes = mt.compact_nodes(tc.NODES)
        # Compact nodes is one byte short
        eq_(mt.uncompact_nodes(c_nodes[:-1]), [])
        # Port is 0 (
        eq_(mt.uncompact_nodes(c_nodes), tc.NODES)

        nodes = [n for n in tc.NODES]
        # One address has port ZERO
        nodes[0] = node.Node((nodes[0].addr[0], 0), nodes[0].id)
        peers = [n.addr for n in nodes]

        c_nodes = mt.compact_nodes(nodes)
        eq_(mt.uncompact_nodes(c_nodes), nodes[1:])
        c_nodes2 = mt.compact_nodes2(nodes)
        eq_(mt.uncompact_nodes2(c_nodes2), nodes[1:])
        c_peers = mt.compact_peers(peers)
        eq_(mt.uncompact_peers(c_peers), peers[1:])
예제 #8
0
    def test_sanitize(self):
        self.ping_r.sanitize_response(m.PING)

        del self.fn2_r._msg_dict[m.RESPONSE][m.NODES2]
        # No NODES and no NODES2
        assert_raises(m.MsgError, self.fn2_r.sanitize_response, m.FIND_NODE)
        self.fn2_r._msg_dict[m.RESPONSE][m.NODES] = \
            mt.compact_nodes(tc.NODES)
        # Just NODES
        self.fn2_r.sanitize_response(m.FIND_NODE)
        self.fn2_r._msg_dict[m.RESPONSE][m.NODES2] = \
            mt.compact_nodes2(tc.NODES)
        # Both NODES and NODES2
        self.fn2_r.sanitize_response(m.FIND_NODE)

        # Both NODES and PEERS in response
        self.gp_r._msg_dict[m.RESPONSE][m.NODES] = \
            mt.compact_nodes(tc.NODES)
        self.gp_r.sanitize_response(m.GET_PEERS)
        # No NODES and no PEERS
        del self.gp_r._msg_dict[m.RESPONSE][m.NODES]
        del self.gp_r._msg_dict[m.RESPONSE][m.VALUES]
        assert_raises(m.MsgError, self.gp_r.sanitize_response, m.GET_PEERS)
예제 #9
0
    def _test_sanitize(self):
        self.ping_r.sanitize_response(m.PING)

        del self.fn2_r._msg_dict[m.RESPONSE][m.NODES2]
        # No NODES and no NODES2
        assert_raises(m.MsgError, self.fn2_r.sanitize_response, m.FIND_NODE)
        self.fn2_r._msg_dict[m.RESPONSE][m.NODES] = \
            mt.compact_nodes(tc.NODES)
        # Just NODES
        self.fn2_r.sanitize_response(m.FIND_NODE)
        self.fn2_r._msg_dict[m.RESPONSE][m.NODES2] = \
            mt.compact_nodes2(tc.NODES)
        # Both NODES and NODES2
        self.fn2_r.sanitize_response(m.FIND_NODE)

        # Both NODES and PEERS in response
        self.gp_r._msg_dict[m.RESPONSE][m.NODES] = \
            mt.compact_nodes(tc.NODES)
        self.gp_r.sanitize_response(m.GET_PEERS)
        # No NODES and no PEERS
        del self.gp_r._msg_dict[m.RESPONSE][m.NODES]
        del self.gp_r._msg_dict[m.RESPONSE][m.VALUES]
        assert_raises(m.MsgError, self.gp_r.sanitize_response, m.GET_PEERS)
예제 #10
0
    def test_tools_error(self):
        c_nodes = mt.compact_nodes(tc.NODES)
        # Compact nodes is one byte short
        eq_(mt.uncompact_nodes(c_nodes[:-1]), [])
        # Port is 0 (
        eq_(mt.uncompact_nodes(c_nodes), tc.NODES)

        nodes = [n for n in tc.NODES]
        # One address has port ZERO
        nodes[0] = node.Node((nodes[0].addr[0], 0), nodes[0].id)
        peers = [n.addr for n in nodes]

        c_nodes = mt.compact_nodes(nodes)
        eq_(mt.uncompact_nodes(c_nodes), nodes[1:])
        c_nodes2 = mt.compact_nodes2(nodes)
        eq_(mt.uncompact_nodes2(c_nodes2), nodes[1:])
        c_peers = mt.compact_peers(peers)
        eq_(mt.uncompact_peers(c_peers), peers[1:])

        addr = ('1.2.3.4', 1234)
        c_addr = mt.compact_addr(addr)
        assert_raises(mt.AddrError, mt.uncompact_addr, c_addr[:-1])
        assert_raises(mt.AddrError, mt.uncompact_addr, c_addr[1:])
        assert_raises(mt.AddrError, mt.uncompact_addr, c_addr+'X')
예제 #11
0
    def test_tools_error(self):
        c_nodes = mt.compact_nodes(tc.NODES)
        # Compact nodes is one byte short
        eq_(mt.uncompact_nodes(c_nodes[:-1]), [])
        # Port is 0 (
        eq_(mt.uncompact_nodes(c_nodes), tc.NODES)

        nodes = [n for n in tc.NODES]
        # One address has port ZERO
        nodes[0] = node.Node((nodes[0].addr[0], 0), nodes[0].id)
        peers = [n.addr for n in nodes]

        c_nodes = mt.compact_nodes(nodes)
        eq_(mt.uncompact_nodes(c_nodes), nodes[1:])
        c_nodes2 = mt.compact_nodes2(nodes)
        eq_(mt.uncompact_nodes2(c_nodes2), nodes[1:])
        c_peers = mt.compact_peers(peers)
        eq_(mt.uncompact_peers(c_peers), peers[1:])

        addr = ('1.2.3.4', 1234)
        c_addr = mt.compact_addr(addr)
        assert_raises(mt.AddrError, mt.uncompact_addr, c_addr[:-1])
        assert_raises(mt.AddrError, mt.uncompact_addr, c_addr[1:])
        assert_raises(mt.AddrError, mt.uncompact_addr, c_addr + 'X')
예제 #12
0
 def test_nodes2(self):
     response = m.OutgoingGetPeersResponse(tc.SERVER_NODE,
                                           tc.CLIENT_ID, peers=tc.PEERS)
     response._dict[m.RESPONSE][m.NODES2] = mt.compact_nodes2(tc.NODES)
     bencoded = response.stamp(tc.TID)
     m.IncomingMsg(Datagram(bencoded, tc.CLIENT_ADDR))
예제 #13
0
 def test_nodes2(self):
     response = clients_msg_f.outgoing_get_peers_response(tc.SERVER_NODE,
                                                          peers=tc.PEERS)
     response._dict[m.RESPONSE][m.NODES2] = mt.compact_nodes2(tc.NODES)
     bencoded = response.stamp(tc.TID)
     servers_msg_f.incoming_msg(Datagram(bencoded, tc.CLIENT_ADDR))
예제 #14
0
 def test_nodes2(self):
     response = m.OutgoingGetPeersResponse(tc.CLIENT_ID, peers=tc.PEERS)
     response._dict[m.RESPONSE][m.NODES2] = mt.compact_nodes2(tc.NODES)
     bencoded = response.encode(tc.TID)
     m.IncomingMsg(bencoded, tc.CLIENT_ADDR)
예제 #15
0
 def test_nodes2(self):
     response = clients_msg_f.outgoing_get_peers_response(tc.SERVER_NODE,
                                                          peers=tc.PEERS)
     response._dict[m.RESPONSE][m.NODES2] = mt.compact_nodes2(tc.NODES)
     bencoded = response.stamp(tc.TID)
     servers_msg_f.incoming_msg(Datagram(bencoded, tc.CLIENT_ADDR))