118 lines
3.6 KiB
C#
118 lines
3.6 KiB
C#
/*
|
|
*
|
|
* 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.
|
|
*
|
|
*/
|
|
using System;
|
|
using Apache.Qpid.Buffer;
|
|
|
|
namespace Apache.Qpid.Framing
|
|
{
|
|
public class ContentHeaderBody : IBody
|
|
{
|
|
public static readonly byte TYPE = 2;
|
|
|
|
public ushort ClassId;
|
|
|
|
public ushort Weight;
|
|
|
|
public ulong BodySize;
|
|
|
|
/** must never be null */
|
|
public IContentHeaderProperties Properties;
|
|
|
|
public ContentHeaderBody()
|
|
{
|
|
}
|
|
|
|
public ContentHeaderBody(IContentHeaderProperties props, ushort classId)
|
|
{
|
|
Properties = props;
|
|
ClassId = classId;
|
|
}
|
|
|
|
public ContentHeaderBody(ushort classId, ushort weight, IContentHeaderProperties props, uint bodySize)
|
|
: this(props, classId)
|
|
{
|
|
Weight = weight;
|
|
BodySize = bodySize;
|
|
}
|
|
|
|
#region IBody Members
|
|
|
|
public byte BodyType
|
|
{
|
|
get
|
|
{
|
|
return TYPE;
|
|
}
|
|
}
|
|
|
|
public uint Size
|
|
{
|
|
get
|
|
{
|
|
return (2 + 2 + 8 + 2 + Properties.PropertyListSize);
|
|
}
|
|
}
|
|
|
|
public void WritePayload(ByteBuffer buffer)
|
|
{
|
|
buffer.Put(ClassId);
|
|
buffer.Put(Weight);
|
|
buffer.Put(BodySize);
|
|
buffer.Put(Properties.PropertyFlags);
|
|
Properties.WritePropertyListPayload(buffer);
|
|
}
|
|
|
|
public void PopulateFromBuffer(ByteBuffer buffer, uint size)
|
|
{
|
|
ClassId = buffer.GetUInt16();
|
|
Weight = buffer.GetUInt16();
|
|
BodySize = buffer.GetUInt64();
|
|
ushort propertyFlags = buffer.GetUInt16();
|
|
ContentHeaderPropertiesFactory factory = ContentHeaderPropertiesFactory.GetInstance();
|
|
Properties = factory.CreateContentHeaderProperties(ClassId, propertyFlags, buffer);
|
|
}
|
|
|
|
#endregion
|
|
|
|
public static AMQFrame CreateAMQFrame(ushort channelId, ushort classId, ushort weight, BasicContentHeaderProperties properties,
|
|
uint bodySize)
|
|
{
|
|
AMQFrame frame = new AMQFrame();
|
|
frame.Channel = channelId;
|
|
frame.BodyFrame = new ContentHeaderBody(classId, weight, properties, bodySize);
|
|
return frame;
|
|
}
|
|
|
|
public static AMQFrame CreateAMQFrame(ushort channelId, ContentHeaderBody body)
|
|
{
|
|
AMQFrame frame = new AMQFrame();
|
|
frame.Channel = channelId;
|
|
frame.BodyFrame = body;
|
|
return frame;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return String.Format("ContentHeaderBody: ClassId {0}, Weight {1}, BodySize {2}, Properties {3}", ClassId, Weight,
|
|
BodySize, Properties);
|
|
}
|
|
}
|
|
}
|