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
- GuidConverter.cs
- bidPrivateBase.cs
- ResourceAttributes.cs
- StrongNameIdentityPermission.cs
- QilXmlReader.cs
- WindowsStartMenu.cs
- FixedHighlight.cs
- FontFamilyIdentifier.cs
- ContentElementAutomationPeer.cs
- LocalBuilder.cs
- ArgumentNullException.cs
- PopOutPanel.cs
- Parser.cs
- WeakReferenceEnumerator.cs
- DesignerActionPanel.cs
- DefaultTraceListener.cs
- ContentFileHelper.cs
- newinstructionaction.cs
- AdornerDecorator.cs
- DataSourceCache.cs
- LongPath.cs
- TableRowGroup.cs
- Win32MouseDevice.cs
- FontUnitConverter.cs
- EntityDesignerUtils.cs
- FieldAccessException.cs
- ReceiveMessageRecord.cs
- RandomDelayQueuedSendsAsyncResult.cs
- SafeRsaProviderHandle.cs
- OdbcInfoMessageEvent.cs
- FilteredAttributeCollection.cs
- HttpProcessUtility.cs
- QuotedPrintableStream.cs
- TextTreeInsertElementUndoUnit.cs
- SharedPersonalizationStateInfo.cs
- NumericUpDown.cs
- AnonymousIdentificationSection.cs
- MimeMapping.cs
- AppearanceEditorPart.cs
- IntranetCredentialPolicy.cs
- ZoneButton.cs
- ObjectDataSourceView.cs
- SynchronizationHandlesCodeDomSerializer.cs
- SqlColumnizer.cs
- SqlDataReaderSmi.cs
- AssociationTypeEmitter.cs
- SortDescription.cs
- WebBaseEventKeyComparer.cs
- ButtonChrome.cs
- WizardSideBarListControlItemEventArgs.cs
- ParserExtension.cs
- HtmlInputSubmit.cs
- TrackBarRenderer.cs
- SizeAnimationBase.cs
- SqlConnectionPoolGroupProviderInfo.cs
- FixedStringLookup.cs
- TreeNodeEventArgs.cs
- PartBasedPackageProperties.cs
- ClonableStack.cs
- XmlMtomReader.cs
- GorillaCodec.cs
- HashCodeCombiner.cs
- InvokePattern.cs
- WhereQueryOperator.cs
- XmlReflectionMember.cs
- SystemIPGlobalStatistics.cs
- SecurityDescriptor.cs
- RegexTree.cs
- X509WindowsSecurityToken.cs
- DtdParser.cs
- HttpListenerRequest.cs
- securestring.cs
- CallId.cs
- PropertyNames.cs
- ObjectListFieldsPage.cs
- ImmutablePropertyDescriptorGridEntry.cs
- UpdateProgress.cs
- NativeWrapper.cs
- CatalogPart.cs
- VirtualPath.cs
- MobileSysDescriptionAttribute.cs
- BridgeDataReader.cs
- MsmqTransportBindingElement.cs
- SelectionEditor.cs
- ResourceContainer.cs
- SmtpMail.cs
- GeneralTransform3DGroup.cs
- SafePEFileHandle.cs
- TrimSurroundingWhitespaceAttribute.cs
- NameNode.cs
- UiaCoreTypesApi.cs
- CodeParameterDeclarationExpressionCollection.cs
- KeyPullup.cs
- TraceSection.cs
- Debug.cs
- AssemblyAssociatedContentFileAttribute.cs
- StyleSheetComponentEditor.cs
- DataGridViewCellStateChangedEventArgs.cs
- InvokePattern.cs
- PartDesigner.cs