e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
154 lines
4.5 KiB
C#
154 lines
4.5 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="SoapExtensionStream.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Web.Services.Protocols {
|
|
using System;
|
|
using System.IO;
|
|
using System.Web.Services;
|
|
|
|
internal class SoapExtensionStream : Stream {
|
|
internal Stream innerStream;
|
|
bool hasWritten = false;
|
|
bool streamReady;
|
|
|
|
internal SoapExtensionStream() {
|
|
}
|
|
|
|
private bool EnsureStreamReady() {
|
|
if (streamReady) return true;
|
|
throw new InvalidOperationException(Res.GetString(Res.WebBadStreamState));
|
|
}
|
|
|
|
public override bool CanRead {
|
|
get {
|
|
EnsureStreamReady();
|
|
return innerStream.CanRead;
|
|
}
|
|
}
|
|
|
|
public override bool CanSeek {
|
|
get {
|
|
EnsureStreamReady();
|
|
return innerStream.CanSeek;
|
|
}
|
|
}
|
|
|
|
public override bool CanWrite {
|
|
get {
|
|
EnsureStreamReady();
|
|
return innerStream.CanWrite;
|
|
}
|
|
}
|
|
|
|
internal bool HasWritten
|
|
{
|
|
get { return this.hasWritten; }
|
|
}
|
|
|
|
public override long Length
|
|
{
|
|
get {
|
|
EnsureStreamReady();
|
|
return innerStream.Length;
|
|
}
|
|
}
|
|
|
|
public override long Position {
|
|
get {
|
|
EnsureStreamReady();
|
|
return innerStream.Position;
|
|
}
|
|
set {
|
|
EnsureStreamReady();
|
|
this.hasWritten = true;
|
|
innerStream.Position = value;
|
|
}
|
|
}
|
|
|
|
protected override void Dispose(bool disposing) {
|
|
try {
|
|
if (disposing) {
|
|
EnsureStreamReady();
|
|
this.hasWritten = true;
|
|
innerStream.Close();
|
|
}
|
|
}
|
|
finally {
|
|
base.Dispose(disposing);
|
|
}
|
|
}
|
|
|
|
public override void Flush() {
|
|
EnsureStreamReady();
|
|
this.hasWritten = true;
|
|
innerStream.Flush();
|
|
}
|
|
|
|
public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, Object state) {
|
|
EnsureStreamReady();
|
|
return innerStream.BeginRead(buffer, offset, count, callback, state);
|
|
}
|
|
|
|
public override int EndRead(IAsyncResult asyncResult) {
|
|
EnsureStreamReady();
|
|
return innerStream.EndRead(asyncResult);
|
|
}
|
|
|
|
public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, Object state) {
|
|
EnsureStreamReady();
|
|
this.hasWritten = true;
|
|
return innerStream.BeginWrite(buffer, offset, count, callback, state);
|
|
}
|
|
|
|
public override void EndWrite(IAsyncResult asyncResult) {
|
|
EnsureStreamReady();
|
|
this.hasWritten = true;
|
|
innerStream.EndWrite(asyncResult);
|
|
}
|
|
|
|
public override long Seek(long offset, SeekOrigin origin) {
|
|
EnsureStreamReady();
|
|
return innerStream.Seek(offset, origin);
|
|
}
|
|
|
|
public override void SetLength(long value) {
|
|
EnsureStreamReady();
|
|
innerStream.SetLength(value);
|
|
}
|
|
|
|
public override int Read(byte[] buffer, int offset, int count) {
|
|
EnsureStreamReady();
|
|
return innerStream.Read(buffer, offset, count);
|
|
}
|
|
|
|
public override int ReadByte() {
|
|
EnsureStreamReady();
|
|
return innerStream.ReadByte();
|
|
}
|
|
|
|
public override void Write(byte[] buffer, int offset, int count) {
|
|
EnsureStreamReady();
|
|
this.hasWritten = true;
|
|
innerStream.Write(buffer, offset, count);
|
|
}
|
|
|
|
public override void WriteByte(byte value) {
|
|
EnsureStreamReady();
|
|
this.hasWritten = true;
|
|
innerStream.WriteByte(value);
|
|
}
|
|
|
|
internal void SetInnerStream(Stream stream) {
|
|
innerStream = stream;
|
|
this.hasWritten = false;
|
|
}
|
|
|
|
internal void SetStreamReady() {
|
|
streamReady = true;
|
|
}
|
|
}
|
|
}
|