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
- SqlDuplicator.cs
- ProviderUtil.cs
- HttpListenerException.cs
- TextInfo.cs
- VectorAnimationUsingKeyFrames.cs
- Binding.cs
- _FixedSizeReader.cs
- BamlCollectionHolder.cs
- UnmanagedMemoryStream.cs
- _OverlappedAsyncResult.cs
- BufferModesCollection.cs
- StringAnimationBase.cs
- EntityClassGenerator.cs
- ByteRangeDownloader.cs
- SqlComparer.cs
- StatusBarItemAutomationPeer.cs
- TimeSpanFormat.cs
- SoapFault.cs
- Not.cs
- HttpCookiesSection.cs
- TreeSet.cs
- WindowsTitleBar.cs
- SelectQueryOperator.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- HtmlEmptyTagControlBuilder.cs
- BaseUriHelper.cs
- DataGridColumn.cs
- EpmSyndicationContentSerializer.cs
- HttpFileCollectionWrapper.cs
- Encoder.cs
- TargetException.cs
- _NegotiateClient.cs
- MergeLocalizationDirectives.cs
- InstanceKeyCollisionException.cs
- TransactionContextValidator.cs
- ExceptionNotification.cs
- NotImplementedException.cs
- XmlNotation.cs
- ToolboxComponentsCreatingEventArgs.cs
- InputReport.cs
- ScaleTransform3D.cs
- PerformanceCounterScope.cs
- DataBinder.cs
- Avt.cs
- EntityViewGenerator.cs
- GacUtil.cs
- GridItemCollection.cs
- XmlCharCheckingReader.cs
- AuthenticationModuleElement.cs
- ProcessProtocolHandler.cs
- DesignerActionKeyboardBehavior.cs
- PeerCollaborationPermission.cs
- BuildProvider.cs
- BamlReader.cs
- MeasureItemEvent.cs
- BCLDebug.cs
- HTMLTextWriter.cs
- XsdDateTime.cs
- TypeUnloadedException.cs
- DebugView.cs
- TextServicesProperty.cs
- InvalidOleVariantTypeException.cs
- CommandBinding.cs
- AdRotator.cs
- Int32Animation.cs
- SiteOfOriginContainer.cs
- InternalTypeHelper.cs
- StylusCaptureWithinProperty.cs
- ContentHostHelper.cs
- VersionPair.cs
- XmlCharCheckingReader.cs
- SafeProcessHandle.cs
- XPathDescendantIterator.cs
- EventsTab.cs
- EnumUnknown.cs
- TemplateXamlTreeBuilder.cs
- EmptyStringExpandableObjectConverter.cs
- Variant.cs
- DoubleCollectionConverter.cs
- ObjectDisposedException.cs
- keycontainerpermission.cs
- SqlRowUpdatedEvent.cs
- BufferAllocator.cs
- RawKeyboardInputReport.cs
- Common.cs
- TableStyle.cs
- XmlCharType.cs
- Repeater.cs
- PointLight.cs
- LocatorGroup.cs
- Flattener.cs
- RowsCopiedEventArgs.cs
- TextSyndicationContentKindHelper.cs
- TargetException.cs
- MouseActionValueSerializer.cs
- PanelDesigner.cs
- ListView.cs
- DesignerSerializerAttribute.cs
- AggregateException.cs
- EntityDataReader.cs