Code:
/ 4.0 / 4.0 / 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. 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
- NumberSubstitution.cs
- HtmlInputText.cs
- TreeNodeBinding.cs
- BaseTreeIterator.cs
- XmlSchemaSimpleContent.cs
- EditorZoneAutoFormat.cs
- OperationCanceledException.cs
- LocalValueEnumerator.cs
- AutomationEvent.cs
- ConnectionStringsExpressionBuilder.cs
- ControlParameter.cs
- StringArrayConverter.cs
- NativeMethods.cs
- TraceHwndHost.cs
- PeerNameRecordCollection.cs
- DBProviderConfigurationHandler.cs
- ListItemCollection.cs
- SQLDoubleStorage.cs
- EndOfStreamException.cs
- CapabilitiesState.cs
- WinEventWrap.cs
- ToolStripDropDownClosedEventArgs.cs
- GroupDescription.cs
- Misc.cs
- DefaultProxySection.cs
- CircleEase.cs
- XPathPatternParser.cs
- DirectoryLocalQuery.cs
- PictureBox.cs
- ColumnHeader.cs
- ParameterBinding.cs
- ContentPropertyAttribute.cs
- XmlChildNodes.cs
- SendMailErrorEventArgs.cs
- ProfessionalColors.cs
- DateTimeConstantAttribute.cs
- BamlReader.cs
- RequestBringIntoViewEventArgs.cs
- DataControlHelper.cs
- SqlProviderServices.cs
- OptimalBreakSession.cs
- ValidationSummary.cs
- WebBrowserBase.cs
- DataGridViewLayoutData.cs
- GridItemCollection.cs
- Int16Animation.cs
- CacheDependency.cs
- SortQuery.cs
- DelegatedStream.cs
- BufferModeSettings.cs
- SelectingProviderEventArgs.cs
- ContourSegment.cs
- WorkflowMessageEventHandler.cs
- TrackBarRenderer.cs
- DocumentSequence.cs
- EditingScope.cs
- DbException.cs
- TimeManager.cs
- UrlMappingsModule.cs
- XmlSchemaInclude.cs
- PlacementWorkspace.cs
- externdll.cs
- WebBrowser.cs
- MimePart.cs
- SizeChangedEventArgs.cs
- MenuEventArgs.cs
- PageContentAsyncResult.cs
- BuildResultCache.cs
- PropVariant.cs
- MaterialGroup.cs
- WebPartAuthorizationEventArgs.cs
- ApplicationDirectoryMembershipCondition.cs
- BaseCodeDomTreeGenerator.cs
- FieldTemplateFactory.cs
- FontStyleConverter.cs
- SystemFonts.cs
- SQLByteStorage.cs
- XmlCharType.cs
- XmlnsCache.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- ListBoxAutomationPeer.cs
- SiteMapHierarchicalDataSourceView.cs
- OleAutBinder.cs
- CacheSection.cs
- TypeExtensions.cs
- ViewStateException.cs
- DictionaryEntry.cs
- ProgressChangedEventArgs.cs
- CodeLinePragma.cs
- EntityKey.cs
- IndexedGlyphRun.cs
- DetailsViewDeleteEventArgs.cs
- DurableEnlistmentState.cs
- ControlAdapter.cs
- UndirectedGraph.cs
- BooleanStorage.cs
- CheckBox.cs
- WebUtil.cs
- XamlWriter.cs
- OutOfProcStateClientManager.cs