Esempio n. 1
0
        public async Task ParseCircuitEstablishedStatusEventAsync()
        {
            string data = "650 STATUS_CLIENT NOTICE CIRCUIT_ESTABLISHED\r\n";

            TorControlReply rawReply = await TorControlReplyReaderTest.ParseAsync(data);

            StatusEvent statusEvent = StatusEvent.FromReply(rawReply);

            Assert.Equal(StatusType.STATUS_CLIENT, statusEvent.Type);
            Assert.Equal(StatusSeverity.NOTICE, statusEvent.Severity);
            Assert.Equal("CIRCUIT_ESTABLISHED", statusEvent.Action);
            Assert.Empty(statusEvent.Arguments);
        }
Esempio n. 2
0
        /// <exception cref="TorControlReplyParseException"/>
        public static IAsyncEvent Parse(TorControlReply reply)
        {
            if (reply.StatusCode != StatusCode.AsynchronousEventNotify)
            {
                throw new TorControlReplyParseException($"Event: Expected {StatusCode.AsynchronousEventNotify} status code.");
            }

            (string value, _) = Tokenizer.ReadUntilSeparator(reply.ResponseLines[0]);

            return(value switch
            {
                "STATUS_CLIENT" or "STATUS_SERVER" or "STATUS_GENERAL" => StatusEvent.FromReply(reply),
                "CIRC" => CircEvent.FromReply(reply),
                _ => throw new NotSupportedException("This should never happen."),
            });
Esempio n. 3
0
        public async Task ParseBootstrapStatusEvent2Async()
        {
            string data = "650 STATUS_CLIENT NOTICE BOOTSTRAP PROGRESS=95 TAG=circuit_create SUMMARY=\"Establishing a Tor circuit\"\r\n";

            TorControlReply rawReply = await TorControlReplyReaderTest.ParseAsync(data);

            StatusEvent statusEvent = StatusEvent.FromReply(rawReply);

            Assert.Equal(StatusType.STATUS_CLIENT, statusEvent.Type);
            Assert.Equal(StatusSeverity.NOTICE, statusEvent.Severity);
            Assert.Equal("BOOTSTRAP", statusEvent.Action);
            Assert.Equal(3, statusEvent.Arguments.Count);
            Assert.Equal("95", statusEvent.Arguments["PROGRESS"]);
            Assert.Equal("circuit_create", statusEvent.Arguments["TAG"]);
            Assert.Equal("Establishing a Tor circuit", statusEvent.Arguments["SUMMARY"]);
        }
Esempio n. 4
0
        public async Task ParseBootstrapStatusEvent1Async()
        {
            string data = "650 STATUS_CLIENT NOTICE BOOTSTRAP PROGRESS=14 TAG=handshake SUMMARY=\"Handshaking with a relay\"\r\n";

            TorControlReply rawReply = await TorControlReplyReaderTest.ParseAsync(data);

            StatusEvent statusEvent = StatusEvent.FromReply(rawReply);

            Assert.Equal(StatusType.STATUS_CLIENT, statusEvent.Type);
            Assert.Equal(StatusSeverity.NOTICE, statusEvent.Severity);
            Assert.Equal("BOOTSTRAP", statusEvent.Action);
            Assert.Equal(3, statusEvent.Arguments.Count);
            Assert.Equal("14", statusEvent.Arguments["PROGRESS"]);
            Assert.Equal("handshake", statusEvent.Arguments["TAG"]);
            Assert.Equal("Handshaking with a relay", statusEvent.Arguments["SUMMARY"]);
        }
    /// <exception cref="TorControlReplyParseException"/>
    public static IAsyncEvent Parse(TorControlReply reply)
    {
        if (reply.StatusCode != StatusCode.AsynchronousEventNotify)
        {
            throw new TorControlReplyParseException($"Event: Expected {StatusCode.AsynchronousEventNotify} status code.");
        }

        (string value, _) = Tokenizer.ReadUntilSeparator(reply.ResponseLines[0]);

        return(value switch
        {
            StatusEvent.EventNameStatusClient or StatusEvent.EventNameStatusServer or StatusEvent.EventNameStatusGeneral => StatusEvent.FromReply(reply),
            CircEvent.EventName => CircEvent.FromReply(reply),
            NetworkLivenessEvent.EventName => NetworkLivenessEvent.FromReply(reply),
            OrConnEvent.EventName => OrConnEvent.FromReply(reply),
            _ => throw new NotSupportedException("This should never happen."),
        });