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
- Renderer.cs
- TextTreeExtractElementUndoUnit.cs
- _NTAuthentication.cs
- ConsoleTraceListener.cs
- NativeCompoundFileAPIs.cs
- DragCompletedEventArgs.cs
- Directory.cs
- ProjectionPlan.cs
- StylusEditingBehavior.cs
- PointAnimation.cs
- CommonProperties.cs
- SortableBindingList.cs
- DataGridViewRowConverter.cs
- PagePropertiesChangingEventArgs.cs
- ContextCorrelationInitializer.cs
- GridViewCommandEventArgs.cs
- WebConfigurationHost.cs
- ISO2022Encoding.cs
- SqlSupersetValidator.cs
- LoadGrammarCompletedEventArgs.cs
- DataGridViewRowHeaderCell.cs
- SQlBooleanStorage.cs
- Timer.cs
- PerformanceCounter.cs
- ReadOnlyCollection.cs
- MonikerUtility.cs
- LinearGradientBrush.cs
- RoutingTable.cs
- ThrowHelper.cs
- Decimal.cs
- DisableDpiAwarenessAttribute.cs
- CompensateDesigner.cs
- AuthorizationRule.cs
- SmiTypedGetterSetter.cs
- unsafenativemethodstextservices.cs
- DBBindings.cs
- ThicknessAnimation.cs
- CollectionViewGroupInternal.cs
- StrokeDescriptor.cs
- XmlElementElement.cs
- XmlSerializerFaultFormatter.cs
- DebugView.cs
- VerificationException.cs
- KeyboardEventArgs.cs
- TrimSurroundingWhitespaceAttribute.cs
- Executor.cs
- DesignerForm.cs
- DiscoveryExceptionDictionary.cs
- ToolStripOverflowButton.cs
- Component.cs
- MsmqBindingFilter.cs
- GridViewDeleteEventArgs.cs
- EventArgs.cs
- StylusPointProperties.cs
- ToolStripItemImageRenderEventArgs.cs
- KeyValueInternalCollection.cs
- EnlistmentState.cs
- DefaultEventAttribute.cs
- ChannelEndpointElementCollection.cs
- CqlParserHelpers.cs
- AssemblyNameProxy.cs
- BitmapSizeOptions.cs
- SqlInternalConnectionTds.cs
- FlowDocument.cs
- GridLength.cs
- FixedSOMContainer.cs
- StylusPlugInCollection.cs
- FileLoadException.cs
- ValidationResults.cs
- FormClosingEvent.cs
- XmlIncludeAttribute.cs
- CodeBinaryOperatorExpression.cs
- Positioning.cs
- SQLSingleStorage.cs
- XmlUnspecifiedAttribute.cs
- HuffmanTree.cs
- SqlUserDefinedTypeAttribute.cs
- MemberPath.cs
- CodeArgumentReferenceExpression.cs
- HttpRuntime.cs
- PathFigure.cs
- Label.cs
- MeasureData.cs
- AccessKeyManager.cs
- ScrollViewer.cs
- CellParaClient.cs
- SendActivity.cs
- MetaModel.cs
- XmlException.cs
- XmlDeclaration.cs
- RegexCompilationInfo.cs
- EntityDataSourceDataSelectionPanel.cs
- SiteOfOriginPart.cs
- mactripleDES.cs
- Permission.cs
- ApplicationProxyInternal.cs
- XmlBufferReader.cs
- ClientRuntimeConfig.cs
- ToolboxControl.cs
- EnumerableRowCollection.cs