Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / Mail / DotAtomReader.cs / 1305376 / DotAtomReader.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Net.Mail { using System; using System.Diagnostics; using System.Net.Mime; using System.Text; // // RFC 2822 Section 3.2.4 - Atom, Dot-Atom // // A Dot-Atom is a string of ASCII characters separated by dots. Dots would normally not be allowed at the start // or end, but we do allow dots at the end for compatibility with other mail clients. We also allow // multiple consecutive dots, which would normally be invalid. // internal static class DotAtomReader { // Reads a Dot Atom in reverse. // // Preconditions: // - Index must be within the bounds of the data string. // // Return value: // - The first index of of a character not valid in a dot-atom. It is then up to the caller to // determine if the next character is a valid delimiter. // e.g. "user.name@domain.com", starting at index 19 (m) returns 9 (@). // e.g. "user.name@dom in.com", starting at index 19 (m) returns 13 (space). // - -1 if the dot-atom section terminated at the start of the data string. // e.g. "user.name@domain.com", starting at index 8 (e) returns -1. // // A FormatException will be thrown if: // - The initial character at data[index] is invalid in a dot-atom. // e.g. "a@b.com", starting at index 1 (@). // - The leading character is a dot. // e.g. "a@.b.com", starting at index 7 (m), throws because the leading char (index 2) is a dot. // internal static int ReadReverse(string data, int index) { Debug.Assert(0 <= index && index < data.Length, "index was outside the bounds of the string: " + index); int startIndex = index; // Scan for the first Unicode or invalid chars (including whitespace) for ( ; 0 <= index; index--) { if (data[index] > MailBnfHelper.Ascii7bitMaxValue // Unicode || (data[index] != MailBnfHelper.Dot && !MailBnfHelper.Atext[data[index]])) // Invalid char { break; } } // Check for empty/invalid dot-atom if (startIndex == index) { throw new FormatException(SR.GetString(SR.MailHeaderFieldInvalidCharacter, data[index])); } // Check for leading dot else if (data[index + 1] == MailBnfHelper.Dot) { throw new FormatException(SR.GetString(SR.MailHeaderFieldInvalidCharacter, MailBnfHelper.Dot)); } return index; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Net.Mail { using System; using System.Diagnostics; using System.Net.Mime; using System.Text; // // RFC 2822 Section 3.2.4 - Atom, Dot-Atom // // A Dot-Atom is a string of ASCII characters separated by dots. Dots would normally not be allowed at the start // or end, but we do allow dots at the end for compatibility with other mail clients. We also allow // multiple consecutive dots, which would normally be invalid. // internal static class DotAtomReader { // Reads a Dot Atom in reverse. // // Preconditions: // - Index must be within the bounds of the data string. // // Return value: // - The first index of of a character not valid in a dot-atom. It is then up to the caller to // determine if the next character is a valid delimiter. // e.g. "user.name@domain.com", starting at index 19 (m) returns 9 (@). // e.g. "user.name@dom in.com", starting at index 19 (m) returns 13 (space). // - -1 if the dot-atom section terminated at the start of the data string. // e.g. "user.name@domain.com", starting at index 8 (e) returns -1. // // A FormatException will be thrown if: // - The initial character at data[index] is invalid in a dot-atom. // e.g. "a@b.com", starting at index 1 (@). // - The leading character is a dot. // e.g. "a@.b.com", starting at index 7 (m), throws because the leading char (index 2) is a dot. // internal static int ReadReverse(string data, int index) { Debug.Assert(0 <= index && index < data.Length, "index was outside the bounds of the string: " + index); int startIndex = index; // Scan for the first Unicode or invalid chars (including whitespace) for ( ; 0 <= index; index--) { if (data[index] > MailBnfHelper.Ascii7bitMaxValue // Unicode || (data[index] != MailBnfHelper.Dot && !MailBnfHelper.Atext[data[index]])) // Invalid char { break; } } // Check for empty/invalid dot-atom if (startIndex == index) { throw new FormatException(SR.GetString(SR.MailHeaderFieldInvalidCharacter, data[index])); } // Check for leading dot else if (data[index + 1] == MailBnfHelper.Dot) { throw new FormatException(SR.GetString(SR.MailHeaderFieldInvalidCharacter, MailBnfHelper.Dot)); } return index; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EqualityComparer.cs
- SettingsPropertyNotFoundException.cs
- SqlGenericUtil.cs
- GeometryDrawing.cs
- ProfileGroupSettings.cs
- ConfigurationManagerHelperFactory.cs
- PanningMessageFilter.cs
- SchemaNames.cs
- ValueTable.cs
- WrapPanel.cs
- XamlWrappingReader.cs
- DefaultHttpHandler.cs
- ShadowGlyph.cs
- RegexGroupCollection.cs
- BasicExpandProvider.cs
- MdImport.cs
- XmlDataLoader.cs
- OleDbDataReader.cs
- XmlResolver.cs
- PackagingUtilities.cs
- DataListGeneralPage.cs
- Comparer.cs
- DialogResultConverter.cs
- UDPClient.cs
- DataExchangeServiceBinder.cs
- InitializationEventAttribute.cs
- ACE.cs
- TextServicesCompartmentEventSink.cs
- ImplicitInputBrush.cs
- Tracer.cs
- CategoryNameCollection.cs
- StaticSiteMapProvider.cs
- VisualBasicExpressionConverter.cs
- PathFigure.cs
- KeyBinding.cs
- ResXFileRef.cs
- SmiContext.cs
- Sentence.cs
- RegistrySecurity.cs
- CharacterMetricsDictionary.cs
- PeerCustomResolverSettings.cs
- MailBnfHelper.cs
- CustomAttributeSerializer.cs
- ToolBarPanel.cs
- ColumnMapCopier.cs
- TableColumn.cs
- WebPartCatalogCloseVerb.cs
- EventData.cs
- DateTimeValueSerializerContext.cs
- QilVisitor.cs
- LocationSectionRecord.cs
- BrowserDefinition.cs
- ClientProxyGenerator.cs
- SignedXml.cs
- PeerCollaborationPermission.cs
- BufferAllocator.cs
- Internal.cs
- FieldAccessException.cs
- PropertyTab.cs
- DesignerCategoryAttribute.cs
- ScriptControlDescriptor.cs
- AssociationSet.cs
- WebConfigurationManager.cs
- MasterPage.cs
- RNGCryptoServiceProvider.cs
- KeyValueInternalCollection.cs
- ErrorWrapper.cs
- IntSecurity.cs
- DataTableCollection.cs
- Parser.cs
- ReadOnlyTernaryTree.cs
- QuadraticBezierSegment.cs
- CodeTypeParameterCollection.cs
- Expression.cs
- TextCompositionManager.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- DbConnectionPool.cs
- ReferencedCategoriesDocument.cs
- StandardMenuStripVerb.cs
- XmlCharCheckingReader.cs
- HtmlInputPassword.cs
- SplitterEvent.cs
- SqlFlattener.cs
- QueueSurrogate.cs
- CFStream.cs
- SqlDataSourceStatusEventArgs.cs
- CornerRadiusConverter.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- HttpDateParse.cs
- QilInvoke.cs
- Ipv6Element.cs
- HttpHandlerAction.cs
- NotFiniteNumberException.cs
- SqlStream.cs
- HandlerMappingMemo.cs
- LingerOption.cs
- LoginNameDesigner.cs
- BlobPersonalizationState.cs
- CacheRequest.cs