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
- CheckBoxAutomationPeer.cs
- TypeUtil.cs
- ToolBarOverflowPanel.cs
- TypeConverters.cs
- XmlCustomFormatter.cs
- DataBoundControlAdapter.cs
- XmlException.cs
- TextParagraphCache.cs
- NonParentingControl.cs
- ClickablePoint.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- QuadraticBezierSegment.cs
- PageBreakRecord.cs
- AssemblyNameProxy.cs
- SID.cs
- RectangleConverter.cs
- ResourceManager.cs
- Marshal.cs
- CardSpaceSelector.cs
- MonthCalendarDesigner.cs
- XmlFormatReaderGenerator.cs
- DataGridViewCellCollection.cs
- httpserverutility.cs
- OrderedDictionary.cs
- XmlSchemaSimpleType.cs
- RenamedEventArgs.cs
- Fonts.cs
- TextParagraphCache.cs
- ServicePrincipalNameElement.cs
- SqlDependencyUtils.cs
- SqlUDTStorage.cs
- Scene3D.cs
- processwaithandle.cs
- WebScriptMetadataMessageEncodingBindingElement.cs
- CngKeyCreationParameters.cs
- XPathSelectionIterator.cs
- TableLayout.cs
- TrackingDataItem.cs
- SqlConnection.cs
- StrongNameUtility.cs
- DataTableExtensions.cs
- DelayedRegex.cs
- PersonalizationAdministration.cs
- SqlProviderManifest.cs
- MessageSecurityProtocol.cs
- ListBase.cs
- CellTreeNode.cs
- Int32Collection.cs
- FontStretchConverter.cs
- FontStyles.cs
- SqlOuterApplyReducer.cs
- SettingsPropertyCollection.cs
- LabelDesigner.cs
- FormsAuthenticationEventArgs.cs
- BmpBitmapEncoder.cs
- WpfKnownMember.cs
- EntitySqlQueryCacheEntry.cs
- CustomWebEventKey.cs
- ElementAction.cs
- DLinqDataModelProvider.cs
- EntityViewGenerator.cs
- Monitor.cs
- WebPartDescriptionCollection.cs
- _CacheStreams.cs
- LinkLabelLinkClickedEvent.cs
- FrameworkPropertyMetadata.cs
- Delegate.cs
- BindStream.cs
- MimeParameterWriter.cs
- ValidationPropertyAttribute.cs
- ConfigXmlText.cs
- NamespaceInfo.cs
- SchemaDeclBase.cs
- SendMessageContent.cs
- SimpleFieldTemplateUserControl.cs
- ProcessHostConfigUtils.cs
- WindowsComboBox.cs
- XmlConvert.cs
- TextEditor.cs
- ColumnReorderedEventArgs.cs
- XmlCollation.cs
- MenuItemCollection.cs
- HttpHostedTransportConfiguration.cs
- LocatorPart.cs
- SafeTimerHandle.cs
- UriScheme.cs
- Tokenizer.cs
- SchemaCollectionCompiler.cs
- NonParentingControl.cs
- GraphicsPathIterator.cs
- XmlQueryTypeFactory.cs
- ChtmlCalendarAdapter.cs
- DocumentApplication.cs
- WebPartsPersonalizationAuthorization.cs
- EarlyBoundInfo.cs
- __ComObject.cs
- LabelLiteral.cs
- WebZone.cs
- graph.cs
- GuidTagList.cs