Metadata-Version: 1.1
Name: i2plib
Version: 0.0.5
Summary: A modern asynchronous library for building I2P applications.
Home-page: https://github.com/l-n-s/i2plib
Author: Viktor Villainov
Author-email: supervillain@riseup.net
License: MIT
Description: i2plib
        ======
        
        A modern asynchronous library for building I2P applications. 
        
        Installing
        ----------
        
            pip install i2plib
        
        Requirements:
        
        - Python version >= 3.5
        - I2P router with SAM API enabled
        
        Quick start
        -----------
        
        **Connecting to a remote I2P destination:**
        
        ```python3
        import asyncio
        import i2plib
        
        async def connect_test(destination):
            session_name = "test-connect"
        
            # create a SAM stream session
            await i2plib.create_session(session_name)
        
            # connect to a destination
            reader, writer = await i2plib.stream_connect(session_name, destination)
        
            # write data to a socket
            writer.write(b"PING")
        
            # asynchronously receive data
            data = await reader.read(4096)
            print(data.decode())
        
        # run event loop
        loop = asyncio.get_event_loop()
        loop.run_until_complete(connect_test("dummy.i2p"))
        loop.stop()
        ```
        
        **Accept connections in I2P:**
        
        ```python3
        import asyncio
        import i2plib
        
        async def accept_test():
            session_name = "test-accept"
        
            # create a SAM stream session
            await i2plib.create_session(session_name)
        
            # accept a connection
            reader, writer = await i2plib.stream_accept(session_name)
            
            # first string on a client connection always contains clients I2P destination
            incoming = await reader.read(4096)
            dest, data = incoming.split(b"\n", 1)
            remote_destination = i2plib.Destination(dest.decode())
        
            # destination and data may come in one chunck, if not - we wait for the actual
            # incoming data
            if not data:
                data = await reader.read(4096)
        
            print(data.decode())
        
            # send data to the client
            writer.write(b"PONG")
            writer.close()
        
        # run event loop
        loop = asyncio.get_event_loop()
        loop.run_until_complete(accept_test())
        loop.stop()
        ```
        
        Tunnel API
        ----------
        
        **Expose a local service to I2P like that:**
        
        ```python3
        import asyncio
        import i2plib
        
        loop = asyncio.get_event_loop()
        # making your local web server available in the I2P network
        asyncio.ensure_future(i2plib.server_tunnel(("127.0.0.1", 80)))
        
        try:
            loop.run_forever()
        except KeyboardInterrupt:
            pass
        finally:
            loop.close()
        ```
        
        **Bind a remote I2P destination to a port on your local host:**
        
        ```python3
        import asyncio
        import i2plib
        
        loop = asyncio.get_event_loop()
        # bind irc.echelon.i2p to 127.0.0.1:6669
        asyncio.ensure_future(i2plib.client_tunnel(("127.0.0.1", 6669), "irc.echelon.i2p"))
        
        try:
            loop.run_forever()
        except KeyboardInterrupt:
            pass
        finally:
            loop.close()
        ```
        
        More examples
        -------------
        
        You can see more demo applications in `docs/examples` directory of the source repository.
        
        External links
        --------------
        
        * [Invisible Internet Project](https://geti2p.net/en/)
        * [SAM API documentation](https://geti2p.net/en/docs/api/samv3)
        * [Python asyncio documentation](https://docs.python.org/3/library/asyncio.html)
        
Keywords: i2p
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
