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
- NumberSubstitution.cs
- WebPartMovingEventArgs.cs
- FlowDocumentPage.cs
- OLEDB_Util.cs
- activationcontext.cs
- HelpProvider.cs
- AuthenticationServiceManager.cs
- TextUtf8RawTextWriter.cs
- TableLayoutRowStyleCollection.cs
- WmfPlaceableFileHeader.cs
- Screen.cs
- EventSetterHandlerConverter.cs
- ObjectStateEntry.cs
- NavigationService.cs
- TemplatePropertyEntry.cs
- FrameworkTemplate.cs
- VisualTreeUtils.cs
- Utils.cs
- XPathEmptyIterator.cs
- EmptyEnumerable.cs
- MailFileEditor.cs
- EditBehavior.cs
- OneOf.cs
- DynamicDiscoSearcher.cs
- XmlSchemaGroupRef.cs
- CompositeScriptReferenceEventArgs.cs
- CheckBox.cs
- HuffModule.cs
- WebPartMenu.cs
- Expressions.cs
- SQLInt64.cs
- TrackingConditionCollection.cs
- CustomErrorsSection.cs
- CharStorage.cs
- ToolStripPanelCell.cs
- ZipIOCentralDirectoryBlock.cs
- Int16AnimationBase.cs
- StackOverflowException.cs
- DesignerVerbCollection.cs
- ManifestBasedResourceGroveler.cs
- PageContentCollection.cs
- GridViewRowPresenter.cs
- ZoneButton.cs
- MaterialGroup.cs
- RightsManagementEncryptedStream.cs
- XmlSchemaExternal.cs
- SignatureDescription.cs
- ChineseLunisolarCalendar.cs
- LogicalTreeHelper.cs
- Int64AnimationBase.cs
- ActivityTypeDesigner.xaml.cs
- AQNBuilder.cs
- IMembershipProvider.cs
- EqualityComparer.cs
- MbpInfo.cs
- UDPClient.cs
- ProbeDuplex11AsyncResult.cs
- DataGridToolTip.cs
- DataGridView.cs
- ServiceNotStartedException.cs
- XmlWrappingReader.cs
- _HelperAsyncResults.cs
- dtdvalidator.cs
- SQLUtility.cs
- DelayedRegex.cs
- StdValidatorsAndConverters.cs
- WebPartCatalogCloseVerb.cs
- SqlCaseSimplifier.cs
- ConversionContext.cs
- VisualBrush.cs
- ReflectionHelper.cs
- DeviceContext.cs
- FormViewModeEventArgs.cs
- ProfilePropertyMetadata.cs
- AttachmentCollection.cs
- EventProviderBase.cs
- XPathExpr.cs
- DataRelation.cs
- BinHexEncoding.cs
- ProjectionCamera.cs
- ArrayTypeMismatchException.cs
- SortExpressionBuilder.cs
- FlowLayoutPanelDesigner.cs
- CallContext.cs
- XmlSchemaSimpleTypeList.cs
- ContainerVisual.cs
- TextContainerChangeEventArgs.cs
- Lock.cs
- DigestTraceRecordHelper.cs
- SafeHandle.cs
- Win32NamedPipes.cs
- ParentQuery.cs
- MetadataCollection.cs
- GlyphsSerializer.cs
- AlphaSortedEnumConverter.cs
- BigInt.cs
- IdentityReference.cs
- SystemDropShadowChrome.cs
- TableCellCollection.cs
- SimplePropertyEntry.cs