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
- MemberPath.cs
- CacheChildrenQuery.cs
- UTF7Encoding.cs
- BamlWriter.cs
- XmlSerializationReader.cs
- TextParagraphCache.cs
- CultureInfo.cs
- ResourceProperty.cs
- StrongNamePublicKeyBlob.cs
- Ipv6Element.cs
- BitmapEffectvisualstate.cs
- BinaryObjectWriter.cs
- CodeRegionDirective.cs
- TcpClientCredentialType.cs
- QuotedPrintableStream.cs
- ResourceCategoryAttribute.cs
- ComNativeDescriptor.cs
- NativeMethods.cs
- AbandonedMutexException.cs
- BufferedStream.cs
- WebConvert.cs
- ZipIOExtraFieldPaddingElement.cs
- OdbcFactory.cs
- PeerInputChannel.cs
- MemberPathMap.cs
- Debug.cs
- TextView.cs
- UInt16.cs
- TypeResolver.cs
- XPathDocumentNavigator.cs
- FlowNode.cs
- DataRecordObjectView.cs
- ActivityBindForm.cs
- PreviewPrintController.cs
- FormViewPageEventArgs.cs
- DataGridViewColumnConverter.cs
- WebPartEditorOkVerb.cs
- RegexInterpreter.cs
- NullableDoubleMinMaxAggregationOperator.cs
- XmlSchemaObjectTable.cs
- AccessKeyManager.cs
- ObjectDataSourceMethodEventArgs.cs
- WindowsGraphics.cs
- TemplateInstanceAttribute.cs
- TextWriterTraceListener.cs
- ConnectionStringsExpressionBuilder.cs
- HtmlInputImage.cs
- DataGridTextBoxColumn.cs
- DesignerActionVerbItem.cs
- CollectionsUtil.cs
- Brushes.cs
- ObjectDataSourceFilteringEventArgs.cs
- ApplicationManager.cs
- DataGridViewCellLinkedList.cs
- EncodingNLS.cs
- XsdBuildProvider.cs
- ChannelTokenTypeConverter.cs
- WindowsGrip.cs
- CachingHintValidation.cs
- ToolboxComponentsCreatedEventArgs.cs
- ToolTipAutomationPeer.cs
- DataTemplateKey.cs
- TextParentUndoUnit.cs
- HttpListenerRequest.cs
- Calendar.cs
- SpeechSynthesizer.cs
- DataGridViewColumnHeaderCell.cs
- DataProtection.cs
- DataServiceHost.cs
- BrowserDefinition.cs
- HwndHost.cs
- StyleSelector.cs
- HttpModulesSection.cs
- ConfigXmlDocument.cs
- OleDbConnectionInternal.cs
- TableAdapterManagerGenerator.cs
- FusionWrap.cs
- BrowserCapabilitiesCompiler.cs
- Math.cs
- DbBuffer.cs
- DesignTimeSiteMapProvider.cs
- WindowsIdentity.cs
- GlobalizationSection.cs
- MemoryStream.cs
- ReflectionUtil.cs
- DataViewManagerListItemTypeDescriptor.cs
- MobileContainerDesigner.cs
- ButtonFieldBase.cs
- AppDomainShutdownMonitor.cs
- SerializationInfo.cs
- TypeForwardedToAttribute.cs
- Wildcard.cs
- wgx_sdk_version.cs
- RefType.cs
- ImageAnimator.cs
- XmlSerializerAssemblyAttribute.cs
- SpellerHighlightLayer.cs
- ThreadAttributes.cs
- OrderPreservingSpoolingTask.cs
- PromptBuilder.cs