public void TestResetDataMode() { using (ShimsContext.Create()) { var server = new ShimSMTPServer(); var settings = new StubIReceiveSettings(); var transaction = new SMTPTransaction(server, settings); Assert.False(transaction.InDataMode); transaction.StartDataMode((s, builder) => false, s => new SMTPResponse(SMTPStatusCode.Okay)); Assert.True(transaction.InDataMode); transaction.Reset(); Assert.False(transaction.InDataMode); } }
public override SMTPResponse DoExecute(SMTPTransaction transaction, string parameters) { if (!string.IsNullOrEmpty(parameters)) { return(new SMTPResponse(SMTPStatusCode.SyntaxError)); } var forwardPath = transaction.GetListProperty <MailPath>("ForwardPath"); if (!transaction.GetProperty <bool>("MailInProgress") || forwardPath == null || !forwardPath.Any()) { return(new SMTPResponse(SMTPStatusCode.BadSequence)); } transaction.StartDataMode(DataLineHandler, data => DataHandler(transaction, data)); return(new SMTPResponse(SMTPStatusCode.StartMailInput)); }
public static SMTPResponse HandleResponse(SMTPTransaction transaction, string decodedReponse, IAuthMethod method) { string challenge; if (!method.ProcessResponse(transaction, decodedReponse, out challenge)) { return(new SMTPResponse(SMTPStatusCode.AuthFailed, challenge != null ? new[] { challenge } : new string[0])); } if (challenge != null) { transaction.StartDataMode(DataLineHandler, s => DataHandler(transaction, s, method)); return(new SMTPResponse(SMTPStatusCode.AuthContinue, Base64Encode(challenge))); } transaction.SetProperty("Authenticated", true, true); return(new SMTPResponse(SMTPStatusCode.AuthSuccess)); }
public void TestDataHandling(bool expectedResult) { using (ShimsContext.Create()) { var server = new ShimSMTPServer(); var settings = new StubIReceiveSettings(); var transaction = new SMTPTransaction(server, settings); Assert.False(transaction.InDataMode); const string expectedData = "Some data"; string actualData = null; const string expectedLine = "Some line"; string actualLine = null; var expectedStringBuilder = new StringBuilder(); StringBuilder actualStringBuilder = null; var expectedResponse = new SMTPResponse(SMTPStatusCode.Okay); transaction.StartDataMode((line, builder) => { actualLine = line; actualStringBuilder = builder; return(expectedResult); }, data => { actualData = data; return(expectedResponse); }); var actualResult = transaction.HandleDataLine(expectedLine, expectedStringBuilder); var actualResponse = transaction.HandleData(expectedData); Assert.Equal(expectedResult, actualResult); Assert.Same(expectedResponse, actualResponse); Assert.Same(expectedStringBuilder, actualStringBuilder); Assert.Equal(expectedData, actualData); Assert.Equal(expectedLine, actualLine); } }