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
- IItemProperties.cs
- SimpleHandlerBuildProvider.cs
- PublisherIdentityPermission.cs
- TextServicesCompartment.cs
- Authorization.cs
- DetailsViewDeletedEventArgs.cs
- CurrentTimeZone.cs
- RelationshipEndCollection.cs
- ExpressionTextBox.xaml.cs
- XmlSchemaSimpleTypeRestriction.cs
- FaultCode.cs
- ComponentEditorForm.cs
- BinaryUtilClasses.cs
- BatchStream.cs
- SqlCaseSimplifier.cs
- AssemblyInfo.cs
- PackageRelationshipSelector.cs
- MatrixAnimationBase.cs
- DBPropSet.cs
- ProcessHost.cs
- RichTextBox.cs
- TextCharacters.cs
- ButtonChrome.cs
- CommunicationObjectAbortedException.cs
- ISFTagAndGuidCache.cs
- XmlQualifiedName.cs
- URLIdentityPermission.cs
- URIFormatException.cs
- SafeHandles.cs
- PassportPrincipal.cs
- TableLayoutPanelResizeGlyph.cs
- ItemCollectionEditor.cs
- IdentifierService.cs
- HttpModuleAction.cs
- CreateUserWizard.cs
- Translator.cs
- RSAPKCS1KeyExchangeFormatter.cs
- ManagedIStream.cs
- JsonClassDataContract.cs
- MailHeaderInfo.cs
- TypePropertyEditor.cs
- EasingQuaternionKeyFrame.cs
- ManifestResourceInfo.cs
- TrackingStringDictionary.cs
- PathParser.cs
- WebPartUtil.cs
- ServiceModelEnumValidator.cs
- XamlInterfaces.cs
- ProcessInfo.cs
- CacheDict.cs
- WindowsTooltip.cs
- PackagePartCollection.cs
- ContextProperty.cs
- NameTable.cs
- RefreshPropertiesAttribute.cs
- COAUTHIDENTITY.cs
- MDIWindowDialog.cs
- HtmlLink.cs
- MethodSet.cs
- EntityDataSourceEntityTypeFilterConverter.cs
- RowTypeElement.cs
- BindToObject.cs
- ClientType.cs
- StateDesigner.TransitionInfo.cs
- Graphics.cs
- Stylesheet.cs
- CheckBox.cs
- AudioBase.cs
- GridViewAutomationPeer.cs
- SkinIDTypeConverter.cs
- XmlEntityReference.cs
- ImportContext.cs
- xamlnodes.cs
- PageRanges.cs
- Int32RectConverter.cs
- PeerCustomResolverElement.cs
- StackOverflowException.cs
- IdnMapping.cs
- SkewTransform.cs
- ListMarkerLine.cs
- ReadOnlyDataSourceView.cs
- HostingEnvironment.cs
- BaseDataListActionList.cs
- ImageAttributes.cs
- Operator.cs
- ListViewDeleteEventArgs.cs
- FormCollection.cs
- MarkedHighlightComponent.cs
- SymLanguageVendor.cs
- ProviderConnectionPoint.cs
- XsdBuilder.cs
- Double.cs
- Point4D.cs
- DTCTransactionManager.cs
- PersonalizableAttribute.cs
- EntityProxyFactory.cs
- CodeObjectCreateExpression.cs
- HostingEnvironment.cs
- ObservableCollection.cs
- FormParameter.cs