1 files changed, 52 insertions, 0 deletions
diff --git a/Crypto/src/cms/CMSProcessableInputStream.cs b/Crypto/src/cms/CMSProcessableInputStream.cs
new file mode 100644
index 000000000..d10d059c6
--- /dev/null
+++ b/Crypto/src/cms/CMSProcessableInputStream.cs
@@ -0,0 +1,52 @@
+using System;
+using System.IO;
+
+using Org.BouncyCastle.Utilities.IO;
+
+namespace Org.BouncyCastle.Cms
+{
+ public class CmsProcessableInputStream
+ : CmsProcessable, CmsReadable
+ {
+ private Stream input;
+ private bool used = false;
+
+ public CmsProcessableInputStream(
+ Stream input)
+ {
+ this.input = input;
+ }
+
+ public Stream GetInputStream()
+ {
+ CheckSingleUsage();
+
+ return input;
+ }
+
+ public void Write(Stream output)
+ {
+ CheckSingleUsage();
+
+ Streams.PipeAll(input, output);
+ input.Dispose();
+ }
+
+ [Obsolete]
+ public object GetContent()
+ {
+ return GetInputStream();
+ }
+
+ private void CheckSingleUsage()
+ {
+ lock (this)
+ {
+ if (used)
+ throw new InvalidOperationException("CmsProcessableInputStream can only be used once");
+
+ used = true;
+ }
+ }
+ }
+}
|