diff --git a/connection/raw_connection.py b/connection/raw_connection.py deleted file mode 100644 index 9c77edb3..00000000 --- a/connection/raw_connection.py +++ /dev/null @@ -1,14 +0,0 @@ -import asyncio -from .raw_connection_interface import IRawConnection - -class RawConnection(IRawConnection): - - def __init__(self, ip, port): - self.conn_ip = ip - self.conn_port = port - self.reader = None - self.writer = None - - async def open_connection(self): - self.reader, self.writer = \ - await asyncio.open_connection(self.conn_ip, self.conn_port) diff --git a/connection/raw_connection_interface.py b/connection/raw_connection_interface.py deleted file mode 100644 index 30f0f32f..00000000 --- a/connection/raw_connection_interface.py +++ /dev/null @@ -1,8 +0,0 @@ -from abc import ABC, abstractmethod - -class IRawConnection(ABC): - - @abstractmethod - async def open_connection(self): - pass - \ No newline at end of file diff --git a/libp2p/libp2p.py b/libp2p/libp2p.py index e69de29b..2c0b1eb9 100644 --- a/libp2p/libp2p.py +++ b/libp2p/libp2p.py @@ -0,0 +1,35 @@ +from .config import Config +from ..peer.peerstore import PeerStore +from ..network.swarm import Swarm +from ..host.basic_host import BasicHost +from ..transport.upgrader import TransportUpgrader + +class Libp2p(object): + + def __init__(self, idOpt, \ + transportOpt = ["/ip4/0.0.0.0/tcp/0"], \ + muxerOpt = ["mplex/6.7.0"], \ + secOpt = ["secio"], \ + peerstore = PeerStore()): + + if idOpt: + self.idOpt = idOpt + else: + # TODO generate RSA public key pair + + self.transportOpt = transportOpt + self.muxerOpt = muxerOpt + self.secOpt = secOpt + self.peerstore = peerstore + + def new_node(self): + + swarm = Swarm(self.id, self.peerstore) + host = BasicHost(swarm) + upgrader = TransportUpgrader(self.secOpt, self.transportOpt) + + # TODO transport upgrade + + # TODO listen on addrs + + # TODO swarm add transports \ No newline at end of file diff --git a/connection/__init__.py b/muxer/mplex/__init__.py similarity index 100% rename from connection/__init__.py rename to muxer/mplex/__init__.py diff --git a/muxer/muxed_connection.py b/muxer/mplex/muxed_connection.py similarity index 100% rename from muxer/muxed_connection.py rename to muxer/mplex/muxed_connection.py diff --git a/muxer/muxed_connection_interface.py b/muxer/mplex/muxed_connection_interface.py similarity index 100% rename from muxer/muxed_connection_interface.py rename to muxer/mplex/muxed_connection_interface.py diff --git a/muxer/muxed_stream.py b/muxer/mplex/muxed_stream.py similarity index 100% rename from muxer/muxed_stream.py rename to muxer/mplex/muxed_stream.py diff --git a/muxer/muxed_stream_interface.py b/muxer/mplex/muxed_stream_interface.py similarity index 100% rename from muxer/muxed_stream_interface.py rename to muxer/mplex/muxed_stream_interface.py diff --git a/muxer/smux_multiplex.py b/muxer/mplex/smux_multiplex.py similarity index 100% rename from muxer/smux_multiplex.py rename to muxer/mplex/smux_multiplex.py diff --git a/stream/__init__.py b/muxer/yamux/__init__.py similarity index 100% rename from stream/__init__.py rename to muxer/yamux/__init__.py diff --git a/network/swarm.py b/network/swarm.py index 5d570e99..231ee460 100644 --- a/network/swarm.py +++ b/network/swarm.py @@ -4,7 +4,7 @@ from ..connection.raw_connection import RawConnection class Swarm(INetwork): - def __init__(self, my_peer_id, peer_store): + def __init__(self, my_peer_id, peerstore): self.my_peer_id = my_peer_id self.peer_store = peer_store self.connections = {} diff --git a/libp2p/config.py b/transport/connection/__init__.py similarity index 100% rename from libp2p/config.py rename to transport/connection/__init__.py diff --git a/transport/connection/raw_connection.py b/transport/connection/raw_connection.py new file mode 100644 index 00000000..e93e19e9 --- /dev/null +++ b/transport/connection/raw_connection.py @@ -0,0 +1,16 @@ +import asyncio +from .raw_connection_interface import IRawConnection + +class RawConnection(IRawConnection): + + def __init__(self, ip, port): + self.conn_ip = ip + self.conn_port = port + self.reader, self.writer = self.open_connection() + + async def open_connection(self): + """ + opens a connection on self.ip and self.port + :return: a raw connection + """ + return await asyncio.open_connection(self.conn_ip, self.conn_port) diff --git a/transport/connection/raw_connection_interface.py b/transport/connection/raw_connection_interface.py new file mode 100644 index 00000000..8c07a956 --- /dev/null +++ b/transport/connection/raw_connection_interface.py @@ -0,0 +1,15 @@ +from abc import ABC, abstractmethod + +class IRawConnection(ABC): + """ + A Raw Connection provides a Reader and a Writer + open_connection should return such a connection + """ + + @abstractmethod + async def open_connection(self): + """ + opens a connection on ip and port + :return: a raw connection + """ + pass diff --git a/network/listener_interface.py b/transport/listener_interface.py similarity index 100% rename from network/listener_interface.py rename to transport/listener_interface.py diff --git a/transport/stream/__init__.py b/transport/stream/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/stream/stream.py b/transport/stream/stream.py similarity index 100% rename from stream/stream.py rename to transport/stream/stream.py diff --git a/stream/stream_interface.py b/transport/stream/stream_interface.py similarity index 100% rename from stream/stream_interface.py rename to transport/stream/stream_interface.py diff --git a/transport/tcp.py b/transport/tcp.py deleted file mode 100644 index d2a06875..00000000 --- a/transport/tcp.py +++ /dev/null @@ -1,54 +0,0 @@ -import asyncio -from .transport_interface import ITransport -from .listener_interface import IListener - -class TCP(ITransport): - - def __init__(self): - self.multiaddr = None - - class Listener(IListener): - - def listen(self, multiaddr): - """ - put listener in listening mode and wait for incoming connections - :param multiaddr: multiaddr of peer - :return: return True if successful - """ - pass - - def get_addrs(self): - """ - retrieve list of addresses the listener is listening on - :return: return list of addrs - """ - pass - - def close(self, options=None): - """ - close the listener such that no more connections - can be open on this transport instance - :param options: optional object potential with timeout - a timeout value in ms that fires and destroy all connections - :return: return True if successful - """ - pass - - def dial(self, multiaddr, options=None): - """ - dial a transport to peer listening on multiaddr - :param multiaddr: multiaddr of peer - :param options: optional object - :return: list of multiaddrs - """ - pass - - def create_listener(self, handler_function, options=None): - """ - create listener on transport - :param options: optional object with properties the listener must have - :param handler_function: a function called when a new conntion is received - that takes a connection as argument which implements interface-connection - :return: a listener object that implements listener_interface.py - """ - pass diff --git a/network/tcp.py b/transport/tcp/tcp.py similarity index 100% rename from network/tcp.py rename to transport/tcp/tcp.py diff --git a/transport/upgrader.py b/transport/upgrader.py new file mode 100644 index 00000000..64014244 --- /dev/null +++ b/transport/upgrader.py @@ -0,0 +1,18 @@ +class TransportUpgrader(object): + + def __init__(self, secOpt, muxerOpt): + self.sec = secOpt + self.muxer = muxerOpt + + def upgrade_listener(self, transport, listeners): + """ + upgrade multiaddr listeners to libp2p-transport listeners + + """ + pass + + def upgrade_security(self): + pass + + def upgrade_muxer(self): + pass \ No newline at end of file