1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
//------------------------------------------------------------------------------
// <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;
}
}
}
|