コード例 #1
0
        private async Task HandleData()
        {
            await SendLine("354 OK, send");

            _connection.SetTimeout(_configuration.DataCommandTimeout);

            using (var target = new MemoryStreamWithFileBacking(DataTransferMemoryBufferMaxSize, _configuration.TempDirectory))
            {
                var transmissionBuffer = new TransmissionBuffer(target);

                while (!transmissionBuffer.TransmissionEnded)
                {
                    using (var maildata = await _connection.Read())
                    {
                        maildata.Seek(0, SeekOrigin.Begin);

                        transmissionBuffer.Append(maildata);
                    }
                }

                transmissionBuffer.Flush();

                var commandResult = await _commandHandler.HandleData(target);

                await SendCommandResult(commandResult);

                _state.HasMailFrom = false;
                _state.HasRcptTo   = false;
            }
        }
コード例 #2
0
        public void TransmissonBufferShouldBeEmptyAfterFlush()
        {
            var target = new MemoryStream();

            var data = "Hello World\r\n.\r\n";
            var bytes = Encoding.UTF8.GetBytes(data);

            var transmissionBuffer = new TransmissionBuffer(target);
            transmissionBuffer.Append(new MemoryStream(bytes));
            
            Assert.AreEqual(0, transmissionBuffer.Size);
        }
コード例 #3
0
        public void TransmissionShouldBeMarkedAsEndedWhenDotOnNewLineIsReached()
        {
            var target = new MemoryStream();

            var data = "Hello World\r\n.\r\n";
            var bytes = Encoding.UTF8.GetBytes(data);

            var transmissionBuffer = new TransmissionBuffer(target);
            transmissionBuffer.Append(new MemoryStream(bytes));

            Assert.IsTrue(transmissionBuffer.TransmissionEnded);
        }
コード例 #4
0
        public void TransmissionShouldBeFlushedWhenEnded()
        {
            var target = new MemoryStream();

            var data = "Hello World\r\n.\r\n";
            var bytes = Encoding.UTF8.GetBytes(data);

            var transmissionBuffer = new TransmissionBuffer(target);
            transmissionBuffer.Append(new MemoryStream(bytes));

            target.Seek(0, SeekOrigin.Begin);

            var receivedData = Encoding.UTF8.GetString(target.ToArray());

            Assert.AreEqual("Hello World\r\n", receivedData);
        }
コード例 #5
0
        private async Task HandleData()
        {
            await SendLine("354 OK, send");

            _connection.SetTimeout(_configuration.DataCommandTimeout);

            using (var target = new MemoryStreamWithFileBacking(DataTransferMemoryBufferMaxSize, _configuration.TempDirectory))
            {
                var transmissionBuffer = new TransmissionBuffer(target);

                while (!transmissionBuffer.TransmissionEnded)
                {
                    using (var maildata = await _connection.Read())
                    {
                        maildata.Seek(0, SeekOrigin.Begin);

                        transmissionBuffer.Append(maildata);
                    }
                }

                transmissionBuffer.Flush();

                var commandResult = await _commandHandler.HandleData(target);

                await SendCommandResult(commandResult);

                _state.HasMailFrom = false;
                _state.HasRcptTo = false;
            }
        }