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
- FormDocumentDesigner.cs
- EmptyReadOnlyDictionaryInternal.cs
- DBSqlParserTableCollection.cs
- ExchangeUtilities.cs
- Simplifier.cs
- PointIndependentAnimationStorage.cs
- EntityViewContainer.cs
- FileSystemWatcher.cs
- WebPartDisplayMode.cs
- SqlEnums.cs
- Rotation3DAnimation.cs
- ScrollProviderWrapper.cs
- XmlValidatingReaderImpl.cs
- BuildResultCache.cs
- AutomationPropertyChangedEventArgs.cs
- PaperSize.cs
- AlignmentYValidation.cs
- _DigestClient.cs
- Dynamic.cs
- StaticContext.cs
- GlyphCache.cs
- SqlProvider.cs
- HttpSessionStateBase.cs
- WebDisplayNameAttribute.cs
- SchemaTypeEmitter.cs
- XmlElementAttributes.cs
- Highlights.cs
- Stream.cs
- ToolBarOverflowPanel.cs
- HttpChannelHelpers.cs
- RayHitTestParameters.cs
- Nodes.cs
- TearOffProxy.cs
- WebServiceHostFactory.cs
- GradientStop.cs
- ProtocolsConfigurationEntry.cs
- InputProviderSite.cs
- HttpInputStream.cs
- XmlDesignerDataSourceView.cs
- DNS.cs
- Rfc2898DeriveBytes.cs
- SerializationSectionGroup.cs
- ValidationRuleCollection.cs
- LineServices.cs
- ConfigXmlComment.cs
- RouteTable.cs
- ListControlConvertEventArgs.cs
- TabPage.cs
- ContentTextAutomationPeer.cs
- DrawingAttributeSerializer.cs
- TileBrush.cs
- AttachmentCollection.cs
- DateTimeParse.cs
- ClientTargetCollection.cs
- Mappings.cs
- Solver.cs
- SignatureDescription.cs
- ListControlConvertEventArgs.cs
- ImportCatalogPart.cs
- SqlProfileProvider.cs
- SqlClientMetaDataCollectionNames.cs
- CodeAttributeDeclaration.cs
- StrokeSerializer.cs
- CodeSubDirectoriesCollection.cs
- SelectedPathEditor.cs
- mediaeventshelper.cs
- AppDomainProtocolHandler.cs
- HttpCachePolicyElement.cs
- InplaceBitmapMetadataWriter.cs
- DataChangedEventManager.cs
- ListSourceHelper.cs
- HostProtectionPermission.cs
- MenuItem.cs
- Rotation3D.cs
- CellLabel.cs
- Instrumentation.cs
- ParseChildrenAsPropertiesAttribute.cs
- diagnosticsswitches.cs
- ExclusiveHandle.cs
- ActiveXHelper.cs
- xmlNames.cs
- ExtendedPropertyCollection.cs
- Baml6Assembly.cs
- DrawingGroupDrawingContext.cs
- TextCompositionEventArgs.cs
- NotImplementedException.cs
- CompModSwitches.cs
- ValidatedControlConverter.cs
- SqlFactory.cs
- LongCountAggregationOperator.cs
- NativeMethods.cs
- TypeSystem.cs
- DoubleMinMaxAggregationOperator.cs
- FixedSOMPageElement.cs
- PreviewPrintController.cs
- KeyTime.cs
- EntityContainerAssociationSetEnd.cs
- DbProviderManifest.cs
- FragmentNavigationEventArgs.cs
- Link.cs