Former-commit-id:a02aeb236c
[formerly9f19e3f712
] [formerlya02aeb236c
[formerly9f19e3f712
] [formerly06a8b51d6d
[formerly 64fa9254b946eae7e61bbc3f513b7c3696c4f54f]]] Former-commit-id:06a8b51d6d
Former-commit-id:8e80217e59
[formerly3360eb6c5f
] Former-commit-id:377dcd10b9
290 lines
8.5 KiB
C#
290 lines
8.5 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 log4net;
|
|
using Apache.Qpid.Buffer;
|
|
using Apache.Qpid.Messaging;
|
|
|
|
namespace Apache.Qpid.Framing
|
|
{
|
|
public class BasicContentHeaderProperties : IContentHeaderProperties
|
|
{
|
|
private static readonly ILog _log = LogManager.GetLogger(typeof(BasicContentHeaderProperties));
|
|
|
|
private string _contentType;
|
|
private string _encoding;
|
|
private FieldTable _headers;
|
|
private byte _deliveryMode;
|
|
private byte _priority;
|
|
private string _correlationId;
|
|
private long _expiration;
|
|
private string _replyTo;
|
|
private string _messageId;
|
|
private ulong _timestamp;
|
|
private string _type;
|
|
private string _userId;
|
|
private string _appId;
|
|
private string _clusterId;
|
|
|
|
|
|
#region Properties
|
|
//
|
|
// Properties
|
|
//
|
|
|
|
/// <summary>
|
|
/// The MIME Content Type
|
|
/// </summary>
|
|
public string ContentType
|
|
{
|
|
get { return _contentType; }
|
|
set { _contentType = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The MIME Content Encoding
|
|
/// </summary>
|
|
public string Encoding
|
|
{
|
|
get { return _encoding; }
|
|
set { _encoding = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Message headers
|
|
/// </summary>
|
|
public FieldTable Headers
|
|
{
|
|
get { return _headers; }
|
|
set { _headers = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Non-persistent (1) or persistent (2)
|
|
/// </summary>
|
|
public byte DeliveryMode
|
|
{
|
|
get { return _deliveryMode; }
|
|
set { _deliveryMode = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The message priority, 0 to 9
|
|
/// </summary>
|
|
public byte Priority
|
|
{
|
|
get { return _priority; }
|
|
set { _priority = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The application correlation identifier
|
|
/// </summary>
|
|
public string CorrelationId
|
|
{
|
|
get { return _correlationId; }
|
|
set { _correlationId = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Message expiration specification
|
|
/// </summary>
|
|
// TODO: Should be string according to spec
|
|
public long Expiration
|
|
{
|
|
get { return _expiration; }
|
|
set { _expiration = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The destination to reply to
|
|
/// </summary>
|
|
public string ReplyTo
|
|
{
|
|
get { return _replyTo; }
|
|
set { _replyTo = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The application message identifier
|
|
/// </summary>
|
|
public string MessageId
|
|
{
|
|
get { return _messageId; }
|
|
set { _messageId = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The message timestamp
|
|
/// </summary>
|
|
public ulong Timestamp
|
|
{
|
|
get { return _timestamp; }
|
|
set { _timestamp = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The message type name
|
|
/// </summary>
|
|
public string Type
|
|
{
|
|
get { return _type; }
|
|
set { _type = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The creating user id
|
|
/// </summary>
|
|
public string UserId
|
|
{
|
|
get { return _userId; }
|
|
set { _userId = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The creating application id
|
|
/// </summary>
|
|
public string AppId
|
|
{
|
|
get { return _appId; }
|
|
set { _appId = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Intra-cluster routing identifier
|
|
/// </summary>
|
|
public string ClusterId
|
|
{
|
|
get { return _clusterId; }
|
|
set { _clusterId = value; }
|
|
}
|
|
|
|
#endregion // Properties
|
|
|
|
|
|
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.GetByte();
|
|
if ( (propertyFlags & (1 << 11)) > 0 )
|
|
Priority = buffer.GetByte();
|
|
if ( (propertyFlags & (1 << 10)) > 0 )
|
|
CorrelationId = EncodingUtils.ReadShortString(buffer);
|
|
if ( (propertyFlags & (1 << 9)) > 0 )
|
|
ReplyTo = EncodingUtils.ReadShortString(buffer);
|
|
if ( (propertyFlags & (1 << 8)) > 0 )
|
|
Expiration = EncodingUtils.ReadLongAsShortString(buffer);
|
|
if ( (propertyFlags & (1 << 7)) > 0 )
|
|
MessageId = EncodingUtils.ReadShortString(buffer);
|
|
if ( (propertyFlags & (1 << 6)) > 0 )
|
|
Timestamp = buffer.GetUInt64();
|
|
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;
|
|
}
|
|
}
|
|
}
|