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
- ContentDesigner.cs
- FloaterBaseParaClient.cs
- MessageDescription.cs
- LinqDataView.cs
- ControlParameter.cs
- BamlStream.cs
- _Semaphore.cs
- CompilerResults.cs
- DateTimeParse.cs
- DrawTreeNodeEventArgs.cs
- WebBrowserSiteBase.cs
- WebPartVerbsEventArgs.cs
- WebColorConverter.cs
- ClientViaElement.cs
- Tablet.cs
- SafeViewOfFileHandle.cs
- RankException.cs
- SinglePhaseEnlistment.cs
- DataGridViewToolTip.cs
- IERequestCache.cs
- Utility.cs
- ClientWindowsAuthenticationMembershipProvider.cs
- CompressedStack.cs
- Validator.cs
- DoubleCollectionValueSerializer.cs
- ManualResetEventSlim.cs
- WmlObjectListAdapter.cs
- Config.cs
- GlobalId.cs
- ScrollChrome.cs
- CaseInsensitiveHashCodeProvider.cs
- smtppermission.cs
- ParserHooks.cs
- FacetValues.cs
- Clipboard.cs
- TextRangeProviderWrapper.cs
- NetDataContractSerializer.cs
- ConfigXmlWhitespace.cs
- _SpnDictionary.cs
- ServiceReference.cs
- GACIdentityPermission.cs
- HttpHandlerAction.cs
- ColorTranslator.cs
- SqlXml.cs
- BrowserCapabilitiesFactoryBase.cs
- _ProxyRegBlob.cs
- EpmSyndicationContentSerializer.cs
- URL.cs
- GridViewItemAutomationPeer.cs
- TreeIterator.cs
- VerificationAttribute.cs
- CollectionContainer.cs
- EndpointNameMessageFilter.cs
- Transform3DGroup.cs
- TextEditor.cs
- NotifyCollectionChangedEventArgs.cs
- SerialErrors.cs
- ExecutionEngineException.cs
- HashHelper.cs
- ReadOnlyDictionary.cs
- Preprocessor.cs
- ChannelDispatcher.cs
- TokenBasedSetEnumerator.cs
- CryptoSession.cs
- SpellerError.cs
- TableLayoutStyle.cs
- EditorServiceContext.cs
- MultiSelector.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- CodeEntryPointMethod.cs
- Base64Encoding.cs
- DocumentOutline.cs
- CustomErrorCollection.cs
- LabelEditEvent.cs
- XmlSerializerFactory.cs
- XPathParser.cs
- TextContainerChangeEventArgs.cs
- VisualCollection.cs
- QueryOutputWriter.cs
- MetadataArtifactLoader.cs
- COSERVERINFO.cs
- RecordManager.cs
- Mutex.cs
- TraceLog.cs
- HttpRawResponse.cs
- PartitionerQueryOperator.cs
- LambdaCompiler.Lambda.cs
- MessageHeaders.cs
- PropertyTabChangedEvent.cs
- ClientSettingsSection.cs
- AnimationException.cs
- HyperLinkColumn.cs
- ResourceContainer.cs
- MulticastOption.cs
- SystemNetHelpers.cs
- COSERVERINFO.cs
- TreeViewBindingsEditorForm.cs
- RemotingConfiguration.cs
- ModelPropertyCollectionImpl.cs
- ChannelServices.cs