You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by st...@apache.org on 2006/12/06 17:30:17 UTC

svn commit: r483135 - in /incubator/qpid/trunk/qpid/dotnet: Qpid.Buffer/ Qpid.Client/ Qpid.Client/Client/ Qpid.Client/Client/Message/ Qpid.Codec/Support/ Qpid.Common/ Qpid.Common/Framing/

Author: steshaw
Date: Wed Dec  6 08:30:16 2006
New Revision: 483135

URL: http://svn.apache.org/viewvc?view=rev&rev=483135
Log:
QPID-128 Missed a couple of things while porting Java client changes recently.

Added:
    incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidHeaders.cs   (with props)
Modified:
    incubator/qpid/trunk/qpid/dotnet/Qpid.Buffer/HeapByteBuffer.cs
    incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/AmqChannel.cs
    incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/AbstractQmsMessage.cs
    incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidBytesMessage.cs
    incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidTextMessage.cs
    incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Qpid.Client.csproj
    incubator/qpid/trunk/qpid/dotnet/Qpid.Codec/Support/SimpleProtocolEncoderOutput.cs
    incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Framing/FieldTable.cs
    incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Qpid.Common.csproj

Modified: incubator/qpid/trunk/qpid/dotnet/Qpid.Buffer/HeapByteBuffer.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/dotnet/Qpid.Buffer/HeapByteBuffer.cs?view=diff&rev=483135&r1=483134&r2=483135
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/Qpid.Buffer/HeapByteBuffer.cs (original)
+++ incubator/qpid/trunk/qpid/dotnet/Qpid.Buffer/HeapByteBuffer.cs Wed Dec  6 08:30:16 2006
@@ -126,8 +126,11 @@
         }
 
         public override byte[] ToByteArray()
-        {            
-            return _underlyingData;         
+        {
+            // Return copy of bytes remaining.
+            byte[] result = new byte[Remaining];
+            Array.Copy(_underlyingData, _position, result, 0, Remaining);
+            return result;
         }
 
         private void CheckSpace(int size)

Modified: incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/AmqChannel.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/AmqChannel.cs?view=diff&rev=483135&r1=483134&r2=483135
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/AmqChannel.cs (original)
+++ incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/AmqChannel.cs Wed Dec  6 08:30:16 2006
@@ -23,6 +23,7 @@
 using System.Text.RegularExpressions;
 using System.Threading;
 using log4net;
+using Qpid.Buffer;
 using Qpid.Client.Message;
 using Qpid.Collections;
 using Qpid.Framing;
@@ -801,7 +802,25 @@
                 currentTime = DateTime.UtcNow.Ticks;
                 message.Timestamp = currentTime;
             }
-            byte[] payload = message.Data.ToByteArray();
+
+            //
+            // Very nasty temporary hack for GRM. Will be altered ASAP.
+            //
+            if (message is QpidBytesMessage)
+            {
+                QpidBytesMessage msg = (QpidBytesMessage) message;
+                if (!msg.IsReadable)
+                {
+                    msg.Reset();
+                }
+            }
+
+            ByteBuffer buf = message.Data;
+            byte[] payload = null;
+            if (buf != null)
+            {
+                payload = buf.ToByteArray();
+            }
             BasicContentHeaderProperties contentHeaderProperties = message.ContentHeaderProperties;
 
             if (timeToLive > 0)

Modified: incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/AbstractQmsMessage.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/AbstractQmsMessage.cs?view=diff&rev=483135&r1=483134&r2=483135
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/AbstractQmsMessage.cs (original)
+++ incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/AbstractQmsMessage.cs Wed Dec  6 08:30:16 2006
@@ -37,6 +37,7 @@
         protected bool _redelivered;
 
         protected ByteBuffer _data;
+        private bool _readableMessage = false;
 
         //protected AbstractQmsMessage() : base(new BasicContentHeaderProperties())
         //{           
@@ -64,6 +65,7 @@
             {
                 _data.Acquire();
             }
+            _readableMessage = (data != null);
         }
 
         protected AbstractQmsMessage(long deliveryTag, BasicContentHeaderProperties contentHeader, ByteBuffer data)
@@ -74,6 +76,7 @@
             {
                 _data.Acquire();
             }
+            _readableMessage = data != null;
         }
 
         protected AbstractQmsMessage(BasicContentHeaderProperties contentHeader, long deliveryTag) : base(contentHeader, deliveryTag)
@@ -113,6 +116,14 @@
             }
         }        
 
+        protected void CheckReadable()
+        {
+            if (!_readableMessage)
+            {
+                throw new MessageNotReadableException("You need to call reset() to make the message readable");
+            }
+        }
+
         public byte[] CorrelationIdAsBytes
         {
             get
@@ -339,7 +350,13 @@
             get { return new QpidHeaders(this); }
         }
 
-        public abstract void ClearBody();
+        public abstract void ClearBodyImpl();
+
+        public void ClearBody()
+        {
+            ClearBodyImpl();
+            _readableMessage = false;
+        }
 
         /// <summary>
         /// Get a String representation of the body of the message. Used in the
@@ -471,352 +488,20 @@
                 return (BasicContentHeaderProperties) _contentHeaderProperties;
             }
         }
-    }
-
-    internal class QpidHeaders : IHeaders
-    {
-        public const char BOOLEAN_PROPERTY_PREFIX = 'B';
-        public const char BYTE_PROPERTY_PREFIX = 'b';
-        public const char SHORT_PROPERTY_PREFIX = 's';
-        public const char INT_PROPERTY_PREFIX = 'i';
-        public const char LONG_PROPERTY_PREFIX = 'l';
-        public const char FLOAT_PROPERTY_PREFIX = 'f';
-        public const char DOUBLE_PROPERTY_PREFIX = 'd';
-        public const char STRING_PROPERTY_PREFIX = 'S';
-
-        AbstractQmsMessage _message;
-        
-        public QpidHeaders(AbstractQmsMessage message)
-        {
-            _message = message;
-        }
-
-        public bool Contains(string name)
-        {
-            CheckPropertyName(name);
-            if (_message.ContentHeaderProperties.Headers == null)
-            {
-                return false;
-            }
-            else
-            {
-                // TODO: fix this
-                return _message.ContentHeaderProperties.Headers.Contains(STRING_PROPERTY_PREFIX + name);
-            }
-        }
-
-        public void Clear()
-        {
-            if (_message.ContentHeaderProperties.Headers != null)
-            {
-                _message.ContentHeaderProperties.Headers.Clear();
-            }
-        }
-
-        public string this[string name]
-        {
-            get 
-            { 
-                return GetString(name);
-            }
-            set
-            {
-                SetString(name, value);
-            }
-        }
-
-        public bool GetBoolean(string name)
-        {
-            CheckPropertyName(name);
-            if (_message.ContentHeaderProperties.Headers == null)
-            {
-                return false;
-            }
-            else
-            {
-                object b = _message.ContentHeaderProperties.Headers[BOOLEAN_PROPERTY_PREFIX + name];
-
-                if (b == null)
-                {
-                    return false;
-                }
-                else
-                {
-                    return (bool)b;
-                }
-            }
-        }
-
-        public void SetBoolean(string name, bool b)
-        {
-            CheckPropertyName(name);
-            _message.ContentHeaderProperties.Headers[BOOLEAN_PROPERTY_PREFIX + name] = b;
-        }
-
-        public byte GetByte(string propertyName)
-        {
-            CheckPropertyName(propertyName);
-            if (_message.ContentHeaderProperties.Headers == null)
-            {
-                return 0;
-            }
-            else
-            {
-                object b = _message.ContentHeaderProperties.Headers[BYTE_PROPERTY_PREFIX + propertyName];
-                if (b == null)
-                {
-                    return 0;
-                }
-                else
-                {
-                    return (byte)b;
-                }
-            }
-        }
-
-        public void SetByte(string propertyName, byte b)
-        {
-            CheckPropertyName(propertyName);
-            _message.ContentHeaderProperties.Headers[BYTE_PROPERTY_PREFIX + propertyName] = b;
-        }
-
-        public short GetShort(string propertyName)
-        {
-            CheckPropertyName(propertyName);
-            if (_message.ContentHeaderProperties.Headers == null)
-            {
-                return 0;
-            }
-            else
-            {
-                object s = _message.ContentHeaderProperties.Headers[SHORT_PROPERTY_PREFIX + propertyName];
-                if (s == null)
-                {
-                    return 0;
-                }
-                else
-                {
-                    return (short)s;
-                }
-            }
-        }
-
-        public void SetShort(string propertyName, short i)
-        {
-            CheckPropertyName(propertyName);
-            _message.ContentHeaderProperties.Headers[SHORT_PROPERTY_PREFIX + propertyName] = i;
-        }
-
-        public int GetInt(string propertyName)
-        {
-            CheckPropertyName(propertyName);
-            if (_message.ContentHeaderProperties.Headers == null)
-            {
-                return 0;
-            }
-            else
-            {
-                object i = _message.ContentHeaderProperties.Headers[INT_PROPERTY_PREFIX + propertyName];
-                if (i == null)
-                {
-                    return 0;
-                }
-                else
-                {
-                    return (int)i;
-                }
-            }
-        }
-
-        public void SetInt(string propertyName, int i)
-        {
-            CheckPropertyName(propertyName);
-            _message.ContentHeaderProperties.Headers[INT_PROPERTY_PREFIX + propertyName] = i;
-        }
-
-        public long GetLong(string propertyName)
-        {
-            CheckPropertyName(propertyName);
-            if (_message.ContentHeaderProperties.Headers == null)
-            {
-                return 0;
-            }
-            else
-            {
-                object l = _message.ContentHeaderProperties.Headers[LONG_PROPERTY_PREFIX + propertyName];
-                if (l == null)
-                {
-                    // temp - the spec says do this but this throws a NumberFormatException
-                    //return Long.valueOf(null).longValue();
-                    return 0;
-                }
-                else
-                {
-                    return (long)l;
-                }
-            }
-        }
-
-        public void SetLong(string propertyName, long l)
-        {
-            CheckPropertyName(propertyName);
-            _message.ContentHeaderProperties.Headers[LONG_PROPERTY_PREFIX + propertyName] = l;
-        }
-
-        public float GetFloat(String propertyName)
-        {
-            CheckPropertyName(propertyName);
-            if (_message.ContentHeaderProperties.Headers == null)
-            {
-                return 0;
-            }
-            else
-            {
-                object f = _message.ContentHeaderProperties.Headers[FLOAT_PROPERTY_PREFIX + propertyName];
-                if (f == null)
-                {
-                    return 0;
-                }
-                else
-                {
-                    return (float)f;
-                }
-            }
-        }
-
-        public void SetFloat(string propertyName, float f)
-        {
-            CheckPropertyName(propertyName);
-            _message.ContentHeaderProperties.Headers[FLOAT_PROPERTY_PREFIX + propertyName] = f;
-        }
-
-        public double GetDouble(string propertyName)
-        {
-            CheckPropertyName(propertyName);
-            if (_message.ContentHeaderProperties.Headers == null)
-            {
-                return 0;
-            }
-            else
-            {
-                object d = _message.ContentHeaderProperties.Headers[DOUBLE_PROPERTY_PREFIX + propertyName];
-                if (d == null)
-                {
-                    return 0;
-                }
-                else
-                {
-                    return (double)d;
-                }
-            }
-        }
-
-        public void SetDouble(string propertyName, double v)
-        {
-            CheckPropertyName(propertyName);
-            _message.ContentHeaderProperties.Headers[DOUBLE_PROPERTY_PREFIX + propertyName] = v;
-        }
-
-        public string GetString(string propertyName)
-        {
-            CheckPropertyName(propertyName);
-            if (_message.ContentHeaderProperties.Headers == null)
-            {
-                return null;
-            }
-            else
-            {
-                return (string)_message.ContentHeaderProperties.Headers[STRING_PROPERTY_PREFIX + propertyName];
-            }
-        }
-
-        public void SetString(string propertyName, string value)
-        {
-            CheckPropertyName(propertyName);
-            CreatePropertyMapIfRequired();
-            propertyName = STRING_PROPERTY_PREFIX + propertyName;
-            _message.ContentHeaderProperties.Headers[propertyName] = value;
-        }
-
-        private void CheckPropertyName(string propertyName)
-        {
-            if (propertyName == null)
-            {
-                throw new ArgumentException("Property name must not be null");
-            }
-            else if ("".Equals(propertyName))
-            {
-                throw new ArgumentException("Property name must not be the empty string");
-            }
-
-            if (_message.ContentHeaderProperties.Headers == null)
-            {
-                _message.ContentHeaderProperties.Headers = new FieldTable();
-            }
-        }
 
-        private void CreatePropertyMapIfRequired()
+        protected void Reset()
         {
-            if (_message.ContentHeaderProperties.Headers == null)
-            {
-                _message.ContentHeaderProperties.Headers = new FieldTable();
-            }
+            _readableMessage = true;
         }
 
-        public override string ToString()
+        public bool IsReadable
         {
-            StringBuilder buf = new StringBuilder("{");
-            int i = 0;
-            foreach (DictionaryEntry entry in _message.ContentHeaderProperties.Headers)
-            {
-                ++i;
-                if (i > 1)
-                {
-                    buf.Append(", ");
-                }
-                string propertyName = (string)entry.Key;
-                if (propertyName == null)
-                {
-                    buf.Append("\nInternal error: Property with NULL key defined");
-                }
-                else
-                {
-                    buf.Append(propertyName.Substring(1));
-
-                    buf.Append(" : ");
-
-                    char typeIdentifier = propertyName[0];
-                    buf.Append(typeIdentifierToName(typeIdentifier));
-                    buf.Append(" = ").Append(entry.Value);
-                }
-            }
-            buf.Append("}");
-            return buf.ToString();
+            get { return _readableMessage; }
         }
 
-        private static string typeIdentifierToName(char typeIdentifier)
+        public bool isWritable
         {
-            switch (typeIdentifier)
-            {
-                case BOOLEAN_PROPERTY_PREFIX:
-                    return "boolean";
-                case BYTE_PROPERTY_PREFIX:
-                    return "byte";
-                case SHORT_PROPERTY_PREFIX:
-                    return "short";
-                case INT_PROPERTY_PREFIX:
-                    return "int";
-                case LONG_PROPERTY_PREFIX:
-                    return "long";
-                case FLOAT_PROPERTY_PREFIX:
-                    return "float";
-                case DOUBLE_PROPERTY_PREFIX:
-                    return "double";
-                case STRING_PROPERTY_PREFIX:
-                    return "string";
-                default:
-                    return "unknown ( '" + typeIdentifier + "')";
-            }
+            get { return !_readableMessage; }
         }
     }
 }

Modified: incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidBytesMessage.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidBytesMessage.cs?view=diff&rev=483135&r1=483134&r2=483135
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidBytesMessage.cs (original)
+++ incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidBytesMessage.cs Wed Dec  6 08:30:16 2006
@@ -31,6 +31,8 @@
     {
         private const string MIME_TYPE = "application/octet-stream";
 
+        private const int DEFAULT_BUFFER_INITIAL_SIZE = 1024;
+
         /// <summary>
         /// The backingstore for the data
         /// </summary>
@@ -57,6 +59,8 @@
             ContentHeaderProperties.ContentType = MIME_TYPE;
             if (data == null)
             {
+                _data = ByteBuffer.Allocate(DEFAULT_BUFFER_INITIAL_SIZE);
+                //_data.AutoExpand = true;
                 _dataStream = new MemoryStream();
                 _writer = new BinaryWriter(_dataStream);
             }
@@ -76,22 +80,27 @@
             _dataStream = new MemoryStream(data.ToByteArray());
             _bodyLength = data.ToByteArray().Length;
             _reader = new BinaryReader(_dataStream);
+        
         }
 
-
-        public override void ClearBody()
+        public override void ClearBodyImpl()
         {
-            if (_reader != null)
-            {
-                _reader.Close();
-                _reader = null;
-            }
-            _dataStream = new MemoryStream();
-            _bodyLength = 0;
-            
-            _writer = new BinaryWriter(_dataStream);
+            _data.Clear();
         }
 
+//        public override void ClearBody()
+//        {
+//            if (_reader != null)
+//            {
+//                _reader.Close();
+//                _reader = null;
+//            }
+//            _dataStream = new MemoryStream();
+//            _bodyLength = 0;
+//            
+//            _writer = new BinaryWriter(_dataStream);
+//        }
+
         public override string ToBodyString()
         {
             CheckReadable();
@@ -156,7 +165,8 @@
             get
             {
                 CheckReadable();
-                return _bodyLength;
+                return _data.Limit; // XXX
+//                return _bodyLength;
             }
         }
 
@@ -164,13 +174,14 @@
         ///  
         /// </summary>
         /// <exception cref="MessageNotReadableException">if the message is in write mode</exception>
-        private void CheckReadable() 
-        {
-            if (_reader == null)
-            {
-                throw new MessageNotReadableException("You need to call reset() to make the message readable");
-            }
-        }
+//        private void CheckReadable() 
+//        {
+//
+//            if (_reader == null)
+//            {
+//                throw new MessageNotReadableException("You need to call reset() to make the message readable");
+//            }
+//        }
 
         private void CheckWritable()
         {
@@ -565,18 +576,21 @@
 
         public void Reset()
         {
-            CheckWritable();
-            try
-            {
-                _writer.Close();
-                _writer = null;
-                _reader = new BinaryReader(_dataStream);
-                _bodyLength = (int) _dataStream.Length;
-            }
-            catch (IOException e)
-            {
-                throw new QpidException(e.ToString(), e);
-            }
+            base.Reset();
+            _data.Flip();
+
+//            CheckWritable();
+//            try
+//            {
+//                _writer.Close();
+//                _writer = null;
+//                _reader = new BinaryReader(_dataStream);
+//                _bodyLength = (int) _dataStream.Length;
+//            }
+//            catch (IOException e)
+//            {
+//                throw new QpidException(e.ToString(), e);
+//            }
         }        
     }
 }

Added: incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidHeaders.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidHeaders.cs?view=auto&rev=483135
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidHeaders.cs (added)
+++ incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidHeaders.cs Wed Dec  6 08:30:16 2006
@@ -0,0 +1,356 @@
+using System;
+using System.Collections;
+using System.Text;
+using Qpid.Framing;
+using Qpid.Messaging;
+
+namespace Qpid.Client.Message
+{
+    internal class QpidHeaders : IHeaders
+    {
+        public const char BOOLEAN_PROPERTY_PREFIX = 'B';
+        public const char BYTE_PROPERTY_PREFIX = 'b';
+        public const char SHORT_PROPERTY_PREFIX = 's';
+        public const char INT_PROPERTY_PREFIX = 'i';
+        public const char LONG_PROPERTY_PREFIX = 'l';
+        public const char FLOAT_PROPERTY_PREFIX = 'f';
+        public const char DOUBLE_PROPERTY_PREFIX = 'd';
+        public const char STRING_PROPERTY_PREFIX = 'S';
+
+        AbstractQmsMessage _message;
+        
+        public QpidHeaders(AbstractQmsMessage message)
+        {
+            _message = message;
+        }
+
+        public bool Contains(string name)
+        {
+            CheckPropertyName(name);
+            if (_message.ContentHeaderProperties.Headers == null)
+            {
+                return false;
+            }
+            else
+            {
+                // TODO: fix this
+                return _message.ContentHeaderProperties.Headers.Contains(STRING_PROPERTY_PREFIX + name);
+            }
+        }
+
+        public void Clear()
+        {
+            if (_message.ContentHeaderProperties.Headers != null)
+            {
+                _message.ContentHeaderProperties.Headers.Clear();
+            }
+        }
+
+        public string this[string name]
+        {
+            get 
+            { 
+                return GetString(name);
+            }
+            set
+            {
+                SetString(name, value);
+            }
+        }
+
+        public bool GetBoolean(string name)
+        {
+            CheckPropertyName(name);
+            if (_message.ContentHeaderProperties.Headers == null)
+            {
+                return false;
+            }
+            else
+            {
+                object b = _message.ContentHeaderProperties.Headers[BOOLEAN_PROPERTY_PREFIX + name];
+
+                if (b == null)
+                {
+                    return false;
+                }
+                else
+                {
+                    return (bool)b;
+                }
+            }
+        }
+
+        public void SetBoolean(string name, bool b)
+        {
+            CheckPropertyName(name);
+            _message.ContentHeaderProperties.Headers[BOOLEAN_PROPERTY_PREFIX + name] = b;
+        }
+
+        public byte GetByte(string propertyName)
+        {
+            CheckPropertyName(propertyName);
+            if (_message.ContentHeaderProperties.Headers == null)
+            {
+                return 0;
+            }
+            else
+            {
+                object b = _message.ContentHeaderProperties.Headers[BYTE_PROPERTY_PREFIX + propertyName];
+                if (b == null)
+                {
+                    return 0;
+                }
+                else
+                {
+                    return (byte)b;
+                }
+            }
+        }
+
+        public void SetByte(string propertyName, byte b)
+        {
+            CheckPropertyName(propertyName);
+            _message.ContentHeaderProperties.Headers[BYTE_PROPERTY_PREFIX + propertyName] = b;
+        }
+
+        public short GetShort(string propertyName)
+        {
+            CheckPropertyName(propertyName);
+            if (_message.ContentHeaderProperties.Headers == null)
+            {
+                return 0;
+            }
+            else
+            {
+                object s = _message.ContentHeaderProperties.Headers[SHORT_PROPERTY_PREFIX + propertyName];
+                if (s == null)
+                {
+                    return 0;
+                }
+                else
+                {
+                    return (short)s;
+                }
+            }
+        }
+
+        public void SetShort(string propertyName, short i)
+        {
+            CheckPropertyName(propertyName);
+            _message.ContentHeaderProperties.Headers[SHORT_PROPERTY_PREFIX + propertyName] = i;
+        }
+
+        public int GetInt(string propertyName)
+        {
+            CheckPropertyName(propertyName);
+            if (_message.ContentHeaderProperties.Headers == null)
+            {
+                return 0;
+            }
+            else
+            {
+                object i = _message.ContentHeaderProperties.Headers[INT_PROPERTY_PREFIX + propertyName];
+                if (i == null)
+                {
+                    return 0;
+                }
+                else
+                {
+                    return (int)i;
+                }
+            }
+        }
+
+        public void SetInt(string propertyName, int i)
+        {
+            CheckPropertyName(propertyName);
+            _message.ContentHeaderProperties.Headers[INT_PROPERTY_PREFIX + propertyName] = i;
+        }
+
+        public long GetLong(string propertyName)
+        {
+            CheckPropertyName(propertyName);
+            if (_message.ContentHeaderProperties.Headers == null)
+            {
+                return 0;
+            }
+            else
+            {
+                object l = _message.ContentHeaderProperties.Headers[LONG_PROPERTY_PREFIX + propertyName];
+                if (l == null)
+                {
+                    // temp - the spec says do this but this throws a NumberFormatException
+                    //return Long.valueOf(null).longValue();
+                    return 0;
+                }
+                else
+                {
+                    return (long)l;
+                }
+            }
+        }
+
+        public void SetLong(string propertyName, long l)
+        {
+            CheckPropertyName(propertyName);
+            _message.ContentHeaderProperties.Headers[LONG_PROPERTY_PREFIX + propertyName] = l;
+        }
+
+        public float GetFloat(String propertyName)
+        {
+            CheckPropertyName(propertyName);
+            if (_message.ContentHeaderProperties.Headers == null)
+            {
+                return 0;
+            }
+            else
+            {
+                object f = _message.ContentHeaderProperties.Headers[FLOAT_PROPERTY_PREFIX + propertyName];
+                if (f == null)
+                {
+                    return 0;
+                }
+                else
+                {
+                    return (float)f;
+                }
+            }
+        }
+
+        public void SetFloat(string propertyName, float f)
+        {
+            CheckPropertyName(propertyName);
+            _message.ContentHeaderProperties.Headers[FLOAT_PROPERTY_PREFIX + propertyName] = f;
+        }
+
+        public double GetDouble(string propertyName)
+        {
+            CheckPropertyName(propertyName);
+            if (_message.ContentHeaderProperties.Headers == null)
+            {
+                return 0;
+            }
+            else
+            {
+                object d = _message.ContentHeaderProperties.Headers[DOUBLE_PROPERTY_PREFIX + propertyName];
+                if (d == null)
+                {
+                    return 0;
+                }
+                else
+                {
+                    return (double)d;
+                }
+            }
+        }
+
+        public void SetDouble(string propertyName, double v)
+        {
+            CheckPropertyName(propertyName);
+            _message.ContentHeaderProperties.Headers[DOUBLE_PROPERTY_PREFIX + propertyName] = v;
+        }
+
+        public string GetString(string propertyName)
+        {
+            CheckPropertyName(propertyName);
+            if (_message.ContentHeaderProperties.Headers == null)
+            {
+                return null;
+            }
+            else
+            {
+                return (string)_message.ContentHeaderProperties.Headers[STRING_PROPERTY_PREFIX + propertyName];
+            }
+        }
+
+        public void SetString(string propertyName, string value)
+        {
+            CheckPropertyName(propertyName);
+            CreatePropertyMapIfRequired();
+            propertyName = STRING_PROPERTY_PREFIX + propertyName;
+            _message.ContentHeaderProperties.Headers[propertyName] = value;
+        }
+
+        private void CheckPropertyName(string propertyName)
+        {
+            if (propertyName == null)
+            {
+                throw new ArgumentException("Property name must not be null");
+            }
+            else if ("".Equals(propertyName))
+            {
+                throw new ArgumentException("Property name must not be the empty string");
+            }
+
+            if (_message.ContentHeaderProperties.Headers == null)
+            {
+                _message.ContentHeaderProperties.Headers = new FieldTable();
+            }
+        }
+
+        private void CreatePropertyMapIfRequired()
+        {
+            if (_message.ContentHeaderProperties.Headers == null)
+            {
+                _message.ContentHeaderProperties.Headers = new FieldTable();
+            }
+        }
+
+        public override string ToString()
+        {
+            StringBuilder buf = new StringBuilder("{");
+            int i = 0;
+            foreach (DictionaryEntry entry in _message.ContentHeaderProperties.Headers)
+            {
+                ++i;
+                if (i > 1)
+                {
+                    buf.Append(", ");
+                }
+                string propertyName = (string)entry.Key;
+                if (propertyName == null)
+                {
+                    buf.Append("\nInternal error: Property with NULL key defined");
+                }
+                else
+                {
+                    buf.Append(propertyName.Substring(1));
+
+                    buf.Append(" : ");
+
+                    char typeIdentifier = propertyName[0];
+                    buf.Append(typeIdentifierToName(typeIdentifier));
+                    buf.Append(" = ").Append(entry.Value);
+                }
+            }
+            buf.Append("}");
+            return buf.ToString();
+        }
+
+        private static string typeIdentifierToName(char typeIdentifier)
+        {
+            switch (typeIdentifier)
+            {
+                case BOOLEAN_PROPERTY_PREFIX:
+                    return "boolean";
+                case BYTE_PROPERTY_PREFIX:
+                    return "byte";
+                case SHORT_PROPERTY_PREFIX:
+                    return "short";
+                case INT_PROPERTY_PREFIX:
+                    return "int";
+                case LONG_PROPERTY_PREFIX:
+                    return "long";
+                case FLOAT_PROPERTY_PREFIX:
+                    return "float";
+                case DOUBLE_PROPERTY_PREFIX:
+                    return "double";
+                case STRING_PROPERTY_PREFIX:
+                    return "string";
+                default:
+                    return "unknown ( '" + typeIdentifier + "')";
+            }
+        }
+
+    }
+}
\ No newline at end of file

Propchange: incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidHeaders.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidTextMessage.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidTextMessage.cs?view=diff&rev=483135&r1=483134&r2=483135
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidTextMessage.cs (original)
+++ incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Client/Message/QpidTextMessage.cs Wed Dec  6 08:30:16 2006
@@ -86,8 +86,12 @@
             Text = text;
         }
 
-        public override void ClearBody()
+        public override void ClearBodyImpl()
         {
+            if (_data != null)
+            {
+                _data.Release();
+            }
             _data = null;
             _decodedValue = null;
         }

Modified: incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Qpid.Client.csproj
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Qpid.Client.csproj?view=diff&rev=483135&r1=483134&r2=483135
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Qpid.Client.csproj (original)
+++ incubator/qpid/trunk/qpid/dotnet/Qpid.Client/Qpid.Client.csproj Wed Dec  6 08:30:16 2006
@@ -42,6 +42,7 @@
     <Compile Include="Client\AMQConnectionException.cs" />
     <Compile Include="Client\AMQDestination.cs" />
     <Compile Include="Client\AmqChannel.cs" />
+    <Compile Include="Client\Message\QpidHeaders.cs" />
     <Compile Include="Client\QpidConnectionInfo.cs" />
     <Compile Include="Client\BasicMessageConsumer.cs" />
     <Compile Include="Client\BasicMessageProducer.cs" />
@@ -106,13 +107,13 @@
     <Compile Include="qms\UrlSyntaxException.cs" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\Qpid.Codec\Qpid.Codec.csproj">
-      <Project>{22D0D0C2-77AF-4DE3-B456-7FF3893F9F88}</Project>
-      <Name>Qpid.Codec</Name>
-    </ProjectReference>
     <ProjectReference Include="..\Qpid.Buffer\Qpid.Buffer.csproj">
       <Project>{44384DF2-B0A4-4580-BDBC-EE4BAA87D995}</Project>
       <Name>Qpid.Buffer</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\Qpid.Codec\Qpid.Codec.csproj">
+      <Project>{22D0D0C2-77AF-4DE3-B456-7FF3893F9F88}</Project>
+      <Name>Qpid.Codec</Name>
     </ProjectReference>
     <ProjectReference Include="..\Qpid.Messaging\Qpid.Messaging.csproj">
       <Project>{6688F826-C58E-4C1B-AA1F-22AFAB4B7D07}</Project>

Modified: incubator/qpid/trunk/qpid/dotnet/Qpid.Codec/Support/SimpleProtocolEncoderOutput.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/dotnet/Qpid.Codec/Support/SimpleProtocolEncoderOutput.cs?view=diff&rev=483135&r1=483134&r2=483135
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/Qpid.Codec/Support/SimpleProtocolEncoderOutput.cs (original)
+++ incubator/qpid/trunk/qpid/dotnet/Qpid.Codec/Support/SimpleProtocolEncoderOutput.cs Wed Dec  6 08:30:16 2006
@@ -41,4 +41,3 @@
         }       
     }
 }
-

Modified: incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Framing/FieldTable.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Framing/FieldTable.cs?view=diff&rev=483135&r1=483134&r2=483135
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Framing/FieldTable.cs (original)
+++ incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Framing/FieldTable.cs Wed Dec  6 08:30:16 2006
@@ -74,7 +74,7 @@
                         value = buffer.GetUnsignedInt();
                         break;
                     default:
-                        throw new AMQFrameDecodingException("Unsupported field table type: " + type);
+                        throw new AMQFrameDecodingException("Unsupported field table type: '" + type + "' charcode" + (int)type);
                 }
                 sizeRead += (sizeRemaining - buffer.Remaining);
                 

Modified: incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Qpid.Common.csproj
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Qpid.Common.csproj?view=diff&rev=483135&r1=483134&r2=483135
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Qpid.Common.csproj (original)
+++ incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Qpid.Common.csproj Wed Dec  6 08:30:16 2006
@@ -168,13 +168,13 @@
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\Qpid.Codec\Qpid.Codec.csproj">
-      <Project>{22D0D0C2-77AF-4DE3-B456-7FF3893F9F88}</Project>
-      <Name>Qpid.Codec</Name>
-    </ProjectReference>
     <ProjectReference Include="..\Qpid.Buffer\Qpid.Buffer.csproj">
       <Project>{44384DF2-B0A4-4580-BDBC-EE4BAA87D995}</Project>
       <Name>Qpid.Buffer</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\Qpid.Codec\Qpid.Codec.csproj">
+      <Project>{22D0D0C2-77AF-4DE3-B456-7FF3893F9F88}</Project>
+      <Name>Qpid.Codec</Name>
     </ProjectReference>
     <ProjectReference Include="..\Qpid.Messaging\Qpid.Messaging.csproj">
       <Project>{6688F826-C58E-4C1B-AA1F-22AFAB4B7D07}</Project>