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
- WorkflowTransactionOptions.cs
- WsatAdminException.cs
- StackBuilderSink.cs
- HtmlButton.cs
- PublisherMembershipCondition.cs
- safelink.cs
- SafeRegistryHandle.cs
- ConnectionStringsExpressionBuilder.cs
- ExecutionContext.cs
- codemethodreferenceexpression.cs
- NamedObject.cs
- TransactionFlowProperty.cs
- ConditionalAttribute.cs
- _ListenerRequestStream.cs
- XmlBinaryWriter.cs
- CollectionViewGroupInternal.cs
- XmlUtil.cs
- MetadataHelper.cs
- LabelLiteral.cs
- ClientSettings.cs
- Int32EqualityComparer.cs
- AmbientValueAttribute.cs
- HttpClientChannel.cs
- SequentialWorkflowRootDesigner.cs
- IProvider.cs
- PresentationAppDomainManager.cs
- Debug.cs
- XmlException.cs
- WsatProxy.cs
- UnsafeNativeMethods.cs
- PolicyUnit.cs
- NotificationContext.cs
- ToolStripHighContrastRenderer.cs
- WorkflowServiceNamespace.cs
- IntegerValidator.cs
- EmptyReadOnlyDictionaryInternal.cs
- OAVariantLib.cs
- SafeProcessHandle.cs
- BindingMAnagerBase.cs
- ContractMapping.cs
- VirtualDirectoryMappingCollection.cs
- OleDbTransaction.cs
- SqlDataSourceCache.cs
- ExpressionPrefixAttribute.cs
- ProtocolElementCollection.cs
- WorkflowMessageEventHandler.cs
- ImportFileRequest.cs
- DefaultAuthorizationContext.cs
- FacetDescriptionElement.cs
- StatementContext.cs
- WebHttpEndpoint.cs
- DataGridViewButtonColumn.cs
- EarlyBoundInfo.cs
- DataGridViewColumnCollection.cs
- validationstate.cs
- XmlWrappingWriter.cs
- XmlIgnoreAttribute.cs
- OutputCacheProfile.cs
- FixedTextBuilder.cs
- MetadataItemEmitter.cs
- WindowsRichEdit.cs
- ExeContext.cs
- DataSourceSerializationException.cs
- Win32MouseDevice.cs
- Utils.cs
- DomNameTable.cs
- BaseValidatorDesigner.cs
- JpegBitmapDecoder.cs
- SqlRetyper.cs
- CharAnimationUsingKeyFrames.cs
- DataGridViewTopLeftHeaderCell.cs
- FileSystemEventArgs.cs
- GroupBox.cs
- FrameAutomationPeer.cs
- StringExpressionSet.cs
- NativeMethodsOther.cs
- WorkflowServiceAttributesTypeConverter.cs
- PartitionedStreamMerger.cs
- Native.cs
- SettingsPropertyWrongTypeException.cs
- VisualBrush.cs
- AmbientValueAttribute.cs
- DBDataPermissionAttribute.cs
- Brushes.cs
- EmissiveMaterial.cs
- WorkflowApplicationUnloadedException.cs
- ThousandthOfEmRealDoubles.cs
- AccessControlList.cs
- TypedColumnHandler.cs
- FilterQueryOptionExpression.cs
- TypeDescriptionProvider.cs
- RTLAwareMessageBox.cs
- UnsafeNativeMethods.cs
- LineInfo.cs
- CommandHelpers.cs
- MetadataItemEmitter.cs
- CheckBoxAutomationPeer.cs
- sitestring.cs
- HttpResponse.cs
- SerialStream.cs