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
- WindowsStatusBar.cs
- SimpleBitVector32.cs
- RootProfilePropertySettingsCollection.cs
- COAUTHINFO.cs
- SignatureDescription.cs
- DataObjectMethodAttribute.cs
- IPAddress.cs
- EncoderParameters.cs
- OperationResponse.cs
- Trigger.cs
- RSAOAEPKeyExchangeDeformatter.cs
- elementinformation.cs
- GridViewCommandEventArgs.cs
- OrderPreservingPipeliningSpoolingTask.cs
- HtmlEmptyTagControlBuilder.cs
- SqlLiftWhereClauses.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- ImplicitInputBrush.cs
- ClientUtils.cs
- InvalidOperationException.cs
- XmlDataImplementation.cs
- SQLBinaryStorage.cs
- MergeLocalizationDirectives.cs
- SimpleWorkerRequest.cs
- EncryptedXml.cs
- LocatorPart.cs
- DependencyPropertyKey.cs
- ClientRuntimeConfig.cs
- HttpRequest.cs
- ByteBufferPool.cs
- EmptyCollection.cs
- PathFigureCollectionConverter.cs
- PropertyCondition.cs
- DebugInfoGenerator.cs
- WebEvents.cs
- IdleTimeoutMonitor.cs
- Monitor.cs
- Geometry3D.cs
- DataTable.cs
- MsmqOutputMessage.cs
- HtmlElementEventArgs.cs
- TypeDescriptorFilterService.cs
- DataRelationCollection.cs
- GradientSpreadMethodValidation.cs
- IsolatedStorageFileStream.cs
- DebuggerAttributes.cs
- ISCIIEncoding.cs
- AutoResetEvent.cs
- RegistryPermission.cs
- XmlSchemaImport.cs
- MonikerProxyAttribute.cs
- UnaryNode.cs
- StateRuntime.cs
- TreeChangeInfo.cs
- XmlSchemaObjectCollection.cs
- XPathBuilder.cs
- BinHexDecoder.cs
- Block.cs
- Column.cs
- MarshalByValueComponent.cs
- storepermissionattribute.cs
- TemplateBindingExtension.cs
- WebBrowserProgressChangedEventHandler.cs
- ByteStack.cs
- BitStream.cs
- BackoffTimeoutHelper.cs
- DeploymentSection.cs
- GuidConverter.cs
- SafeRightsManagementSessionHandle.cs
- RefType.cs
- PingReply.cs
- HMACSHA512.cs
- WebPartDescriptionCollection.cs
- UnsafeNativeMethods.cs
- CacheEntry.cs
- TextDpi.cs
- GridViewAutomationPeer.cs
- SQLResource.cs
- PersistenceException.cs
- SQLCharsStorage.cs
- Roles.cs
- ExceptionUtil.cs
- ContextMenuAutomationPeer.cs
- SQLInt64Storage.cs
- ValidationErrorCollection.cs
- CollectionDataContract.cs
- DelegateOutArgument.cs
- XmlSerializerVersionAttribute.cs
- DataServiceEntityAttribute.cs
- XmlSchemaNotation.cs
- CatalogZoneBase.cs
- ScriptReference.cs
- FontSizeConverter.cs
- XmlDocumentType.cs
- OracleParameter.cs
- FastPropertyAccessor.cs
- XNodeSchemaApplier.cs
- XamlStream.cs
- WebBrowsableAttribute.cs
- DeferredElementTreeState.cs