Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PageFunction.cs
- MsmqTransportBindingElement.cs
- RuleSetCollection.cs
- SkipStoryboardToFill.cs
- ContentElement.cs
- ProcessStartInfo.cs
- StrongTypingException.cs
- XmlSchemaSimpleTypeList.cs
- ClientProxyGenerator.cs
- CodeGenerator.cs
- HybridDictionary.cs
- Geometry.cs
- PropertyMapper.cs
- ObjectListField.cs
- Point4D.cs
- DataGridViewColumnHeaderCell.cs
- UniqueIdentifierService.cs
- BinaryFormatterWriter.cs
- Model3DGroup.cs
- DesignerForm.cs
- HelpInfo.cs
- SmtpNetworkElement.cs
- PerspectiveCamera.cs
- XmlSerializer.cs
- SettingsPropertyCollection.cs
- Deflater.cs
- ClientScriptManagerWrapper.cs
- GeneralTransform3DTo2DTo3D.cs
- SortDescription.cs
- EncodingDataItem.cs
- CodeValidator.cs
- FtpCachePolicyElement.cs
- HandlerWithFactory.cs
- KeyedPriorityQueue.cs
- LogManagementAsyncResult.cs
- XmlChildEnumerator.cs
- StateRuntime.cs
- SQLUtility.cs
- FileDialog_Vista_Interop.cs
- TreeNodeEventArgs.cs
- PropertyChangedEventArgs.cs
- XmlResolver.cs
- TypeConstant.cs
- ConsoleTraceListener.cs
- DataListItemEventArgs.cs
- StylusEventArgs.cs
- GZipStream.cs
- TransformerInfoCollection.cs
- CharacterShapingProperties.cs
- HtmlControl.cs
- PiiTraceSource.cs
- XsdBuildProvider.cs
- RuleRefElement.cs
- StructuredTypeEmitter.cs
- MemberExpressionHelper.cs
- UndoEngine.cs
- DataObjectCopyingEventArgs.cs
- XsltContext.cs
- PageAsyncTaskManager.cs
- AudioStateChangedEventArgs.cs
- ToolStripProgressBar.cs
- TemplateEditingFrame.cs
- WebZone.cs
- TreeViewItem.cs
- MasterPageParser.cs
- ProfileGroupSettingsCollection.cs
- WrapPanel.cs
- EntityPropertyMappingAttribute.cs
- AssociationTypeEmitter.cs
- RelationalExpressions.cs
- AccessDataSourceView.cs
- StringKeyFrameCollection.cs
- Root.cs
- Grammar.cs
- AliasedSlot.cs
- LocalizedNameDescriptionPair.cs
- DataControlField.cs
- RequestCacheManager.cs
- httpapplicationstate.cs
- FixedTextContainer.cs
- AnnotationMap.cs
- DataGridItemCollection.cs
- CodeAttributeArgument.cs
- SystemDiagnosticsSection.cs
- DataGridViewSelectedColumnCollection.cs
- ApplicationDirectory.cs
- ProcessMessagesAsyncResult.cs
- Duration.cs
- EncryptedKey.cs
- SetStateDesigner.cs
- PromptBuilder.cs
- FigureParagraph.cs
- BoolExpression.cs
- DocumentationServerProtocol.cs
- InnerItemCollectionView.cs
- WebPartUserCapability.cs
- FontSizeConverter.cs
- ReceiveActivityValidator.cs
- DataGridViewCellValidatingEventArgs.cs
- ElementUtil.cs