Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Net / System / Net / Mail / DelegatedStream.cs / 1 / DelegatedStream.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Net
{
using System;
using System.Net.Sockets;
using System.IO;
internal class DelegatedStream : Stream
{
Stream stream;
NetworkStream netStream;
protected DelegatedStream() {
}
protected DelegatedStream(Stream stream)
{
if (stream == null)
throw new ArgumentNullException("stream");
this.stream = stream;
netStream = stream as NetworkStream;
}
protected Stream BaseStream
{
get
{
return this.stream;
}
}
public override bool CanRead
{
get
{
return this.stream.CanRead;
}
}
public override bool CanSeek
{
get
{
return this.stream.CanSeek;
}
}
public override bool CanWrite
{
get
{
return this.stream.CanWrite;
}
}
public override long Length
{
get
{
if (!CanSeek)
throw new NotSupportedException(SR.GetString(SR.SeekNotSupported));
return this.stream.Length;
}
}
public override long Position
{
get
{
if (!CanSeek)
throw new NotSupportedException(SR.GetString(SR.SeekNotSupported));
return this.stream.Position;
}
set
{
if (!CanSeek)
throw new NotSupportedException(SR.GetString(SR.SeekNotSupported));
this.stream.Position = value;
}
}
public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
{
if (!CanRead)
throw new NotSupportedException(SR.GetString(SR.ReadNotSupported));
IAsyncResult result = null;
if(netStream != null){
result = this.netStream.UnsafeBeginRead (buffer, offset, count, callback, state);
}
else{
result = this.stream.BeginRead (buffer, offset, count, callback, state);
}
return result;
}
public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state)
{
if (!CanWrite)
throw new NotSupportedException(SR.GetString(SR.WriteNotSupported));
IAsyncResult result = null;
if(netStream != null){
result = this.netStream.UnsafeBeginWrite(buffer, offset, count, callback, state);
}
else{
result = this.stream.BeginWrite (buffer, offset, count, callback, state);
}
return result;
}
//This calls close on the inner stream
//however, the stream may not be actually closed, but simpy flushed
public override void Close()
{
this.stream.Close();
}
public override int EndRead(IAsyncResult asyncResult)
{
if (!CanRead)
throw new NotSupportedException(SR.GetString(SR.ReadNotSupported));
int read = this.stream.EndRead (asyncResult);
return read;
}
public override void EndWrite(IAsyncResult asyncResult)
{
if (!CanWrite)
throw new NotSupportedException(SR.GetString(SR.WriteNotSupported));
this.stream.EndWrite (asyncResult);
}
public override void Flush()
{
this.stream.Flush();
}
public override int Read(byte[] buffer, int offset, int count)
{
if (!CanRead)
throw new NotSupportedException(SR.GetString(SR.ReadNotSupported));
int read = this.stream.Read(buffer, offset, count);
return read;
}
public override long Seek(long offset, SeekOrigin origin)
{
if (!CanSeek)
throw new NotSupportedException(SR.GetString(SR.SeekNotSupported));
long position = this.stream.Seek(offset, origin);
return position;
}
public override void SetLength(long value)
{
if (!CanSeek)
throw new NotSupportedException(SR.GetString(SR.SeekNotSupported));
this.stream.SetLength(value);
}
public override void Write(byte[] buffer, int offset, int count)
{
if (!CanWrite)
throw new NotSupportedException(SR.GetString(SR.WriteNotSupported));
this.stream.Write(buffer, offset, count);
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RuleRefElement.cs
- VerificationException.cs
- XmlElement.cs
- BitmapEditor.cs
- FontDifferentiator.cs
- MachineKeySection.cs
- EntityCodeGenerator.cs
- ParserHooks.cs
- ExceptionRoutedEventArgs.cs
- RuntimeConfigLKG.cs
- WebPartConnectVerb.cs
- SqlFunctionAttribute.cs
- BamlTreeUpdater.cs
- Calendar.cs
- Restrictions.cs
- CodeDomLoader.cs
- HttpCachePolicy.cs
- RegexRunnerFactory.cs
- TextProviderWrapper.cs
- SerTrace.cs
- ToolStripActionList.cs
- SqlClientMetaDataCollectionNames.cs
- StylusOverProperty.cs
- TypeRefElement.cs
- DateBoldEvent.cs
- PhysicalFontFamily.cs
- DataGridViewCellParsingEventArgs.cs
- Normalization.cs
- HandleCollector.cs
- Enumerable.cs
- DesignerTransaction.cs
- SimpleExpression.cs
- InProcStateClientManager.cs
- LayoutDump.cs
- PreProcessInputEventArgs.cs
- CommonXSendMessage.cs
- TreeNodeEventArgs.cs
- ParameterElementCollection.cs
- EntityClientCacheKey.cs
- ObjRef.cs
- PageSettings.cs
- CodeCastExpression.cs
- LongTypeConverter.cs
- DataGridViewElement.cs
- EventEntry.cs
- SamlAuthorityBinding.cs
- RemotingConfigParser.cs
- RichTextBoxContextMenu.cs
- InternalSendMessage.cs
- String.cs
- TaskExceptionHolder.cs
- SplineQuaternionKeyFrame.cs
- ItemList.cs
- PrivilegeNotHeldException.cs
- WindowAutomationPeer.cs
- ThrowOnMultipleAssignment.cs
- FrameworkContentElementAutomationPeer.cs
- ConnectionManagementElement.cs
- HtmlControlAdapter.cs
- CodeAttributeDeclarationCollection.cs
- TypefaceCollection.cs
- OleDbPermission.cs
- TaskFactory.cs
- ExpressionNode.cs
- RenderingEventArgs.cs
- x509utils.cs
- TrustManager.cs
- DiscoveryReference.cs
- SuppressMergeCheckAttribute.cs
- KnownAssemblyEntry.cs
- ListViewContainer.cs
- StringConverter.cs
- FixedSchema.cs
- DispatcherProcessingDisabled.cs
- HtmlInputRadioButton.cs
- InsufficientMemoryException.cs
- SafeUserTokenHandle.cs
- ClientSideProviderDescription.cs
- ProjectedSlot.cs
- DoubleAnimationUsingPath.cs
- DBParameter.cs
- ObjectReaderCompiler.cs
- LinearGradientBrush.cs
- BaseTemplateBuildProvider.cs
- SecurityBindingElement.cs
- DocumentPage.cs
- XPathNodePointer.cs
- SmtpFailedRecipientException.cs
- DataServiceRequestOfT.cs
- TextBoxAutoCompleteSourceConverter.cs
- BooleanAnimationUsingKeyFrames.cs
- SimpleHandlerBuildProvider.cs
- AttributeUsageAttribute.cs
- ToolStripTextBox.cs
- PackagePart.cs
- InternalCache.cs
- ChildTable.cs
- TrackingDataItemValue.cs
- SoapAttributeOverrides.cs
- EntityTransaction.cs