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
- PointAnimation.cs
- DecoderBestFitFallback.cs
- ToolStripControlHost.cs
- SchemaCollectionPreprocessor.cs
- WhitespaceRuleReader.cs
- InitiatorSessionSymmetricMessageSecurityProtocol.cs
- EnumValidator.cs
- DbgCompiler.cs
- _ServiceNameStore.cs
- OrderedDictionary.cs
- AssemblyInfo.cs
- HttpCacheVaryByContentEncodings.cs
- uribuilder.cs
- _UriTypeConverter.cs
- XmlSubtreeReader.cs
- SSmlParser.cs
- SrgsGrammar.cs
- TypeBuilder.cs
- StagingAreaInputItem.cs
- Condition.cs
- RegistryDataKey.cs
- PersonalizableTypeEntry.cs
- FacetValues.cs
- StylusTip.cs
- ProbeDuplexAsyncResult.cs
- XmlSchemaInfo.cs
- StringArrayConverter.cs
- ExpressionBinding.cs
- IgnorePropertiesAttribute.cs
- HttpRuntime.cs
- InlineCollection.cs
- HttpCachePolicyElement.cs
- SqlInternalConnectionTds.cs
- ImpersonateTokenRef.cs
- ConfigsHelper.cs
- RolePrincipal.cs
- BooleanExpr.cs
- EntitySetDataBindingList.cs
- BindStream.cs
- SharedStatics.cs
- SoapObjectWriter.cs
- BidOverLoads.cs
- RequestBringIntoViewEventArgs.cs
- X509ChainElement.cs
- DomainConstraint.cs
- ResourceType.cs
- MsmqInputChannelListener.cs
- SqlBooleanMismatchVisitor.cs
- TextFormatterHost.cs
- WebServiceReceiveDesigner.cs
- ProtectedProviderSettings.cs
- ISAPIRuntime.cs
- DefaultBinder.cs
- PathFigureCollectionConverter.cs
- Freezable.cs
- TypeConverterMarkupExtension.cs
- TypePropertyEditor.cs
- XmlNodeChangedEventArgs.cs
- XmlSerializableWriter.cs
- UriScheme.cs
- TypedCompletedAsyncResult.cs
- NamespaceEmitter.cs
- DataGridViewRowPostPaintEventArgs.cs
- HwndTarget.cs
- LockRenewalTask.cs
- StaticContext.cs
- HttpCapabilitiesEvaluator.cs
- FileCodeGroup.cs
- QilVisitor.cs
- LinkedResourceCollection.cs
- MessageDescription.cs
- SelectionProviderWrapper.cs
- dbenumerator.cs
- MobileFormsAuthentication.cs
- RemotingConfiguration.cs
- Msec.cs
- ConnectorDragDropGlyph.cs
- ServiceReference.cs
- Attachment.cs
- UnsafeNativeMethods.cs
- _ShellExpression.cs
- HeaderUtility.cs
- TextEmbeddedObject.cs
- DesignerActionUIStateChangeEventArgs.cs
- Comparer.cs
- DocumentSignatureManager.cs
- BasicDesignerLoader.cs
- EntityUtil.cs
- FixedSOMTableCell.cs
- DataBindingHandlerAttribute.cs
- ElementProxy.cs
- XmlnsDictionary.cs
- SchemaConstraints.cs
- DetailsViewModeEventArgs.cs
- ProtocolInformationReader.cs
- SystemWebCachingSectionGroup.cs
- StringAnimationUsingKeyFrames.cs
- EndpointNotFoundException.cs
- ParallelTimeline.cs
- XmlSchemaValidationException.cs