Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Net / System / Net / Mail / SevenBitStream.cs / 1 / SevenBitStream.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Net.Mime
{
using System;
using System.IO;
///
/// This stream validates outgoing bytes to be within the
/// acceptible range of 0 - 127. Writes will throw if a
/// value > 127 is found.
///
internal class SevenBitStream : DelegatedStream
{
///
/// ctor.
///
/// Underlying stream
internal SevenBitStream(Stream stream) : base(stream)
{
}
///
/// Writes the specified content to the underlying stream
///
/// Buffer to write
/// Offset within buffer to start writing
/// Count of bytes to write
/// Callback to call when write completes
/// State to pass to callback
public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
{
if (buffer == null)
throw new ArgumentNullException("buffer");
if (offset < 0 || offset >= buffer.Length)
throw new ArgumentOutOfRangeException("offset");
if (offset + count > buffer.Length)
throw new ArgumentOutOfRangeException("count");
CheckBytes(buffer, offset, count);
IAsyncResult result = base.BeginWrite(buffer, offset, count, callback, state);
return result;
}
///
/// Writes the specified content to the underlying stream
///
/// Buffer to write
/// Offset within buffer to start writing
/// Count of bytes to write
public override void Write(byte[] buffer, int offset, int count)
{
if (buffer == null)
throw new ArgumentNullException("buffer");
if (offset < 0 || offset >= buffer.Length)
throw new ArgumentOutOfRangeException("offset");
if (offset + count > buffer.Length)
throw new ArgumentOutOfRangeException("count");
CheckBytes(buffer, offset, count);
base.Write(buffer, offset, count);
}
// helper methods
///
/// Checks the data in the buffer for bytes > 127.
///
/// Buffer containing data
/// Offset within buffer to start checking
/// Count of bytes to check
void CheckBytes(byte[] buffer, int offset, int count)
{
for (int i = count; i < offset + count; i++)
{
if (buffer[i] > 127)
throw new FormatException(SR.GetString(SR.Mail7BitStreamInvalidCharacter));
}
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MessageDecoder.cs
- TypeSemantics.cs
- XamlContextStack.cs
- CodeRegionDirective.cs
- Int64AnimationBase.cs
- ContentDisposition.cs
- HttpProtocolReflector.cs
- DocumentAutomationPeer.cs
- EntityDataSourceReferenceGroup.cs
- WebReferencesBuildProvider.cs
- WebBrowserUriTypeConverter.cs
- HwndProxyElementProvider.cs
- PromptEventArgs.cs
- ConfigurationSectionGroup.cs
- KeyedHashAlgorithm.cs
- AlphabeticalEnumConverter.cs
- InvariantComparer.cs
- CodeMethodReturnStatement.cs
- FunctionNode.cs
- Model3D.cs
- TextTreeText.cs
- DesignerTransaction.cs
- EventLog.cs
- Decoder.cs
- MsmqMessage.cs
- AnimationClock.cs
- UrlMapping.cs
- StyleXamlParser.cs
- RealProxy.cs
- WebConvert.cs
- ProfileSettings.cs
- DefaultPrintController.cs
- InternalDispatchObject.cs
- ControlBuilder.cs
- PersonalizablePropertyEntry.cs
- WorkflowElementDialog.cs
- CodeDelegateCreateExpression.cs
- XmlSerializerNamespaces.cs
- PassportAuthenticationEventArgs.cs
- ConnectionManagementSection.cs
- OdbcErrorCollection.cs
- ChameleonKey.cs
- StringTraceRecord.cs
- _SpnDictionary.cs
- exports.cs
- EventInfo.cs
- ReadonlyMessageFilter.cs
- DurationConverter.cs
- WebConfigurationFileMap.cs
- StringPropertyBuilder.cs
- PageSettings.cs
- XmlDesigner.cs
- ListDictionary.cs
- DataGridHeaderBorder.cs
- Exceptions.cs
- DockProviderWrapper.cs
- OdbcPermission.cs
- InputElement.cs
- NamedElement.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- ToolStripProgressBar.cs
- DataServiceProviderMethods.cs
- ThicknessKeyFrameCollection.cs
- XmlEntityReference.cs
- ArraySubsetEnumerator.cs
- WebContext.cs
- RewritingSimplifier.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- TextBoxDesigner.cs
- HandlerFactoryCache.cs
- WasAdminWrapper.cs
- DiagnosticTrace.cs
- BooleanToSelectiveScrollingOrientationConverter.cs
- BamlRecordHelper.cs
- QueryOutputWriterV1.cs
- CodeAttachEventStatement.cs
- SelectorItemAutomationPeer.cs
- DataSourceControlBuilder.cs
- SplineKeyFrames.cs
- XmlParserContext.cs
- OletxDependentTransaction.cs
- ListViewTableCell.cs
- PtsPage.cs
- Size.cs
- ResourceSetExpression.cs
- DynamicValidatorEventArgs.cs
- QueryExpr.cs
- StringOutput.cs
- Ops.cs
- ParallelEnumerableWrapper.cs
- MultiView.cs
- DrawItemEvent.cs
- DocumentPageTextView.cs
- ReceiveMessageAndVerifySecurityAsyncResultBase.cs
- MachineKeyConverter.cs
- DataGridViewRowsRemovedEventArgs.cs
- PageCache.cs
- ClientSettingsSection.cs
- CompressEmulationStream.cs
- Fault.cs