blob: 709db419c4fd4028767a05e4d67151329760c29b [file] [log] [blame]
/*
*
* 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 log4net;
using Qpid.Buffer;
using Qpid.Messaging;
namespace Qpid.Framing
{
public class BasicContentHeaderProperties : IContentHeaderProperties
{
private static readonly ILog _log = LogManager.GetLogger(typeof(BasicContentHeaderProperties));
public string ContentType;
public string Encoding;
public FieldTable Headers;
public byte DeliveryMode;
public byte Priority;
public string CorrelationId;
public uint Expiration;
public string ReplyTo;
public string MessageId;
public ulong Timestamp;
public string Type;
public string UserId;
public string AppId;
public string ClusterId;
public BasicContentHeaderProperties()
{
}
public uint PropertyListSize
{
get
{
return (uint)(EncodingUtils.EncodedShortStringLength(ContentType) +
EncodingUtils.EncodedShortStringLength(Encoding) +
EncodingUtils.EncodedFieldTableLength(Headers) +
1 + 1 +
EncodingUtils.EncodedShortStringLength(CorrelationId) +
EncodingUtils.EncodedShortStringLength(ReplyTo) +
EncodingUtils.EncodedShortStringLength(String.Format("{0:D}", Expiration)) +
EncodingUtils.EncodedShortStringLength(MessageId) +
8 +
EncodingUtils.EncodedShortStringLength(Type) +
EncodingUtils.EncodedShortStringLength(UserId) +
EncodingUtils.EncodedShortStringLength(AppId) +
EncodingUtils.EncodedShortStringLength(ClusterId));
}
}
public ushort PropertyFlags
{
get
{
int value = 0;
// for now we just blast in all properties
for (int i = 0; i < 14; i++)
{
value += (1 << (15-i));
}
return (ushort) value;
}
}
public void WritePropertyListPayload(ByteBuffer buffer)
{
EncodingUtils.WriteShortStringBytes(buffer, ContentType);
EncodingUtils.WriteShortStringBytes(buffer, Encoding);
EncodingUtils.WriteFieldTableBytes(buffer, Headers);
buffer.put(DeliveryMode);
buffer.put(Priority);
EncodingUtils.WriteShortStringBytes(buffer, CorrelationId);
EncodingUtils.WriteShortStringBytes(buffer, ReplyTo);
EncodingUtils.WriteShortStringBytes(buffer, String.Format("{0:D}", Expiration));
EncodingUtils.WriteShortStringBytes(buffer, MessageId);
buffer.put(Timestamp);
EncodingUtils.WriteShortStringBytes(buffer, Type);
EncodingUtils.WriteShortStringBytes(buffer, UserId);
EncodingUtils.WriteShortStringBytes(buffer, AppId);
EncodingUtils.WriteShortStringBytes(buffer, ClusterId);
}
public void PopulatePropertiesFromBuffer(ByteBuffer buffer, ushort propertyFlags)
{
_log.Debug("Property flags: " + propertyFlags);
if ((propertyFlags & (1 << 15)) > 0)
ContentType = EncodingUtils.ReadShortString(buffer);
if ((propertyFlags & (1 << 14)) > 0)
Encoding = EncodingUtils.ReadShortString(buffer);
if ((propertyFlags & (1 << 13)) > 0)
Headers = EncodingUtils.ReadFieldTable(buffer);
if ((propertyFlags & (1 << 12)) > 0)
DeliveryMode = buffer.get();
if ((propertyFlags & (1 << 11)) > 0)
Priority = buffer.get();
if ((propertyFlags & (1 << 10)) > 0)
CorrelationId = EncodingUtils.ReadShortString(buffer);
if ((propertyFlags & (1 << 9)) > 0)
ReplyTo = EncodingUtils.ReadShortString(buffer);
if ((propertyFlags & (1 << 8)) > 0)
Expiration = UInt32.Parse(EncodingUtils.ReadShortString(buffer));
if ((propertyFlags & (1 << 7)) > 0)
MessageId = EncodingUtils.ReadShortString(buffer);
if ((propertyFlags & (1 << 6)) > 0)
Timestamp = buffer.GetUnsignedLong();
if ((propertyFlags & (1 << 5)) > 0)
Type = EncodingUtils.ReadShortString(buffer);
if ((propertyFlags & (1 << 4)) > 0)
UserId = EncodingUtils.ReadShortString(buffer);
if ((propertyFlags & (1 << 3)) > 0)
AppId = EncodingUtils.ReadShortString(buffer);
if ((propertyFlags & (1 << 2)) > 0)
ClusterId = EncodingUtils.ReadShortString(buffer);
}
public void SetDeliveryMode(DeliveryMode deliveryMode)
{
if (deliveryMode == Messaging.DeliveryMode.NonPersistent)
{
DeliveryMode = 1;
}
else
{
DeliveryMode = 2;
}
}
public override string ToString()
{
return "Properties: " + ContentType + " " + Encoding + " " + Timestamp + " " + Type;
}
}
}