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
- _Rfc2616CacheValidators.cs
- SudsWriter.cs
- PreProcessInputEventArgs.cs
- PopupControlService.cs
- X509InitiatorCertificateClientElement.cs
- TheQuery.cs
- SecurityChannelListener.cs
- RootBuilder.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- DataGrid.cs
- TimeSpan.cs
- Utils.cs
- wgx_render.cs
- PreservationFileWriter.cs
- PowerEase.cs
- XsltSettings.cs
- ViewCellSlot.cs
- NullableFloatMinMaxAggregationOperator.cs
- ConnectivityStatus.cs
- CqlParserHelpers.cs
- DecoderExceptionFallback.cs
- RankException.cs
- ContainerParaClient.cs
- EncoderExceptionFallback.cs
- BigInt.cs
- WebSysDefaultValueAttribute.cs
- OleServicesContext.cs
- CodeMethodInvokeExpression.cs
- VariableExpressionConverter.cs
- TextLine.cs
- VirtualPathUtility.cs
- AsyncOperationManager.cs
- CounterCreationDataCollection.cs
- DataMemberFieldEditor.cs
- DataSourceControl.cs
- SystemException.cs
- UnionExpr.cs
- FontCollection.cs
- _NegoStream.cs
- ElementAtQueryOperator.cs
- ExpressionLexer.cs
- DataGridViewBindingCompleteEventArgs.cs
- XmlSchema.cs
- FixedBufferAttribute.cs
- SqlCacheDependencySection.cs
- SelectedDatesCollection.cs
- AQNBuilder.cs
- TransactionInformation.cs
- DropTarget.cs
- ExeConfigurationFileMap.cs
- InkPresenter.cs
- DataColumnMappingCollection.cs
- SyndicationLink.cs
- UrlPropertyAttribute.cs
- TriggerBase.cs
- Vector3DValueSerializer.cs
- CodeCompiler.cs
- StrongTypingException.cs
- ValidationError.cs
- UniqueEventHelper.cs
- Font.cs
- EncryptedType.cs
- ComplexPropertyEntry.cs
- ObjectListSelectEventArgs.cs
- WebSysDisplayNameAttribute.cs
- LabelAutomationPeer.cs
- IntPtr.cs
- OracleParameter.cs
- UriSectionData.cs
- OleDbPermission.cs
- ExpressionConverter.cs
- SID.cs
- Int32AnimationBase.cs
- XmlSchemaValidator.cs
- GeneratedCodeAttribute.cs
- SelectedGridItemChangedEvent.cs
- GrammarBuilderDictation.cs
- OutputWindow.cs
- ExpressionParser.cs
- CodeSnippetCompileUnit.cs
- ParseChildrenAsPropertiesAttribute.cs
- TraceHwndHost.cs
- Error.cs
- EmptyStringExpandableObjectConverter.cs
- ComplexPropertyEntry.cs
- TraceUtility.cs
- CodeCommentStatement.cs
- bidPrivateBase.cs
- UserNameSecurityTokenProvider.cs
- InkPresenter.cs
- VerificationException.cs
- SizeIndependentAnimationStorage.cs
- QueryPrefixOp.cs
- ISCIIEncoding.cs
- EarlyBoundInfo.cs
- EditorZone.cs
- ColorIndependentAnimationStorage.cs
- ImmutableDispatchRuntime.cs
- MailAddressCollection.cs
- WebBaseEventKeyComparer.cs