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
- PersonalizableAttribute.cs
- OracleConnection.cs
- MetadataProperty.cs
- SchemaCollectionCompiler.cs
- TraceSource.cs
- DataGridRow.cs
- XmlUtf8RawTextWriter.cs
- RowBinding.cs
- ApplicationProxyInternal.cs
- ByteAnimationBase.cs
- RenameRuleObjectDialog.Designer.cs
- Point3DCollection.cs
- DynamicQueryStringParameter.cs
- AlternationConverter.cs
- JoinTreeNode.cs
- ComplexType.cs
- AbandonedMutexException.cs
- GPPOINT.cs
- DNS.cs
- DbProviderManifest.cs
- Substitution.cs
- XmlSchemaNotation.cs
- MdiWindowListStrip.cs
- GridViewDeleteEventArgs.cs
- ExclusiveCanonicalizationTransform.cs
- CommonDialog.cs
- GeometryCombineModeValidation.cs
- SQLStringStorage.cs
- DataSet.cs
- WindowsListViewSubItem.cs
- EnumUnknown.cs
- WebPartPersonalization.cs
- ImageListStreamer.cs
- QuaternionRotation3D.cs
- AsyncOperation.cs
- cookiecollection.cs
- LinearGradientBrush.cs
- _LocalDataStoreMgr.cs
- ActivationProxy.cs
- Types.cs
- ListItemsPage.cs
- ActivitiesCollection.cs
- OleDbParameter.cs
- AnimationException.cs
- HtmlTableRow.cs
- SQLGuidStorage.cs
- ToolStripDropDown.cs
- EntitySetBase.cs
- TextEmbeddedObject.cs
- WindowsFormsSynchronizationContext.cs
- XsdBuildProvider.cs
- SqlConnectionPoolGroupProviderInfo.cs
- PointAnimationBase.cs
- CapiHashAlgorithm.cs
- EntityClientCacheEntry.cs
- PartManifestEntry.cs
- SqlGenerator.cs
- LinearKeyFrames.cs
- WindowsNonControl.cs
- OutOfProcStateClientManager.cs
- UTF32Encoding.cs
- XmlSchemaComplexContent.cs
- FormViewRow.cs
- CommandDesigner.cs
- CssTextWriter.cs
- ReadOnlyAttribute.cs
- MutexSecurity.cs
- AuthenticationService.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- SystemPens.cs
- UnauthorizedWebPart.cs
- ContainerSelectorGlyph.cs
- Transform3DGroup.cs
- ToolStripContentPanelRenderEventArgs.cs
- BufferedGraphics.cs
- SchemaTableOptionalColumn.cs
- PartialTrustVisibleAssembly.cs
- NullableDoubleMinMaxAggregationOperator.cs
- ResourceDisplayNameAttribute.cs
- QilPatternVisitor.cs
- SqlFlattener.cs
- InvokeGenerator.cs
- CodeDomLoader.cs
- _Events.cs
- QueuePropertyVariants.cs
- CacheDependency.cs
- GiveFeedbackEventArgs.cs
- SQLCharsStorage.cs
- TextEditorSpelling.cs
- NumberFormatInfo.cs
- SqlServices.cs
- ButtonRenderer.cs
- SafeHandles.cs
- CommandBinding.cs
- SafeThemeHandle.cs
- coordinatorfactory.cs
- userdatakeys.cs
- FormatConvertedBitmap.cs
- ResourceKey.cs
- DataSourceDesigner.cs