public void CanMakeAtom() { // arrange var parser = new SmtpParser(); string atom; // act var made = parser.TryMakeAtom(new TokenEnumerator(new StringTokenReader("hello")), out atom); // assert Assert.True(made); Assert.Equal("hello", atom); }
public void CanMakeDotString() { // arrange var parser = new SmtpParser(); string dotString; // act var made = parser.TryMakeDotString(new TokenEnumerator(new StringTokenReader("abc.def.hij")), out dotString); // assert Assert.True(made); Assert.Equal("abc.def.hij", dotString); }
public void CanMakeLocalPart() { // arrange var parser = new SmtpParser(); string localPart; // act var made = parser.TryMakeLocalPart(new TokenEnumerator(new StringTokenReader("abc")), out localPart); // assert Assert.True(made); Assert.Equal("abc", localPart); }
public void CanMakeSubdomain() { // arrange var parser = new SmtpParser(); string subdomain; // act var made = parser.TryMakeSubdomain(new TokenEnumerator(new StringTokenReader("a-1-b-2")), out subdomain); // assert Assert.True(made); Assert.Equal("a-1-b-2", subdomain); }
public void CanMakeTextOrNumberOrHyphenString() { // arrange var parser = new SmtpParser(); string textOrNumberOrHyphen1; // act var made1 = parser.TryMakeTextOrNumberOrHyphenString(new TokenEnumerator(new StringTokenReader("a1-b2")), out textOrNumberOrHyphen1); // assert Assert.True(made1); Assert.Equal("a1-b2", textOrNumberOrHyphen1); }
public void CanMakeDomain() { // arrange var parser = new SmtpParser(); string domain; // act var made = parser.TryMakeDomain(new TokenEnumerator(new StringTokenReader("123.abc.com")), out domain); // assert Assert.True(made); Assert.Equal("123.abc.com", domain); }
public void CanMakeAddressLiteral() { // arrange var parser = new SmtpParser(); string address; // act var made = parser.TryMakeAddressLiteral(new TokenEnumerator(new StringTokenReader("[ 127.0.0.1 ]")), out address); // assert Assert.True(made); Assert.Equal("127.0.0.1", address); }
public void CanMakeAtDomainList() { // arrange var parser = new SmtpParser(); string atDomainList; // act var made = parser.TryMakeAtDomainList(new TokenEnumerator(new StringTokenReader("@gmail.com,@hotmail.com")), out atDomainList); // assert Assert.True(made); Assert.Equal("@gmail.com,@hotmail.com", atDomainList); }
public void CanMakeReversePath() { // path var parser = new SmtpParser(); IMailbox mailbox; // act var made = parser.TryMakePath(new TokenEnumerator(new StringTokenReader("<@gmail.com,@hotmail.com:[email protected]>")), out mailbox); // assert Assert.True(made); Assert.Equal("cain.osullivan", mailbox.User); Assert.Equal("gmail.com", mailbox.Host); }
public void CanMakePlusAddressMailBox() { // arrange var parser = new SmtpParser(); IMailbox mailbox; // act var made = parser.TryMakeMailbox(new TokenEnumerator(new StringTokenReader("*****@*****.**")), out mailbox); // assert Assert.True(made); Assert.Equal("cain.osullivan+plus", mailbox.User); Assert.Equal("gmail.com", mailbox.Host); }
public void CanMakeMailbox(string email, string user, string host) { // arrange var parser = new SmtpParser(); IMailbox mailbox; // act var made = parser.TryMakeMailbox(new TokenEnumerator(new StringTokenReader(email)), out mailbox); // assert Assert.True(made); Assert.Equal(user, mailbox.User); Assert.Equal(host, mailbox.Host); }
public void CanMakeTextOrNumber() { // arrange var parser = new SmtpParser(); string textOrNumber1; string textOrNumber2; // act var made1 = parser.TryMakeTextOrNumber(new TokenEnumerator(new StringTokenReader("abc")), out textOrNumber1); var made2 = parser.TryMakeTextOrNumber(new TokenEnumerator(new StringTokenReader("123")), out textOrNumber2); // assert Assert.True(made1); Assert.Equal("abc", textOrNumber1); Assert.True(made2); Assert.Equal("123", textOrNumber2); }
public void CanMakeMailParameters() { // arrange var parser = new SmtpParser(); IDictionary <string, string> parameters; // act var made = parser.TryMakeMailParameters(new TokenEnumerator(new StringTokenReader("SIZE=123 ABC=DEF ZZZ=123")), out parameters); // assert Assert.True(made); Assert.Equal(3, parameters.Count); Assert.True(parameters.ContainsKey("SIZE")); Assert.Equal(parameters["SIZE"], "123"); Assert.True(parameters.ContainsKey("ABC")); Assert.Equal(parameters["ABC"], "DEF"); Assert.True(parameters.ContainsKey("ZZZ")); Assert.Equal(parameters["ZZZ"], "123"); }
async ValueTask <SmtpCommand> ReadCommandAsync(ISessionContext context, CancellationToken cancellationToken) { var timeout = new CancellationTokenSource(context.ServerOptions.CommandWaitTimeout); var cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(timeout.Token, cancellationToken); try { SmtpCommand command = null; await context.Pipe.Input.ReadLineAsync( buffer => { var parser = new SmtpParser(_commandFactory); if (parser.TryMake(ref buffer, out command, out var errorResponse) == false) { throw new SmtpResponseException(errorResponse); } return(Task.CompletedTask); }, cancellationTokenSource.Token).ConfigureAwait(false); return(command); } catch (OperationCanceledException) { if (timeout.IsCancellationRequested) { throw new SmtpResponseException(new SmtpResponse(SmtpReplyCode.ServiceClosingTransmissionChannel, "Timeout whilst waiting for input."), true); } throw new SmtpResponseException(new SmtpResponse(SmtpReplyCode.ServiceClosingTransmissionChannel, "The session has be cancelled."), true); } finally { timeout.Dispose(); cancellationTokenSource.Dispose(); } }
/// <summary> /// Constructor. /// </summary> /// <param name="options">The SMTP server options.</param> /// <param name="parser">The ABNF SMTP argument parser.</param> public SmtpCommandFactory(ISmtpServerOptions options, SmtpParser parser) { _options = options; _parser = parser; }
public void CanMakeMailParameters() { // arrange var parser = new SmtpParser(); IDictionary<string, string> parameters; // act var made = parser.TryMakeMailParameters(new TokenEnumerator(new StringTokenReader("SIZE=123 ABC=DEF ZZZ=123")), out parameters); // assert Assert.True(made); Assert.Equal(3, parameters.Count); Assert.True(parameters.ContainsKey("SIZE")); Assert.Equal(parameters["SIZE"], "123"); Assert.True(parameters.ContainsKey("ABC")); Assert.Equal(parameters["ABC"], "DEF"); Assert.True(parameters.ContainsKey("ZZZ")); Assert.Equal(parameters["ZZZ"], "123"); }