Пример #1
0
        public async Task InitializeAsync()
        {
            await controlSocket.Connect();

            var response = await controlSocket.SendCommand($"SESSION CREATE STYLE=STREAM ID={sessionId} DESTINATION=TRANSIENT");

            LocalDestination = response["DESTINATION"];
        }
Пример #2
0
        public async Task <Stream> ConnectAsync(string remoteDestination)
        {
            var connectionStream = new I2PSamConnection(SamPort);
            await connectionStream.Connect();

            await connectionStream.SendCommand($"STREAM CONNECT ID={sessionId} DESTINATION={remoteDestination}");

            return(connectionStream.GetStream());
        }
Пример #3
0
        public async Task ListenForIncomingConnectionsAsync()
        {
            if (isListeningForIncomingConnections)
            {
                throw new InvalidOperationException("Already listening for incoming connections.");
            }

            if (!ListenPort.HasValue)
            {
                throw new InvalidOperationException("No listen port specified.");
            }

            var listener = new TcpListener(IPAddress.Loopback, ListenPort.Value);

            isListeningForIncomingConnections = true;
            listener.Start();

            var streamForwarder = new I2PSamConnection(SamPort);
            await streamForwarder.Connect();

            await streamForwarder.SendCommand($"STREAM FORWARD ID={sessionId} PORT={ListenPort}");

            ListenForConnections(listener);
        }