You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2007/02/13 17:56:04 UTC
svn commit: r507096 [2/2] - in /incubator/qpid/trunk/qpid/dotnet:
Qpid.Buffer/ Qpid.Common.Tests/ Qpid.Common.Tests/Qpid/Framing/
Qpid.Common/ Qpid.Common/Framing/
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=507096&r1=507095&r2=507096
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Framing/FieldTable.cs (original)
+++ incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Framing/FieldTable.cs Tue Feb 13 08:56:03 2007
@@ -21,153 +21,274 @@
using System;
using System.Collections;
using System.Text;
+using log4net;
using Qpid.Buffer;
using Qpid.Collections;
using Qpid.Messaging;
namespace Qpid.Framing
{
- ///
- /// From the protocol document:
- /// field-table = short-integer *field-value-pair
- /// field-value-pair = field-name field-value
- /// field-name = short-string
- /// field-value = 'S' long-string
- /// 'I' long-integer
- /// 'D' decimal-value
- /// 'T' long-integer
- /// decimal-value = decimals long-integer
- /// decimals = OCTET
- public class FieldTable : IFieldTable
+ public class FieldTable : IFieldTable, IEnumerable
{
- IDictionary _hash = new LinkedHashtable();
-
- private uint _encodedSize = 0;
+ private static readonly ILog _log = LogManager.GetLogger(typeof(FieldTable));
+
+ IDictionary _properties;
+ private ByteBuffer _encodedForm;
+ private object _syncLock;
+ private uint _encodedSize;
public FieldTable()
{
+ _syncLock = new object();
}
- /**
- * Construct a new field table.
- * @param buffer the buffer from which to read data. The length byte must be read already
- * @param length the length of the field table. Must be > 0.
- * @throws AMQFrameDecodingException if there is an error decoding the table
- */
- public FieldTable(ByteBuffer buffer, uint length)
- {
- _encodedSize = length;
- int sizeRead = 0;
- while (sizeRead < _encodedSize)
- {
- int sizeRemaining = buffer.remaining();
- string key = EncodingUtils.ReadShortString(buffer);
- // TODO: use proper charset decoder
- char type = (char)buffer.get();
- object value;
- switch (type)
- {
- case 'S':
- value = EncodingUtils.ReadLongString(buffer);
- break;
- case 'I':
- value = buffer.GetUnsignedInt();
- break;
- default:
- throw new AMQFrameDecodingException("Unsupported field table type: '" + type + "' charcode" + (int)type);
- }
- sizeRead += (sizeRemaining - buffer.remaining());
-
- _hash.Add(key, value);
- }
+ /// <summary>
+ /// Construct a new field table.
+ /// </summary>
+ /// <param name="buffer">the buffer from which to read data. The length byte must be read already</param>
+ /// <param name="length">the length of the field table. Must be > 0.</param>
+ /// <exception cref="AMQFrameDecodingException">if there is an error decoding the table</exception>
+ public FieldTable(ByteBuffer buffer, uint length) : this()
+ {
+ _encodedForm = buffer.slice();
+ _encodedForm.limit((int)length);
+ _encodedSize = length;
+ buffer.skip((int)length);
+ }
+
+ /// <summary>
+ /// The set of all property names
+ /// </summary>
+ public ICollection Keys
+ {
+ get
+ {
+ InitMapIfNecessary();
+ return _properties.Keys;
+ }
}
+ /// <summary>
+ /// Calculated size of this field table once encoded
+ /// </summary>
public uint EncodedSize
{
- get
- {
- return _encodedSize;
- }
+ get { return _encodedSize; }
}
+ /// <summary>
+ /// Number of properties in the field table
+ /// </summary>
public int Count
{
- get { return _hash.Count; }
+ get
+ {
+ InitMapIfNecessary();
+ return _properties.Count;
+ }
}
+ /// <summary>
+ /// Gets or sets the specified property.
+ /// </summary>
+ /// <param name="key">Property name</param>
+ /// <returns>The specified property value</returns>
public object this[string key]
- {
- get
- {
- CheckKey(key);
- return _hash[key];
- }
+ {
+ get { return GetObject(key); }
+ set { SetObject(key, value); }
+ }
- set
- {
- CheckKey(key);
- CheckValue(value);
+ #region Typed Setters and Getters
+ //
+ // Typed Setters and Getters
+ //
+ public bool GetBoolean(string key)
+ {
+ return (bool)this[key];
+ }
+ public void SetBoolean(string key, bool value)
+ {
+ CheckPropertyName(key);
+ SetProperty(key, AMQType.BOOLEAN.AsTypedValue(value));
+ }
+ public byte GetByte(string key)
+ {
+ return (byte)this[key];
+ }
+ public void SetByte(string key, byte value)
+ {
+ CheckPropertyName(key);
+ SetProperty(key, AMQType.BYTE.AsTypedValue(value));
+ }
+ public sbyte GetSByte(string key)
+ {
+ return (sbyte)this[key];
+ }
+ public void SetSByte(string key, sbyte value)
+ {
+ CheckPropertyName(key);
+ SetProperty(key, AMQType.SBYTE.AsTypedValue(value));
+ }
+ public short GetInt16(string key)
+ {
+ return (short)this[key];
+ }
+ public void SetInt16(string key, short value)
+ {
+ CheckPropertyName(key);
+ SetProperty(key, AMQType.INT16.AsTypedValue(value));
+ }
+ public int GetInt32(string key)
+ {
+ return (int)this[key];
+ }
+ public void SetInt32(string key, int value)
+ {
+ CheckPropertyName(key);
+ SetProperty(key, AMQType.INT32.AsTypedValue(value));
+ }
+ public long GetInt64(string key)
+ {
+ return (long)this[key];
+ }
+ public void SetInt64(string key, long value)
+ {
+ CheckPropertyName(key);
+ SetProperty(key, AMQType.INT64.AsTypedValue(value));
+ }
+ public char GetChar(string key)
+ {
+ return (char)this[key];
+ }
+ public void SetChar(string key, char value)
+ {
+ CheckPropertyName(key);
+ SetProperty(key, AMQType.ASCII_CHARACTER.AsTypedValue(value));
+ }
+ public float GetFloat(string key)
+ {
+ return (float)this[key];
+ }
+ public void SetFloat(string key, float value)
+ {
+ CheckPropertyName(key);
+ SetProperty(key, AMQType.FLOAT.AsTypedValue(value));
+ }
+ public double GetDouble(string key)
+ {
+ return (double)this[key];
+ }
+ public void SetDouble(string key, double value)
+ {
+ CheckPropertyName(key);
+ SetProperty(key, AMQType.DOUBLE.AsTypedValue(value));
+ }
+ public decimal GetDecimal(string key)
+ {
+ return (decimal)this[key];
+ }
+ public void SetDecimal(string key, decimal value)
+ {
+ CheckPropertyName(key);
+ SetProperty(key, AMQType.DECIMAL.AsTypedValue(value));
+ }
+ public string GetString(string key)
+ {
+ return (string)this[key];
+ }
+ public void SetString(string key, string value)
+ {
+ CheckPropertyName(key);
+ if ( value == null )
+ SetProperty(key, AMQType.VOID.AsTypedValue(null));
+ else
+ SetProperty(key, AMQType.LONG_STRING.AsTypedValue(value));
+ }
+ public byte[] GetBytes(string key)
+ {
+ return (byte[])this[key];
+ }
+ public void SetBytes(string key, byte[] value)
+ {
+ CheckPropertyName(key);
+ SetProperty(key, AMQType.BINARY.AsTypedValue(value));
+ }
+ public ushort GetUInt16(string key)
+ {
+ return (ushort)this[key];
+ }
+ public void SetUInt16(string key, ushort value)
+ {
+ CheckPropertyName(key);
+ SetProperty(key, AMQType.UINT16.AsTypedValue(value));
+ }
+ public uint GetUInt32(string key)
+ {
+ return (uint)this[key];
+ }
+ public void SetUInt32(string key, uint value)
+ {
+ CheckPropertyName(key);
+ SetProperty(key, AMQType.UINT32.AsTypedValue(value));
+ }
+ public ulong GetUInt64(string key)
+ {
+ return (ulong)this[key];
+ }
+ public void SetUInt64(string key, ulong value)
+ {
+ CheckPropertyName(key);
+ SetProperty(key, AMQType.UINT64.AsTypedValue(value));
+ }
+ #endregion // Typed Setters and Getters
- object oldValue = _hash[key];
- if (oldValue != null)
- {
- AdjustEncodingSizeWhenRemoving(key, oldValue);
- }
+ #region Public Methods
+ //
+ // Public Methods
+ //
- _hash[key] = value;
- AdjustEncodingSizeWhenAdding(key, value);
- }
- }
+ /// <summary>
+ /// Removes the property with the specified name
+ /// </summary>
+ /// <param name="key">The name of the property to remove</param>
+ /// <returns>The previous value of the property or null</returns>
+ public AMQTypedValue RemoveKey(string key)
+ {
+ InitMapIfNecessary();
+ _encodedForm = null;
+ AMQTypedValue value = (AMQTypedValue)_properties[key];
+ if ( value != null )
+ {
+ _properties.Remove(key);
+ _encodedSize -= EncodingUtils.EncodedShortStringLength(key);
+ _encodedSize--;
+ _encodedSize -= value.EncodingLength;
- public void WriteToBuffer(ByteBuffer buffer)
- {
- // Write out the total length, which we have kept up to date as data is added.
- buffer.put(_encodedSize);
- WritePayload(buffer);
+ }
+ return value;
}
+
- private void WritePayload(ByteBuffer buffer)
+ /// <summary>
+ /// Remove the property with the specified name
+ /// </summary>
+ /// <param name="key">The name of the property to remove</param>
+ public void Remove(string key)
{
- foreach (DictionaryEntry lde in _hash)
- {
- string key = (string) lde.Key;
- EncodingUtils.WriteShortStringBytes(buffer, key);
- object value = lde.Value;
- if (value is byte[])
- {
- buffer.put((byte) 'S');
- EncodingUtils.WriteLongstr(buffer, (byte[]) value);
- }
- else if (value is string)
- {
- // TODO: look at using proper charset encoder
- buffer.put((byte) 'S');
- EncodingUtils.WriteLongStringBytes(buffer, (string) value);
- }
- else if (value is uint)
- {
- // TODO: look at using proper charset encoder
- buffer.put((byte) 'I');
- buffer.put((uint) value);
- }
- else
- {
- // Should never get here.
- throw new InvalidOperationException("Unsupported type in FieldTable: " + value.GetType());
- }
- }
+ RemoveKey(key);
}
- public byte[] GetDataAsBytes()
+ /// <summary>
+ /// Remove all properties from the table
+ /// </summary>
+ public void Clear()
{
- ByteBuffer buffer = ByteBuffer.allocate((int)_encodedSize);
- WritePayload(buffer);
- byte[] result = new byte[_encodedSize];
- buffer.flip();
- buffer.get(result);
- //buffer.Release();
- return result;
+ InitMapIfNecessary();
+ _encodedForm = null;
+ _properties.Clear();
+ _encodedSize = 0;
}
/// <summary>
@@ -177,124 +298,338 @@
/// <param name="ft">the source field table</param>
public void AddAll(IFieldTable ft)
{
- foreach (DictionaryEntry dictionaryEntry in ft)
- {
- this[(string)dictionaryEntry.Key] = dictionaryEntry.Value;
- }
+ foreach ( DictionaryEntry dictionaryEntry in ft )
+ {
+ this[(string)dictionaryEntry.Key] = dictionaryEntry.Value;
+ }
}
- private void CheckKey(object key)
+ /// <summary>
+ /// Get a enumerator over the internal property set.
+ /// Notice the enumerator will DictionaryEntry objects with
+ /// a string as the Key and an <see cref="AMQTypedValue"/> instance as the value
+ /// </summary>
+ /// <returns>The enumerator object</returns>
+ public IEnumerator GetEnumerator()
{
- if (key == null)
- {
- throw new ArgumentException("All keys must be Strings - was passed: null");
- }
- else if (!(key is string))
- {
- throw new ArgumentException("All keys must be Strings - was passed: " + key.GetType());
- }
+ return _properties.GetEnumerator();
}
- private void CheckValue(object value)
+ /// <summary>
+ /// Indicates if a property with the given name exists
+ /// </summary>
+ /// <param name="s">Property name to check</param>
+ /// <returns>True if the property exists</returns>
+ public bool Contains(string s)
{
- if (!(value is string || value is uint || value is int || value is long))
- {
- throw new ArgumentException("All values must be type string or int or long or uint, was passed: " +
- value.GetType());
- }
+ return _properties.Contains(s);
}
-
- void AdjustEncodingSizeWhenAdding(object key, object value)
+
+ /// <summary>
+ /// Returns a dictionary mapping Property Names to the corresponding
+ /// <see cref="AMQTypedValue"/> value
+ /// </summary>
+ /// <returns>The internal dictionary</returns>
+ public IDictionary AsDictionary()
{
- _encodedSize += EncodingUtils.EncodedShortStringLength((string) key);
- // the extra byte if for the type indicator what is written out
- if (value is string)
- {
- _encodedSize += 1 + EncodingUtils.EncodedLongStringLength((string) value);
- }
- else if (value is int || value is uint || value is long)
- {
- _encodedSize += 1 + 4;
- }
- else
- {
- // Should never get here since was already checked
- throw new Exception("Unsupported value type: " + value.GetType());
- }
+ return _properties;
}
- private void AdjustEncodingSizeWhenRemoving(object key, object value)
+ /// <summary>
+ /// Returns a string representation of this field table
+ /// </summary>
+ /// <returns>A string</returns>
+ public override string ToString()
{
- _encodedSize -= EncodingUtils.EncodedShortStringLength((string) key);
- if (value != null)
- {
- if (value is string)
- {
- _encodedSize -= 1 + EncodingUtils.EncodedLongStringLength((string) value);
- }
- else if (value is int || value is uint || value is long)
- {
- _encodedSize -= 5;
- }
- else
- {
- // Should never get here
- throw new Exception("Illegal value type: " + value.GetType());
- }
- }
- }
+ StringBuilder sb = new StringBuilder("FieldTable {");
- public IEnumerator GetEnumerator()
- {
- return _hash.GetEnumerator();
- }
+ bool first = true;
+ InitMapIfNecessary();
+ foreach ( DictionaryEntry entry in _properties )
+ {
+ if ( !first )
+ {
+ sb.Append(", ");
+ }
+ first = false;
+ sb.Append(entry.Key).Append(" => ").Append(entry.Value);
+ }
- public bool Contains(string s)
+ sb.Append("}");
+ return sb.ToString();
+ }
+
+ /// <summary>
+ /// Serializes this instance to the specified <see cref="ByteBuffer"/>.
+ /// </summary>
+ /// <param name="buffer">The buffer to write to</param>
+ public void WriteToBuffer(ByteBuffer buffer)
{
- return _hash.Contains(s);
+ if ( _log.IsDebugEnabled )
+ {
+ _log.Debug("FieldTable::writeToBuffer: Writing encoded length of " + EncodedSize + "...");
+ }
+
+ EncodingUtils.WriteUnsignedInteger(buffer, EncodedSize);
+ WritePayload(buffer);
}
- public void Clear()
+ /// <summary>
+ /// Returns a byte array with the serialized representation
+ /// of this field table
+ /// </summary>
+ /// <returns>An array of bytes</returns>
+ public byte[] GetDataAsBytes()
{
- _hash.Clear();
- _encodedSize = 0;
+ ByteBuffer buffer = ByteBuffer.allocate((int)_encodedSize);
+ WritePayload(buffer);
+ byte[] result = new byte[_encodedSize];
+ buffer.flip();
+ buffer.get(result);
+ //buffer.Release();
+ return result;
+ }
+
+ #endregion // Public Methods
+
+ #region Private Methods
+ //
+ // Private Methods
+ //
+
+ private static void CheckPropertyName(string propertyName)
+ {
+ if ( propertyName == null || propertyName.Length == 0 )
+ throw new ArgumentNullException("propertyName");
+ CheckIdentifierFormat(propertyName);
+ }
+
+ private static void CheckIdentifierFormat(string propertyName)
+ {
+ // AMQP Spec: 4.2.5.5 Field Tables
+ // Guidelines for implementers:
+ // * Field names MUST start with a letter, '$' or '#' and may continue with
+ // letters, '$' or '#', digits, or underlines, to a maximum length of 128
+ // characters.
+ // * The server SHOULD validate field names and upon receiving an invalid
+ // field name, it SHOULD signal a connection exception with reply code
+ // 503 (syntax error). Conformance test: amq_wlp_table_01.
+ // * A peer MUST handle duplicate fields by using only the first instance.
+
+
+ // AMQP length limit
+ if ( propertyName.Length > 128 )
+ {
+ throw new ArgumentException("AMQP limits property names to 128 characters");
+ }
+
+ // AMQ start character
+ if ( !(Char.IsLetter(propertyName[0])
+ || propertyName[0] == '$'
+ || propertyName[0] == '#'
+ || propertyName[0] == '_' ) )// Not official AMQP added for JMS.
+ {
+ throw new ArgumentException("Identifier '" + propertyName + "' does not start with a valid AMQP start character");
+ }
}
- public void Remove(string key)
+ private object GetObject(string key)
{
- object value = _hash[key];
- if (value != null)
- {
- AdjustEncodingSizeWhenRemoving(key, value);
- }
- _hash.Remove(key);
+ AMQTypedValue value = GetProperty(key);
+ return value != null ? value.Value : null;
}
-
- public IDictionary AsDictionary()
+
+ private void SetObject(string key, object value)
{
- return _hash;
+ if ( value is bool )
+ {
+ SetBoolean(key, (bool)value);
+ } else if ( value is byte )
+ {
+ SetByte(key, (byte)value);
+ } else if ( value is sbyte )
+ {
+ SetSByte(key, (sbyte)value);
+ } else if ( value is short )
+ {
+ SetInt16(key, (short)value);
+ } else if ( value is ushort )
+ {
+ SetUInt16(key, (ushort)value);
+ } else if ( value is int )
+ {
+ SetInt32(key, (int) value);
+ } else if ( value is uint )
+ {
+ SetUInt32(key, (uint)value);
+ } else if ( value is long )
+ {
+ SetInt64(key, (long) value);
+ } else if ( value is ulong )
+ {
+ SetUInt64(key, (ulong)value);
+ } else if ( value is char )
+ {
+ SetChar(key, (char) value);
+ } else if ( value is float )
+ {
+ SetFloat(key, (float) value);
+ } else if ( value is double )
+ {
+ SetDouble(key, (double) value);
+ } else if ( value is decimal )
+ {
+ SetDecimal(key, (decimal) value);
+ } else if ( value is string )
+ {
+ SetString(key, (string) value);
+ } else if ( value is byte[] )
+ {
+ SetBytes(key, (byte[])value);
+ } else
+ {
+ throw new ArgumentException("Data type not supported yet");
+ }
}
-
- public override string ToString()
+
+ private AMQTypedValue GetProperty(string name)
{
- StringBuilder sb = new StringBuilder("FieldTable{");
-
- bool first = true;
- foreach (DictionaryEntry entry in _hash)
- {
- if (first)
- {
- first = !first;
- }
- else
- {
- sb.Append(", ");
- }
- sb.Append(entry.Key).Append(" => ").Append(entry.Value);
- }
-
- sb.Append("}");
- return sb.ToString();
+ lock ( _syncLock )
+ {
+ if ( _properties == null )
+ {
+ if ( _encodedForm == null )
+ {
+ return null;
+ } else
+ {
+ PopulateFromBuffer();
+ }
+ }
+ return (AMQTypedValue) _properties[name];
+ }
+ }
+
+ private void PopulateFromBuffer()
+ {
+ try
+ {
+ SetFromBuffer(_encodedForm, _encodedSize);
+ } catch ( AMQFrameDecodingException e )
+ {
+ _log.Error("Error decoding FieldTable in deferred decoding mode ", e);
+ throw;
+ }
+ }
+
+ private void SetFromBuffer(ByteBuffer buffer, uint length)
+ {
+ bool trace = _log.IsDebugEnabled;
+ if ( length > 0 )
+ {
+ int expectedRemaining = buffer.remaining() - (int)length;
+ _properties = new LinkedHashtable();
+
+ do
+ {
+ string key = EncodingUtils.ReadShortString(buffer);
+ AMQTypedValue value = AMQTypedValue.ReadFromBuffer(buffer);
+ if ( trace )
+ {
+ _log.Debug(string.Format("FieldTable::PropFieldTable(buffer,{0}): Read type '{1}', key '{2}', value '{3}'", length, value.Type, key, value.Value));
+ }
+ _properties.Add(key, value);
+
+ } while ( buffer.remaining() > expectedRemaining );
+ _encodedSize = length;
+ }
+ if ( trace )
+ {
+ _log.Debug("FieldTable::FieldTable(buffer," + length + "): Done.");
+ }
+ }
+
+ private void InitMapIfNecessary()
+ {
+ lock ( _syncLock )
+ {
+ if ( _properties == null )
+ {
+ if ( _encodedForm == null )
+ {
+ _properties = new LinkedHashtable();
+ } else
+ {
+ PopulateFromBuffer();
+ }
+ }
+ }
+ }
+
+ private AMQTypedValue SetProperty(string key, AMQTypedValue value)
+ {
+ InitMapIfNecessary();
+ _encodedForm = null;
+ if ( value == null )
+ {
+ RemoveKey(key);
+ }
+ AMQTypedValue oldVal = (AMQTypedValue)_properties[key];
+ _properties.Add(key, value);
+ if ( oldVal != null )
+ {
+ _encodedSize -= oldVal.EncodingLength;
+ } else
+ {
+ _encodedSize += EncodingUtils.EncodedShortStringLength(key) + (uint)1;
+ }
+ if ( value != null )
+ {
+ _encodedSize += value.EncodingLength;
+ }
+
+ return oldVal;
+ }
+
+ public void WritePayload(ByteBuffer buffer)
+ {
+ if ( _encodedForm != null )
+ {
+ buffer.put(_encodedForm);
+ } else if ( _properties != null )
+ {
+ foreach ( DictionaryEntry de in _properties )
+ {
+ string key = (string)de.Key;
+ AMQTypedValue value = (AMQTypedValue)de.Value;
+ try
+ {
+ if ( _log.IsDebugEnabled )
+ {
+ _log.Debug("Writing Property:" + key +
+ " Type:" + value.Type +
+ " Value:" + value.Value);
+ _log.Debug("Buffer Position:" + buffer.position() +
+ " Remaining:" + buffer.remaining());
+ }
+ //Write the actual parameter name
+ EncodingUtils.WriteShortStringBytes(buffer, key);
+ value.WriteToBuffer(buffer);
+ } catch ( Exception ex )
+ {
+ if ( _log.IsDebugEnabled )
+ {
+ _log.Debug("Exception thrown:" + ex);
+ _log.Debug("Writing Property:" + key +
+ " Type:" + value.Type +
+ " Value:" + value.Value);
+ _log.Debug("Buffer Position:" + buffer.position() +
+ " Remaining:" + buffer.remaining());
+ }
+ }
+ }
+ }
}
+ #endregion // Private Methods
}
}
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=507096&r1=507095&r2=507096
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Qpid.Common.csproj (original)
+++ incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Qpid.Common.csproj Tue Feb 13 08:56:03 2007
@@ -53,6 +53,7 @@
<Compile Include="Framing\AMQMethodBody.cs" />
<Compile Include="Framing\AMQMethodBodyFactory.cs" />
<Compile Include="Framing\AMQProtocolHeaderException.cs" />
+ <Compile Include="Framing\AMQType.cs" />
<Compile Include="Framing\BasicContentHeaderProperties.cs" />
<Compile Include="Framing\CompositeAMQDataBlock.cs" />
<Compile Include="Framing\ContentBody.cs" />
@@ -60,6 +61,8 @@
<Compile Include="Framing\ContentHeaderBody.cs" />
<Compile Include="Framing\ContentHeaderBodyFactory.cs" />
<Compile Include="Framing\ContentHeaderPropertiesFactory.cs" />
+ <Compile Include="Framing\AMQTypedValue.cs" />
+ <Compile Include="Framing\AMQTypeMap.cs" />
<Compile Include="Framing\EncodingUtils.cs" />
<Compile Include="Framing\FieldTable.cs" />
<Compile Include="Framing\HeartbeatBody.cs" />
Modified: incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Qpid.Common.mdp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Qpid.Common.mdp?view=diff&rev=507096&r1=507095&r2=507096
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Qpid.Common.mdp (original)
+++ incubator/qpid/trunk/qpid/dotnet/Qpid.Common/Qpid.Common.mdp Tue Feb 13 08:56:03 2007
@@ -27,6 +27,9 @@
<File name="./Framing/AMQMethodBody.cs" subtype="Code" buildaction="Compile" />
<File name="./Framing/AMQMethodBodyFactory.cs" subtype="Code" buildaction="Compile" />
<File name="./Framing/AMQProtocolHeaderException.cs" subtype="Code" buildaction="Compile" />
+ <File name="./Framing/AMQType.cs" subtype="Code" buildaction="Compile" />
+ <File name="./Framing/AMQTypedValue.cs" subtype="Code" buildaction="Compile" />
+ <File name="./Framing/AMQTypeMap.cs" subtype="Code" buildaction="Compile" />
<File name="./Framing/BasicContentHeaderProperties.cs" subtype="Code" buildaction="Compile" />
<File name="./Framing/CompositeAMQDataBlock.cs" subtype="Code" buildaction="Compile" />
<File name="./Framing/ContentBody.cs" subtype="Code" buildaction="Compile" />
@@ -151,4 +154,4 @@
<ProjectReference type="Project" localcopy="True" refto="Qpid.Messaging" />
<ProjectReference type="Gac" localcopy="True" refto="System.Xml, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</References>
-</Project>
\ No newline at end of file
+</Project>