Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / Mail / EncodedStreamFactory.cs / 1305376 / EncodedStreamFactory.cs
namespace System.Net.Mime { using System; using System.IO; using System.Text; internal class EncodedStreamFactory { //RFC 2822: no encoded-word line should be longer than 76 characters not including the soft CRLF //since the header length is unknown (if there even is one) we're going to be slightly more conservative //and cut off at 70. This will also prevent any other folding behavior from being triggered anywhere //in the code private const int defaultMaxLineLength = 70; //default buffer size for encoder private const int initialBufferSize = 1024; internal static int DefaultMaxLineLength { get { return defaultMaxLineLength; } } //get a raw encoder, not for use with header encoding internal IEncodableStream GetEncoder(TransferEncoding encoding, Stream stream) { //raw encoder if (encoding == TransferEncoding.Base64) return new Base64Stream(stream, new Base64WriteStateInfo(initialBufferSize, new byte[0], new byte[0], DefaultMaxLineLength)); //return a QuotedPrintable stream because this is not being used for header encoding if (encoding == TransferEncoding.QuotedPrintable) return new QuotedPrintableStream(stream, true); if (encoding == TransferEncoding.SevenBit) return new SevenBitStream(stream); throw new NotSupportedException("Encoding Stream"); } //use for encoding headers internal IEncodableStream GetEncoderForHeader(Encoding encoding, bool useBase64Encoding, int headerTextLength) { WriteStateInfoBase writeState; byte[] header = CreateHeader(encoding, useBase64Encoding); byte[] footer = CreateFooter(); if (useBase64Encoding) { writeState = new Base64WriteStateInfo(initialBufferSize, header, footer, DefaultMaxLineLength); writeState.MimeHeaderLength = headerTextLength; return new Base64Stream((Base64WriteStateInfo)writeState); } writeState = new QuotedStringWriteStateInfo(initialBufferSize, header, footer, DefaultMaxLineLength); writeState.MimeHeaderLength = headerTextLength; return new QEncodedStream((QuotedStringWriteStateInfo)writeState); } //Create the header for what type of byte encoding is going to be used //based on the encoding type and if base64 encoding should be forced //sample header: =?utf-8?B? protected byte[] CreateHeader(Encoding encoding, bool useBase64Encoding) { //create encoded work header string header = String.Format("=?{0}?{1}?", encoding.HeaderName, useBase64Encoding ? "B" : "Q"); return Encoding.ASCII.GetBytes(header); } //creates the footer that marks the end of a quoted string of some sort protected byte[] CreateFooter() { byte[] footer = {(byte)'?', (byte)'='}; return footer; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Events.cs
- XmlAttributeCollection.cs
- DataGridTableCollection.cs
- BitmapMetadataBlob.cs
- ToolStripSettings.cs
- HttpWriter.cs
- ThemeInfoAttribute.cs
- SqlTypesSchemaImporter.cs
- XmlCharCheckingWriter.cs
- FlowNode.cs
- ConnectionsZoneAutoFormat.cs
- ResizeGrip.cs
- followingsibling.cs
- HtmlFormWrapper.cs
- PerformanceCounterCategory.cs
- SettingsPropertyValue.cs
- MutexSecurity.cs
- dataSvcMapFileLoader.cs
- XmlDomTextWriter.cs
- OptimalBreakSession.cs
- ConstantCheck.cs
- TextAutomationPeer.cs
- Listbox.cs
- StorageTypeMapping.cs
- DataBinding.cs
- PointAnimationUsingPath.cs
- FlowPanelDesigner.cs
- ResourceProviderFactory.cs
- KoreanLunisolarCalendar.cs
- PermissionAttributes.cs
- DecimalStorage.cs
- DynamicValidatorEventArgs.cs
- SQLUtility.cs
- FileEnumerator.cs
- LinkArea.cs
- EnumBuilder.cs
- SettingsProperty.cs
- DateTimeSerializationSection.cs
- ReferenceSchema.cs
- ContainerAction.cs
- PackWebResponse.cs
- HostAdapter.cs
- FormViewDeletedEventArgs.cs
- SignatureDescription.cs
- RadioButtonList.cs
- StrokeCollection.cs
- BuildResult.cs
- VScrollBar.cs
- listitem.cs
- XmlWhitespace.cs
- SqlAliasesReferenced.cs
- CfgParser.cs
- Menu.cs
- SqlProviderManifest.cs
- EventBookmark.cs
- MessageQueuePermissionEntry.cs
- CacheMemory.cs
- LabelAutomationPeer.cs
- IndexerHelper.cs
- TakeOrSkipWhileQueryOperator.cs
- ConfigurationLocation.cs
- QueryCursorEventArgs.cs
- PointIndependentAnimationStorage.cs
- InvokePattern.cs
- QueryCursorEventArgs.cs
- ListViewDeleteEventArgs.cs
- InputReport.cs
- FrameworkTextComposition.cs
- OledbConnectionStringbuilder.cs
- QueryContinueDragEvent.cs
- SqlXmlStorage.cs
- DynamicPhysicalDiscoSearcher.cs
- COM2Properties.cs
- SqlDataSourceCommandEventArgs.cs
- SqlNodeAnnotations.cs
- FixedSOMImage.cs
- TextElement.cs
- SemanticKeyElement.cs
- Light.cs
- BlobPersonalizationState.cs
- AssemblyAssociatedContentFileAttribute.cs
- DynamicPropertyHolder.cs
- ConfigurationProperty.cs
- ColorBlend.cs
- SemanticResultValue.cs
- DoubleLink.cs
- ListViewDataItem.cs
- HttpCookiesSection.cs
- Attributes.cs
- SafeFileMappingHandle.cs
- Int64Storage.cs
- Configuration.cs
- WindowProviderWrapper.cs
- MULTI_QI.cs
- BitmapFrame.cs
- IxmlLineInfo.cs
- XmlWrappingReader.cs
- WriteableBitmap.cs
- CaseInsensitiveOrdinalStringComparer.cs
- XmlSerializationReader.cs