summaryrefslogtreecommitdiff
path: root/trunk/qpid/wcf/src/Apache/Qpid/Channel/RawMessage.cs
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/qpid/wcf/src/Apache/Qpid/Channel/RawMessage.cs')
-rw-r--r--trunk/qpid/wcf/src/Apache/Qpid/Channel/RawMessage.cs374
1 files changed, 0 insertions, 374 deletions
diff --git a/trunk/qpid/wcf/src/Apache/Qpid/Channel/RawMessage.cs b/trunk/qpid/wcf/src/Apache/Qpid/Channel/RawMessage.cs
deleted file mode 100644
index 5925fa47dc..0000000000
--- a/trunk/qpid/wcf/src/Apache/Qpid/Channel/RawMessage.cs
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-namespace Apache.Qpid.Channel
-{
- using System;
- using System.IO;
- using System.ServiceModel.Channels;
- using System.Xml;
-
- // This incoming Message is backed either by a Stream (bodyStream) or a byte array (bodyBytes).
- // If bodyBytes belongs to a BufferManager, we must return it when done.
- // The pay-off is OnGetReaderAtBodyContents().
- // Most of the complexity is dealing with the OnCreateBufferedCopy() machinery.
- internal class RawMessage : Message
- {
- private MessageHeaders headers;
- private MessageProperties properties;
- private XmlDictionaryReaderQuotas readerQuotas;
- private Stream bodyStream;
- private byte[] bodyBytes;
- private int index;
- private int count;
- private BufferManager bufferManager;
-
- public RawMessage(byte[] buffer, int index, int count, BufferManager bufferManager, XmlDictionaryReaderQuotas quotas)
- {
- // this constructor supports MessageEncoder.ReadMessage(ArraySegment<byte> b, BufferManager mgr, string contentType)
- if (quotas == null)
- {
- quotas = new XmlDictionaryReaderQuotas();
- }
-
- this.headers = new MessageHeaders(MessageVersion.None);
- this.properties = new MessageProperties();
- this.readerQuotas = quotas;
- this.bodyBytes = buffer;
- this.index = index;
- this.count = count;
- this.bufferManager = bufferManager;
- }
-
- public RawMessage(Stream stream, XmlDictionaryReaderQuotas quotas)
- {
- // this constructor supports MessageEncoder.ReadMessage(System.IO.Stream s, int max, string contentType)
- if (quotas == null)
- {
- quotas = new XmlDictionaryReaderQuotas();
- }
-
- this.headers = new MessageHeaders(MessageVersion.None);
- this.properties = new MessageProperties();
- this.bodyStream = stream;
- }
-
- public RawMessage(MessageHeaders headers, MessageProperties properties, byte[] bytes, int index, int count, XmlDictionaryReaderQuotas quotas)
- {
- // this constructor supports internal needs for CreateBufferedCopy().CreateMessage()
- this.headers = new MessageHeaders(headers);
- this.properties = new MessageProperties(properties);
- this.bodyBytes = bytes;
- this.index = index;
- this.count = count;
- this.readerQuotas = quotas;
- }
-
- public override MessageHeaders Headers
- {
- get
- {
- if (this.IsDisposed)
- {
- throw new ObjectDisposedException("message");
- }
-
- return this.headers;
- }
- }
-
- public override bool IsEmpty
- {
- get
- {
- if (this.IsDisposed)
- {
- throw new ObjectDisposedException("message");
- }
-
- return false;
- }
- }
-
- public override bool IsFault
- {
- get
- {
- if (this.IsDisposed)
- {
- throw new ObjectDisposedException("message");
- }
-
- return false;
- }
- }
-
- public override MessageProperties Properties
- {
- get
- {
- if (this.IsDisposed)
- {
- throw new ObjectDisposedException("message");
- }
-
- return this.properties;
- }
- }
-
- public override MessageVersion Version
- {
- get
- {
- if (this.IsDisposed)
- {
- throw new ObjectDisposedException("message");
- }
-
- return MessageVersion.None;
- }
- }
-
- protected override void OnBodyToString(XmlDictionaryWriter writer)
- {
- if (this.bodyStream != null)
- {
- writer.WriteString("Stream");
- }
- else
- {
- writer.WriteStartElement(RawMessageEncoder.StreamElementName, string.Empty);
- writer.WriteBase64(this.bodyBytes, this.index, this.count);
- writer.WriteEndElement();
- }
- }
-
- protected override void OnClose()
- {
- Exception deferEx = null;
- try
- {
- base.OnClose();
- }
- catch (Exception e)
- {
- deferEx = e;
- }
-
- try
- {
- if (this.properties != null)
- {
- this.properties.Dispose();
- }
- }
- catch (Exception e)
- {
- if (deferEx == null)
- {
- deferEx = e;
- }
- }
-
- try
- {
- if (this.bufferManager != null)
- {
- this.bufferManager.ReturnBuffer(this.bodyBytes);
- this.bufferManager = null;
- }
- }
- catch (Exception e)
- {
- if (deferEx == null)
- {
- deferEx = e;
- }
- }
-
- if (deferEx != null)
- {
- throw deferEx;
- }
- }
-
- protected override MessageBuffer OnCreateBufferedCopy(int maxBufferSize)
- {
- if (this.bodyStream != null)
- {
- int len = (int)this.bodyStream.Length;
- byte[] buf = new byte[len];
- this.bodyStream.Read(buf, 0, len);
- this.bodyStream = null;
- this.bodyBytes = buf;
- this.count = len;
- this.index = 0;
- }
- else
- {
- if (this.bufferManager != null)
- {
- // we could take steps to share the buffer among copies and release the memory
- // after the last user finishes by a reference count or such, but we are already
- // far from the intended optimized use. Make one GC managed memory copy that is
- // shared by all.
- byte[] buf = new byte[this.count];
-
- Buffer.BlockCopy(this.bodyBytes, this.index, buf, 0, this.count);
- this.bufferManager.ReturnBuffer(this.bodyBytes);
- this.bufferManager = null;
- this.bodyBytes = buf;
- this.index = 0;
- }
- }
-
- return new RawMessageBuffer(this.headers, this.properties, this.bodyBytes, this.index, this.count, this.readerQuotas);
- }
-
- protected override XmlDictionaryReader OnGetReaderAtBodyContents()
- {
- Stream readerStream = null;
- bool ownsStream;
-
- if (this.bodyStream != null)
- {
- readerStream = this.bodyStream;
- ownsStream = false;
- }
- else
- {
- // create stream for duration of XmlReader.
- ownsStream = true;
- if (this.bufferManager != null)
- {
- readerStream = new RawMemoryStream(this.bodyBytes, this.index, this.count, this.bufferManager);
- this.bufferManager = null;
- }
- else
- {
- readerStream = new MemoryStream(this.bodyBytes, this.index, this.count, false);
- }
- }
-
- return new RawXmlReader(readerStream, this.readerQuotas, ownsStream);
- }
-
- protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
- {
- writer.WriteStartElement(RawMessageEncoder.StreamElementName, string.Empty);
- if (this.bodyStream != null)
- {
- int len = (int)this.bodyStream.Length;
- byte[] buf = new byte[len];
- this.bodyStream.Read(buf, 0, len);
- writer.WriteBase64(buf, 0, len);
- }
- else
- {
- writer.WriteBase64(this.bodyBytes, this.index, this.count);
- }
-
- writer.WriteEndElement();
- }
-
- private class RawMemoryStream : MemoryStream
- {
- private BufferManager bufferManager;
- private byte[] buffer;
-
- public RawMemoryStream(byte[] bytes, int index, int count, BufferManager mgr)
- : base(bytes, index, count, false)
- {
- this.bufferManager = mgr;
- this.buffer = bytes;
- }
-
- protected override void Dispose(bool disposing)
- {
- if (this.bufferManager != null)
- {
- try
- {
- this.bufferManager.ReturnBuffer(this.buffer);
- }
- finally
- {
- this.bufferManager = null;
- base.Dispose(disposing);
- }
- }
- }
- }
-
- private class RawMessageBuffer : MessageBuffer
- {
- private bool closed;
- private MessageHeaders headers;
- private MessageProperties properties;
- private byte[] bodyBytes;
- private int index;
- private int count;
- private XmlDictionaryReaderQuotas readerQuotas;
-
- public RawMessageBuffer(MessageHeaders headers, MessageProperties properties, byte[] bytes, int index, int count, XmlDictionaryReaderQuotas quotas)
- : base()
- {
- this.headers = new MessageHeaders(headers);
- this.properties = new MessageProperties(properties);
- this.bodyBytes = bytes;
- this.index = index;
- this.count = count;
- this.readerQuotas = new XmlDictionaryReaderQuotas();
- quotas.CopyTo(this.readerQuotas);
- }
-
- public override int BufferSize
- {
- get { return this.count; }
- }
-
- public override void Close()
- {
- if (!this.closed)
- {
- this.closed = true;
- this.headers = null;
- if (this.properties != null)
- {
- this.properties.Dispose();
- this.properties = null;
- }
-
- this.bodyBytes = null;
- this.readerQuotas = null;
- }
- }
-
- public override Message CreateMessage()
- {
- if (this.closed)
- {
- throw new ObjectDisposedException("message");
- }
-
- return new RawMessage(this.headers, this.properties, this.bodyBytes, this.index, this.count, this.readerQuotas);
- }
- }
- }
-}