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
- SafeNativeMethods.cs
- MatrixTransform.cs
- WebControlsSection.cs
- safex509handles.cs
- CodeCatchClause.cs
- Path.cs
- TemplateBuilder.cs
- Hashtable.cs
- SimpleApplicationHost.cs
- DataAdapter.cs
- Geometry.cs
- CqlWriter.cs
- QilReplaceVisitor.cs
- IOException.cs
- SafeViewOfFileHandle.cs
- PageClientProxyGenerator.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- SqlRetyper.cs
- SqlBuffer.cs
- ScriptMethodAttribute.cs
- LinqDataSourceEditData.cs
- TypeNameConverter.cs
- OutOfMemoryException.cs
- URLString.cs
- WebDisplayNameAttribute.cs
- WebEventTraceProvider.cs
- TraceContextEventArgs.cs
- SQLInt32.cs
- RecordManager.cs
- unsafeIndexingFilterStream.cs
- SecuritySessionSecurityTokenAuthenticator.cs
- ConvertersCollection.cs
- StorageAssociationTypeMapping.cs
- MLangCodePageEncoding.cs
- ImageKeyConverter.cs
- IntranetCredentialPolicy.cs
- GeneralTransformCollection.cs
- MimeObjectFactory.cs
- StoreAnnotationsMap.cs
- TableCell.cs
- SaveRecipientRequest.cs
- CompilationUtil.cs
- XmlSchemaInferenceException.cs
- ServiceOperation.cs
- ListViewInsertionMark.cs
- XmlNodeChangedEventManager.cs
- DefaultPrintController.cs
- TreeViewEvent.cs
- TextEditorSelection.cs
- Int32KeyFrameCollection.cs
- SafeEventLogReadHandle.cs
- NullableLongMinMaxAggregationOperator.cs
- NativeMethods.cs
- VSDExceptions.cs
- RbTree.cs
- TranslateTransform.cs
- SqlDelegatedTransaction.cs
- MailAddressCollection.cs
- DescendantQuery.cs
- RtType.cs
- ScriptReference.cs
- TextEditorTables.cs
- HttpWebRequest.cs
- DockProviderWrapper.cs
- XamlTreeBuilder.cs
- TracedNativeMethods.cs
- SqlNodeAnnotations.cs
- SqlBulkCopy.cs
- DataSet.cs
- QilValidationVisitor.cs
- CultureSpecificCharacterBufferRange.cs
- MSAAEventDispatcher.cs
- TraceContextEventArgs.cs
- DetailsView.cs
- PlanCompilerUtil.cs
- EnumerableRowCollectionExtensions.cs
- IApplicationTrustManager.cs
- XmlLanguage.cs
- DelegateSerializationHolder.cs
- SchemaManager.cs
- SimpleBitVector32.cs
- Queue.cs
- ModelItemCollectionImpl.cs
- ExpressionEditorAttribute.cs
- UriExt.cs
- UTF7Encoding.cs
- PipeSecurity.cs
- InstanceKey.cs
- DataControlFieldCell.cs
- ProcessProtocolHandler.cs
- ListViewTableCell.cs
- ActiveXContainer.cs
- ProxyAttribute.cs
- _ProxyChain.cs
- TextTreeFixupNode.cs
- RuntimeConfigLKG.cs
- XmlIlGenerator.cs
- FormatterConverter.cs
- CompositionAdorner.cs
- Semaphore.cs