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
- ConsoleEntryPoint.cs
- ToolStripLabel.cs
- CompilerCollection.cs
- ContainerUIElement3D.cs
- OutputScope.cs
- RelatedPropertyManager.cs
- WindowVisualStateTracker.cs
- ConfigurationPropertyCollection.cs
- XmlConvert.cs
- ToolStripStatusLabel.cs
- ComponentSerializationService.cs
- TimerEventSubscriptionCollection.cs
- TextDecorationLocationValidation.cs
- PropertyValueChangedEvent.cs
- SettingsSavedEventArgs.cs
- WCFModelStrings.Designer.cs
- ChannelSinkStacks.cs
- SqlClientFactory.cs
- SettingsBase.cs
- JpegBitmapEncoder.cs
- UTF8Encoding.cs
- DataBoundControlAdapter.cs
- autovalidator.cs
- ColorBlend.cs
- FigureParaClient.cs
- HijriCalendar.cs
- MediaContextNotificationWindow.cs
- FrameworkReadOnlyPropertyMetadata.cs
- SortedDictionary.cs
- HopperCache.cs
- QuaternionAnimationUsingKeyFrames.cs
- DesignTableCollection.cs
- LoginName.cs
- BaseTransportHeaders.cs
- ParserStreamGeometryContext.cs
- TableLayoutPanel.cs
- Panel.cs
- documentsequencetextcontainer.cs
- Trustee.cs
- OverflowException.cs
- SchemaDeclBase.cs
- QueryPageSettingsEventArgs.cs
- CounterSample.cs
- TextViewSelectionProcessor.cs
- StreamReader.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- ExpressionBuilderCollection.cs
- RuntimeWrappedException.cs
- TextTabProperties.cs
- DoubleConverter.cs
- ChangeConflicts.cs
- RegexFCD.cs
- entitydatasourceentitysetnameconverter.cs
- CodeAccessPermission.cs
- RightsManagementInformation.cs
- SmiRecordBuffer.cs
- CatalogPartChrome.cs
- FormatVersion.cs
- PolyLineSegment.cs
- ResourceDictionaryCollection.cs
- FileEnumerator.cs
- GetTokenRequest.cs
- State.cs
- DispatchChannelSink.cs
- _OverlappedAsyncResult.cs
- PathFigureCollection.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- GridEntry.cs
- TrustManagerPromptUI.cs
- Literal.cs
- CodeDomConfigurationHandler.cs
- OdbcParameterCollection.cs
- HtmlElementErrorEventArgs.cs
- PtsHost.cs
- WeakReferenceEnumerator.cs
- WebPartZoneCollection.cs
- ThreadSafeMessageFilterTable.cs
- UniformGrid.cs
- TemplateApplicationHelper.cs
- SiteMapDataSource.cs
- BrowserDefinitionCollection.cs
- XXXInfos.cs
- SingleKeyFrameCollection.cs
- ToolStripItemEventArgs.cs
- StandardOleMarshalObject.cs
- figurelengthconverter.cs
- hebrewshape.cs
- RecommendedAsConfigurableAttribute.cs
- DataListGeneralPage.cs
- ImageFormat.cs
- Bidi.cs
- LongTypeConverter.cs
- unsafenativemethodstextservices.cs
- HebrewCalendar.cs
- XmlSchemaSimpleType.cs
- LinkArea.cs
- Config.cs
- PathNode.cs
- ToolboxItemWrapper.cs
- ListParaClient.cs