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
- infer.cs
- SchemaCreator.cs
- COM2IManagedPerPropertyBrowsingHandler.cs
- CustomAttribute.cs
- WebBrowserBase.cs
- DocumentReference.cs
- util.cs
- XPathMessageContext.cs
- StructuredProperty.cs
- PeerTransportCredentialType.cs
- Process.cs
- ObjectKeyFrameCollection.cs
- TextElementEditingBehaviorAttribute.cs
- SessionIDManager.cs
- DropSource.cs
- CodeNamespaceCollection.cs
- SecUtil.cs
- SqlDataRecord.cs
- ExpressionBuilder.cs
- ExternalFile.cs
- MD5.cs
- OleDbException.cs
- SQLDecimalStorage.cs
- ObfuscationAttribute.cs
- NotifyParentPropertyAttribute.cs
- StrokeSerializer.cs
- ConfigurationStrings.cs
- PageParserFilter.cs
- WebPartActionVerb.cs
- Util.cs
- NetworkCredential.cs
- BulletedListDesigner.cs
- ControlCollection.cs
- BypassElement.cs
- FileStream.cs
- FileDetails.cs
- CmsInterop.cs
- FunctionDetailsReader.cs
- UserPersonalizationStateInfo.cs
- StaticContext.cs
- CodeSubDirectory.cs
- GenericsNotImplementedException.cs
- XsdDuration.cs
- SpecularMaterial.cs
- QilIterator.cs
- SoapRpcMethodAttribute.cs
- TextBoxRenderer.cs
- HashHelpers.cs
- Delegate.cs
- ColorConvertedBitmapExtension.cs
- TagPrefixAttribute.cs
- UIHelper.cs
- SmtpMail.cs
- MdiWindowListItemConverter.cs
- CSharpCodeProvider.cs
- WpfSharedXamlSchemaContext.cs
- ColumnResult.cs
- DecoderExceptionFallback.cs
- MouseButtonEventArgs.cs
- IteratorFilter.cs
- OrderPreservingPipeliningSpoolingTask.cs
- URLMembershipCondition.cs
- CodeCastExpression.cs
- DeclaredTypeElementCollection.cs
- DescendantBaseQuery.cs
- CloseSequence.cs
- SaveFileDialog.cs
- GatewayIPAddressInformationCollection.cs
- ExtendedPropertyDescriptor.cs
- BufferBuilder.cs
- XmlSchemas.cs
- PrintEvent.cs
- DataViewListener.cs
- TraceFilter.cs
- TrustSection.cs
- CapabilitiesPattern.cs
- TextBox.cs
- HttpDebugHandler.cs
- StateManagedCollection.cs
- JsonWriter.cs
- CaretElement.cs
- MachineSettingsSection.cs
- MouseEventArgs.cs
- XPathParser.cs
- newitemfactory.cs
- DataFormats.cs
- NonParentingControl.cs
- RoleManagerModule.cs
- DataGridrowEditEndingEventArgs.cs
- DispatcherHookEventArgs.cs
- GPPOINTF.cs
- RelationshipNavigation.cs
- XmlCountingReader.cs
- DataGridrowEditEndingEventArgs.cs
- HttpCapabilitiesBase.cs
- MultiTrigger.cs
- XmlNodeComparer.cs
- Interlocked.cs
- SafeFileMappingHandle.cs
- DataGridView.cs