/* * * 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; } } }