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
- PermissionRequestEvidence.cs
- MethodBuilderInstantiation.cs
- ListInitExpression.cs
- ConfigUtil.cs
- MenuCommand.cs
- COMException.cs
- PropertyInfoSet.cs
- cookiecollection.cs
- SqlTransaction.cs
- NamedPipeChannelFactory.cs
- StoreItemCollection.cs
- ObjectPropertyMapping.cs
- MouseDevice.cs
- MarkupWriter.cs
- GacUtil.cs
- MinMaxParagraphWidth.cs
- HttpPostLocalhostServerProtocol.cs
- InlineUIContainer.cs
- CodeGenerator.cs
- ErrorInfoXmlDocument.cs
- HtmlButton.cs
- Thread.cs
- DuplicateDetector.cs
- Menu.cs
- AssemblyAttributes.cs
- DataViewManager.cs
- DictionaryContent.cs
- ClientApiGenerator.cs
- HwndSubclass.cs
- SendingRequestEventArgs.cs
- DurableDispatcherAddressingFault.cs
- DataPagerCommandEventArgs.cs
- UseAttributeSetsAction.cs
- TextServicesPropertyRanges.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- ObjectReaderCompiler.cs
- NativeRightsManagementAPIsStructures.cs
- WebPageTraceListener.cs
- PageAdapter.cs
- ScriptResourceMapping.cs
- CqlWriter.cs
- SoapServerProtocol.cs
- NextPreviousPagerField.cs
- MediaElement.cs
- XmlCustomFormatter.cs
- TypeDescriptor.cs
- DataObjectFieldAttribute.cs
- ToolStripContainerActionList.cs
- Function.cs
- DataGridViewLayoutData.cs
- DataContractSerializerElement.cs
- ActivityBuilderXamlWriter.cs
- ScriptReferenceEventArgs.cs
- ipaddressinformationcollection.cs
- Adorner.cs
- DbSetClause.cs
- GlyphingCache.cs
- XmlSiteMapProvider.cs
- TextTreePropertyUndoUnit.cs
- DynamicObjectAccessor.cs
- VirtualPath.cs
- TextServicesProperty.cs
- SqlCharStream.cs
- RecommendedAsConfigurableAttribute.cs
- Variable.cs
- RoleManagerEventArgs.cs
- SQLGuidStorage.cs
- AsyncStreamReader.cs
- ListViewGroupConverter.cs
- IndicCharClassifier.cs
- PrimaryKeyTypeConverter.cs
- DoubleCollectionValueSerializer.cs
- UIElement3D.cs
- LinkConverter.cs
- DesignerCategoryAttribute.cs
- WebEventTraceProvider.cs
- InvalidWorkflowException.cs
- xmlglyphRunInfo.cs
- GPPOINTF.cs
- UnmanagedBitmapWrapper.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- XamlLoadErrorInfo.cs
- GroupStyle.cs
- DataGridPagingPage.cs
- SimplePropertyEntry.cs
- DataControlButton.cs
- KnownTypes.cs
- UIElement.cs
- TextServicesPropertyRanges.cs
- UIElementCollection.cs
- CmsInterop.cs
- ToolStripProgressBar.cs
- StylusButton.cs
- RawStylusActions.cs
- NotSupportedException.cs
- ProfileSection.cs
- DataError.cs
- DataObject.cs
- AppDomainFactory.cs
- PropertyEntry.cs