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
- SchemaObjectWriter.cs
- PersonalizablePropertyEntry.cs
- DisplayNameAttribute.cs
- LazyTextWriterCreator.cs
- PoisonMessageException.cs
- TemplateControlParser.cs
- ByteConverter.cs
- MetadataSerializer.cs
- WebPartConnectionsCancelVerb.cs
- ImageAutomationPeer.cs
- MethodBuilder.cs
- ActivityStatusChangeEventArgs.cs
- PrePostDescendentsWalker.cs
- TextStore.cs
- ProxySimple.cs
- BitmapSourceSafeMILHandle.cs
- DescendantOverDescendantQuery.cs
- DataGridViewBindingCompleteEventArgs.cs
- ConditionBrowserDialog.cs
- DesignSurface.cs
- AccessViolationException.cs
- TypeHelper.cs
- DataTableReader.cs
- VoiceObjectToken.cs
- IMembershipProvider.cs
- LogRestartAreaEnumerator.cs
- RuntimeWrappedException.cs
- PropertyConverter.cs
- WorkflowTerminatedException.cs
- QueryCursorEventArgs.cs
- CmsInterop.cs
- TrackingProfileSerializer.cs
- OracleCommand.cs
- HashRepartitionEnumerator.cs
- StringValueConverter.cs
- StylusPointPropertyInfoDefaults.cs
- BinaryNode.cs
- XdrBuilder.cs
- WithStatement.cs
- EventPrivateKey.cs
- HeaderCollection.cs
- EntityTransaction.cs
- XmlSchemaSimpleContent.cs
- LabelInfo.cs
- TypeBuilderInstantiation.cs
- SafeLibraryHandle.cs
- NativeMethods.cs
- CommandBinding.cs
- DependencyObjectProvider.cs
- NativeMethodsOther.cs
- ImpersonateTokenRef.cs
- ObjectListItemCollection.cs
- XmlBinaryWriter.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- SplineQuaternionKeyFrame.cs
- DataObjectPastingEventArgs.cs
- MobileUITypeEditor.cs
- AnonymousIdentificationSection.cs
- JapaneseCalendar.cs
- Stylesheet.cs
- RequestDescription.cs
- OdbcConnectionString.cs
- TraceUtils.cs
- MailWebEventProvider.cs
- StateMachine.cs
- DataTableExtensions.cs
- SqlXml.cs
- RoutedCommand.cs
- HeaderedContentControl.cs
- X509SecurityTokenParameters.cs
- ToolStripContentPanelRenderEventArgs.cs
- sqlnorm.cs
- RequestCachingSection.cs
- AttributeProviderAttribute.cs
- EmptyStringExpandableObjectConverter.cs
- x509store.cs
- EntityDataSourceStatementEditorForm.cs
- QueryCacheKey.cs
- IList.cs
- Visitor.cs
- IFlowDocumentViewer.cs
- TypeSemantics.cs
- FontFaceLayoutInfo.cs
- EntityFrameworkVersions.cs
- ColumnResult.cs
- WebPartConnection.cs
- UnsafeNativeMethods.cs
- DataListCommandEventArgs.cs
- XmlSchemaAnnotated.cs
- FileDetails.cs
- LineBreakRecord.cs
- InlinedAggregationOperatorEnumerator.cs
- BamlWriter.cs
- MSG.cs
- Point.cs
- BookmarkTable.cs
- ListViewHitTestInfo.cs
- PartitionResolver.cs
- EntityTypeBase.cs
- ExternalCalls.cs