Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Net / System / Net / Mail / MailHeaderInfo.cs / 1 / MailHeaderInfo.cs
using System; using System.Collections.Specialized; using System.Net.Mail; using System.Globalization; using System.Collections.Generic; namespace System.Net.Mail { // Enumeration of the well-known headers. // If you add to this enum you MUST also add the appropriate initializer in m_HeaderInfo below. internal enum MailHeaderID { Bcc = 0, Cc, Comments, ContentDescription, ContentDisposition, ContentID, ContentLocation, ContentTransferEncoding, ContentType, Date, From, Importance, InReplyTo, Keywords, Max, MessageID, MimeVersion, Priority, References, ReplyTo, ResentBcc, ResentCc, ResentDate, ResentFrom, ResentMessageID, ResentSender, ResentTo, Sender, Subject, To, XPriority, XReceiver, XSender, ZMaxEnumValue = XSender, // Keep this to equal to the last "known" enum entry if you add to the end Unknown = -1 } internal static class MailHeaderInfo { // Structure that wraps information about a single mail header private struct HeaderInfo { public readonly string NormalizedName; public readonly bool IsSingleton; public readonly MailHeaderID ID; public HeaderInfo(MailHeaderID id, string name, bool isSingleton) { ID = id; NormalizedName = name; IsSingleton = isSingleton; } } // Table of well-known mail headers. // Keep the initializers in sync with the enum above. private static readonly HeaderInfo[] m_HeaderInfo = { // ID NormalizedString IsSingleton new HeaderInfo(MailHeaderID.Bcc, "Bcc", true), new HeaderInfo(MailHeaderID.Cc, "Cc", true), new HeaderInfo(MailHeaderID.Comments, "Comments", false), new HeaderInfo(MailHeaderID.ContentDescription, "Content-Description", true), new HeaderInfo(MailHeaderID.ContentDisposition, "Content-Disposition", true), new HeaderInfo(MailHeaderID.ContentID, "Content-ID", true), new HeaderInfo(MailHeaderID.ContentLocation, "Content-Location", true), new HeaderInfo(MailHeaderID.ContentTransferEncoding, "Content-Transfer-Encoding", true), new HeaderInfo(MailHeaderID.ContentType, "Content-Type", true), new HeaderInfo(MailHeaderID.Date, "Date", true), new HeaderInfo(MailHeaderID.From, "From", true), new HeaderInfo(MailHeaderID.Importance, "Importance", true), new HeaderInfo(MailHeaderID.InReplyTo, "In-Reply-To", true), new HeaderInfo(MailHeaderID.Keywords, "Keywords", false), new HeaderInfo(MailHeaderID.Max, "Max", false), new HeaderInfo(MailHeaderID.MessageID, "Message-ID", true), new HeaderInfo(MailHeaderID.MimeVersion, "MIME-Version", true), new HeaderInfo(MailHeaderID.Priority, "Priority", true), new HeaderInfo(MailHeaderID.References, "References", true), new HeaderInfo(MailHeaderID.ReplyTo, "Reply-To", true), new HeaderInfo(MailHeaderID.ResentBcc, "Resent-Bcc", false), new HeaderInfo(MailHeaderID.ResentCc, "Resent-Cc", false), new HeaderInfo(MailHeaderID.ResentDate, "Resent-Date", false), new HeaderInfo(MailHeaderID.ResentFrom, "Resent-From", false), new HeaderInfo(MailHeaderID.ResentMessageID, "Resent-Message-ID", false), new HeaderInfo(MailHeaderID.ResentSender, "Resent-Sender", false), new HeaderInfo(MailHeaderID.ResentTo, "Resent-To", false), new HeaderInfo(MailHeaderID.Sender, "Sender", true), new HeaderInfo(MailHeaderID.Subject, "Subject", true), new HeaderInfo(MailHeaderID.To, "To", true), new HeaderInfo(MailHeaderID.XPriority, "X-Priority", true), new HeaderInfo(MailHeaderID.XReceiver, "X-Receiver", false), new HeaderInfo(MailHeaderID.XSender, "X-Sender", true) }; private static readonly Dictionarym_HeaderDictionary; static MailHeaderInfo() { #if DEBUG // Check that enum and header info array are in sync for(int i = 0; i < m_HeaderInfo.Length; i++) { if((int)m_HeaderInfo[i].ID != i) { throw new Exception("Header info data structures are not in sync"); } } #endif // Create dictionary for string-to-enum lookup. Ordinal and IgnoreCase are intentional. m_HeaderDictionary = new Dictionary ((int)MailHeaderID.ZMaxEnumValue + 1, StringComparer.OrdinalIgnoreCase); for(int i = 0; i < m_HeaderInfo.Length; i++) { m_HeaderDictionary.Add(m_HeaderInfo[i].NormalizedName, i); } } internal static string GetString(MailHeaderID id) { switch(id) { case MailHeaderID.Unknown: case MailHeaderID.ZMaxEnumValue+1: return null; default: return m_HeaderInfo[(int)id].NormalizedName; } } internal static MailHeaderID GetID(string name) { int id; if(m_HeaderDictionary.TryGetValue(name, out id)) { return (MailHeaderID)id; } return MailHeaderID.Unknown; } internal static bool IsWellKnown(string name) { int dummy; return m_HeaderDictionary.TryGetValue(name, out dummy); } internal static bool IsSingleton(string name) { int index; if(m_HeaderDictionary.TryGetValue(name, out index)) { return m_HeaderInfo[index].IsSingleton; } return false; } internal static string NormalizeCase(string name) { int index; if(m_HeaderDictionary.TryGetValue(name, out index)) { return m_HeaderInfo[index].NormalizedName; } return name; } internal static bool IsMatch(string name, MailHeaderID header) { int index; if(m_HeaderDictionary.TryGetValue(name, out index) && (MailHeaderID)index == header) { return true; } return false; } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- QuaternionConverter.cs
- XamlPointCollectionSerializer.cs
- LayoutEvent.cs
- XmlSerializerAssemblyAttribute.cs
- OleDbStruct.cs
- WebScriptMetadataFormatter.cs
- UdpDuplexChannel.cs
- XmlSchemaSimpleContentRestriction.cs
- InputLangChangeRequestEvent.cs
- LeafCellTreeNode.cs
- BufferedGraphics.cs
- ListBoxDesigner.cs
- TrackPointCollection.cs
- UnescapedXmlDiagnosticData.cs
- ViewService.cs
- FormatConvertedBitmap.cs
- DbExpressionVisitor_TResultType.cs
- HtmlValidatorAdapter.cs
- PageBreakRecord.cs
- PrintPreviewGraphics.cs
- IFormattable.cs
- ListControl.cs
- Grid.cs
- UrlPropertyAttribute.cs
- keycontainerpermission.cs
- X509CertificateValidator.cs
- IPAddress.cs
- PrtCap_Public.cs
- CompiledIdentityConstraint.cs
- EntityDataSourceView.cs
- Merger.cs
- WebPartUserCapability.cs
- PopOutPanel.cs
- EntityTemplateFactory.cs
- RSAPKCS1SignatureFormatter.cs
- CalendarAutomationPeer.cs
- ScopeCompiler.cs
- _Events.cs
- ListControl.cs
- Utils.cs
- CodeEntryPointMethod.cs
- PerformanceCounterLib.cs
- Size.cs
- SHA384.cs
- LeafCellTreeNode.cs
- IdentitySection.cs
- UnsafeNativeMethods.cs
- ControlPropertyNameConverter.cs
- TcpSocketManager.cs
- Helpers.cs
- keycontainerpermission.cs
- DataGridViewTextBoxColumn.cs
- HideDisabledControlAdapter.cs
- CharAnimationBase.cs
- SignatureGenerator.cs
- Model3D.cs
- DecimalConverter.cs
- SoapIncludeAttribute.cs
- UnauthorizedWebPart.cs
- AnnotationAuthorChangedEventArgs.cs
- ApplicationManager.cs
- MimePart.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- GridViewSortEventArgs.cs
- CodeSubDirectory.cs
- Module.cs
- ECDiffieHellman.cs
- MetadataPropertyCollection.cs
- PageAsyncTask.cs
- CodeAccessPermission.cs
- SystemIcmpV6Statistics.cs
- LiteralTextContainerControlBuilder.cs
- CodeTypeParameter.cs
- FontFamily.cs
- SqlIdentifier.cs
- NativeObjectSecurity.cs
- StringValueConverter.cs
- RelationshipFixer.cs
- CryptoApi.cs
- BStrWrapper.cs
- UrlAuthorizationModule.cs
- EventBuilder.cs
- DataGridViewCellValueEventArgs.cs
- DataServiceBehavior.cs
- RightNameExpirationInfoPair.cs
- X509Certificate2Collection.cs
- ContainerControl.cs
- ExpressionBuilderContext.cs
- EventLogWatcher.cs
- SerializationSectionGroup.cs
- _AutoWebProxyScriptEngine.cs
- bidPrivateBase.cs
- AppliedDeviceFiltersEditor.cs
- ActiveXHelper.cs
- MessageFilterTable.cs
- PixelFormat.cs
- DataControlPagerLinkButton.cs
- MemberMemberBinding.cs
- TemplateEditingVerb.cs
- EnumValidator.cs