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
- DbDataAdapter.cs
- UxThemeWrapper.cs
- ByteAnimation.cs
- StretchValidation.cs
- SelectorItemAutomationPeer.cs
- BaseTemplatedMobileComponentEditor.cs
- InternalEnumValidatorAttribute.cs
- HiddenField.cs
- Nullable.cs
- JournalEntryStack.cs
- RuleSetDialog.cs
- MulticastDelegate.cs
- EFTableProvider.cs
- HandoffBehavior.cs
- RequestCachePolicyConverter.cs
- HiddenFieldPageStatePersister.cs
- _BufferOffsetSize.cs
- NameValueFileSectionHandler.cs
- PropertyChangedEventArgs.cs
- StreamAsIStream.cs
- ReadOnlyDataSourceView.cs
- X509Utils.cs
- FileEnumerator.cs
- MemberHolder.cs
- CollectionViewSource.cs
- StyleModeStack.cs
- PopOutPanel.cs
- NativeActivityTransactionContext.cs
- Array.cs
- TreeNode.cs
- AnimationException.cs
- Int64Animation.cs
- CompilationRelaxations.cs
- GC.cs
- Base64Stream.cs
- FixedTextView.cs
- InternalBufferManager.cs
- ClientSettings.cs
- SmtpReplyReaderFactory.cs
- FormClosedEvent.cs
- Menu.cs
- CodeDomSerializer.cs
- AnnotationStore.cs
- PerformanceCounter.cs
- UniqueSet.cs
- ObjectStateFormatter.cs
- SqlMetaData.cs
- VariantWrapper.cs
- Transform3DGroup.cs
- XmlSchemaImport.cs
- PropertyRecord.cs
- SelectionItemPattern.cs
- Content.cs
- Sequence.cs
- HttpPostClientProtocol.cs
- DataTable.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- SiteMapPath.cs
- PageWrapper.cs
- ParameterModifier.cs
- MailWriter.cs
- GridViewRow.cs
- CodeAttributeDeclaration.cs
- assemblycache.cs
- ScriptResourceAttribute.cs
- ContainerFilterService.cs
- SafeViewOfFileHandle.cs
- mediaclock.cs
- Registry.cs
- DialogBaseForm.cs
- RuleSet.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- XmlSecureResolver.cs
- PeerNearMe.cs
- ZoneLinkButton.cs
- ArrayTypeMismatchException.cs
- Symbol.cs
- CommentEmitter.cs
- DataRelation.cs
- ValidatedControlConverter.cs
- ButtonBaseAdapter.cs
- ISAPIRuntime.cs
- ToolStripLocationCancelEventArgs.cs
- CacheChildrenQuery.cs
- PKCS1MaskGenerationMethod.cs
- SplitterEvent.cs
- QilUnary.cs
- ParameterReplacerVisitor.cs
- TextSpanModifier.cs
- WebRequestModulesSection.cs
- GridViewRowPresenterBase.cs
- UiaCoreApi.cs
- SHA512.cs
- ToolZone.cs
- FilterFactory.cs
- Char.cs
- wgx_commands.cs
- OleDbStruct.cs
- ObjectTag.cs
- DoubleCollection.cs