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
- HtmlTable.cs
- DependsOnAttribute.cs
- ReadWriteObjectLock.cs
- SurrogateDataContract.cs
- DataServiceKeyAttribute.cs
- InputLanguageSource.cs
- ISessionStateStore.cs
- EdmSchemaError.cs
- MediaContext.cs
- log.cs
- DropTarget.cs
- ImageBrush.cs
- Serializer.cs
- DecoderReplacementFallback.cs
- ManagedFilter.cs
- LabelDesigner.cs
- DataGridViewRowCancelEventArgs.cs
- DataRowChangeEvent.cs
- TitleStyle.cs
- ChannelSinkStacks.cs
- MultipartContentParser.cs
- localization.cs
- Brush.cs
- CodeSnippetCompileUnit.cs
- DupHandleConnectionReader.cs
- SqlCaseSimplifier.cs
- ListItemsCollectionEditor.cs
- ManagedWndProcTracker.cs
- GetPolicyDetailsRequest.cs
- ExpressionNode.cs
- M3DUtil.cs
- SynchronizingStream.cs
- BadImageFormatException.cs
- CryptoApi.cs
- CharacterHit.cs
- EdmMember.cs
- SplineKeyFrames.cs
- Validator.cs
- UnhandledExceptionEventArgs.cs
- GacUtil.cs
- OperationDescriptionCollection.cs
- RecognizedAudio.cs
- AccessKeyManager.cs
- XmlWellformedWriter.cs
- UInt64.cs
- HtmlWindow.cs
- SetState.cs
- DomNameTable.cs
- RTLAwareMessageBox.cs
- Converter.cs
- PartitionedStreamMerger.cs
- DropSourceBehavior.cs
- KeysConverter.cs
- DocumentViewerBaseAutomationPeer.cs
- AlgoModule.cs
- ChangeBlockUndoRecord.cs
- WindowsListBox.cs
- XmlQueryType.cs
- XmlSchemaObject.cs
- ObjectDataSourceSelectingEventArgs.cs
- ScriptHandlerFactory.cs
- PagePropertiesChangingEventArgs.cs
- Util.cs
- EditorZone.cs
- MyContact.cs
- PrimitiveDataContract.cs
- IFlowDocumentViewer.cs
- PlaceHolder.cs
- sitestring.cs
- DesignerMetadata.cs
- HttpResponseWrapper.cs
- DotExpr.cs
- StubHelpers.cs
- SrgsRule.cs
- PassportAuthentication.cs
- TraceLevelStore.cs
- AccessorTable.cs
- TabControlEvent.cs
- FileEnumerator.cs
- LayoutEngine.cs
- IsolatedStorageSecurityState.cs
- Point3DIndependentAnimationStorage.cs
- LineBreakRecord.cs
- ScrollEventArgs.cs
- X509WindowsSecurityToken.cs
- DllNotFoundException.cs
- GPPOINTF.cs
- NullableFloatAverageAggregationOperator.cs
- Span.cs
- ParserOptions.cs
- DelegatingTypeDescriptionProvider.cs
- MultiBindingExpression.cs
- AccessControlEntry.cs
- CodeDomConfigurationHandler.cs
- CapabilitiesAssignment.cs
- VScrollBar.cs
- DoubleLinkList.cs
- XmlWriterTraceListener.cs
- AnnotationDocumentPaginator.cs
- EventLogPermission.cs