diff --git a/libp2p/peer/peerinfo.py b/libp2p/peer/peerinfo.py index 2e7edb9..e9524ba 100644 --- a/libp2p/peer/peerinfo.py +++ b/libp2p/peer/peerinfo.py @@ -1,6 +1,6 @@ import multiaddr -import multiaddr.util +from .utils import join, split from .id import id_b58_decode from .peerdata import PeerData @@ -16,7 +16,7 @@ def info_from_p2p_addr(addr): if not addr: raise InvalidAddrError() - parts = multiaddr.util.split(addr) + parts = split(addr) if not parts: raise InvalidAddrError() @@ -30,7 +30,7 @@ def info_from_p2p_addr(addr): # we might have received just an / p2p part, which means there's no addr. if len(parts) > 1: - addr = multiaddr.util.join(parts[:-1]) + addr = join(parts[:-1]) peer_data = PeerData() peer_data.addrs = [addr] diff --git a/libp2p/peer/utils.py b/libp2p/peer/utils.py new file mode 100644 index 0000000..c15b94e --- /dev/null +++ b/libp2p/peer/utils.py @@ -0,0 +1,34 @@ +from multiaddr import Multiaddr +from multiaddr.protocols import protocol_with_code, read_varint_code + +def size_for_addr(proto, buf): + if proto.size >= 0: + return proto.size // 8 + size, num_bytes_read = read_varint_code(buf) + return size + num_bytes_read + +def bytes_split(buf): + ret = [] + while buf: + code, num_bytes_read = read_varint_code(buf) + proto = protocol_with_code(code) + size = size_for_addr(proto, buf[num_bytes_read:]) + length = size + num_bytes_read + ret.append(buf[:length]) + buf = buf[length:] + return ret + +def split(_multiaddr): + """Return the sub-address portions of a multiaddr""" + addrs = [] + splitted_addrs = bytes_split(_multiaddr.to_bytes()) + for addr in splitted_addrs: + addrs.append(Multiaddr(addr)) + return addrs + + +def join(multiaddrs): + addr_list = [] + for addr in multiaddrs: + addr_list.append(addr.to_bytes()) + return Multiaddr(b''.join(addr_list)) diff --git a/libp2p/transport/tcp/tcp.py b/libp2p/transport/tcp/tcp.py index f6167ce..396bba0 100644 --- a/libp2p/transport/tcp/tcp.py +++ b/libp2p/transport/tcp/tcp.py @@ -28,7 +28,7 @@ class TCP(ITransport): :return: return True if successful """ _multiaddr = multiaddr - _multiaddr = _multiaddr.decapsulate('/p2p') + # _multiaddr = _multiaddr.decapsulate('/p2p') coroutine = asyncio.start_server(self.handler, _multiaddr.value_for_protocol('ip4'),