blob: 6c1064f8595f7f2d2e921d2b6a15339dd9cae60f [file] [log] [blame]
#ifndef __dispatch_amqp_h__
#define __dispatch_amqp_h__ 1
/*
* 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.
*/
/**@file
* AMQP constants.
*
*@defgroup amqp amqp
*
* AMQP related constant definitions.
*/
/// @{
/**
* AMQP Constants
*/
typedef enum {
QD_AMQP_MIN_MAX_FRAME_SIZE = 512,
QD_AMQP_PORT_INT = 5672,
QD_AMQPS_PORT_INT = 5671
} qd_amqp_constants_t;
extern const char * const QD_AMQP_PORT_STR;
extern const char * const QD_AMQPS_PORT_STR;
/* Returns -1 if string is not a number or recognized symbolic port name */
int qd_port_int(const char* port_str);
/**
* AMQP Performative Tags
*/
typedef enum {
QD_PERFORMATIVE_HEADER = 0x70,
QD_PERFORMATIVE_DELIVERY_ANNOTATIONS = 0x71,
QD_PERFORMATIVE_MESSAGE_ANNOTATIONS = 0x72 ,
QD_PERFORMATIVE_PROPERTIES = 0x73,
QD_PERFORMATIVE_APPLICATION_PROPERTIES = 0x74,
QD_PERFORMATIVE_BODY_DATA = 0x75,
QD_PERFORMATIVE_BODY_AMQP_SEQUENCE = 0x76,
QD_PERFORMATIVE_BODY_AMQP_VALUE = 0x77,
QD_PERFORMATIVE_FOOTER = 0x78,
} qd_amqp_performative_t;
/**
* AMQP Type Tags
*/
typedef enum {
QD_AMQP_NULL = 0x40,
QD_AMQP_BOOLEAN = 0x56,
QD_AMQP_TRUE = 0x41,
QD_AMQP_FALSE = 0x42,
QD_AMQP_UBYTE = 0x50,
QD_AMQP_USHORT = 0x60,
QD_AMQP_UINT = 0x70,
QD_AMQP_SMALLUINT = 0x52,
QD_AMQP_UINT0 = 0x43,
QD_AMQP_ULONG = 0x80,
QD_AMQP_SMALLULONG = 0x53,
QD_AMQP_ULONG0 = 0x44,
QD_AMQP_BYTE = 0x51,
QD_AMQP_SHORT = 0x61,
QD_AMQP_INT = 0x71,
QD_AMQP_SMALLINT = 0x54,
QD_AMQP_LONG = 0x81,
QD_AMQP_SMALLLONG = 0x55,
QD_AMQP_FLOAT = 0x72,
QD_AMQP_DOUBLE = 0x82,
QD_AMQP_DECIMAL32 = 0x74,
QD_AMQP_DECIMAL64 = 0x84,
QD_AMQP_DECIMAL128 = 0x94,
QD_AMQP_UTF32 = 0x73,
QD_AMQP_TIMESTAMP = 0x83,
QD_AMQP_UUID = 0x98,
QD_AMQP_VBIN8 = 0xa0,
QD_AMQP_VBIN32 = 0xb0,
QD_AMQP_STR8_UTF8 = 0xa1,
QD_AMQP_STR32_UTF8 = 0xb1,
QD_AMQP_SYM8 = 0xa3,
QD_AMQP_SYM32 = 0xb3,
QD_AMQP_LIST0 = 0x45,
QD_AMQP_LIST8 = 0xc0,
QD_AMQP_LIST32 = 0xd0,
QD_AMQP_MAP8 = 0xc1,
QD_AMQP_MAP32 = 0xd1,
QD_AMQP_ARRAY8 = 0xe0,
QD_AMQP_ARRAY32 = 0xf0,
} qd_amqp_type_t;
/** @name Message Annotation Headers */
/// @{
extern const char * const QD_MA_PREFIX;
extern const char * const QD_MA_INGRESS; ///< Ingress Router
extern const char * const QD_MA_TRACE; ///< Trace
extern const char * const QD_MA_TO; ///< To-Override
extern const char * const QD_MA_PHASE; ///< Phase for override address
extern const char * const QD_MA_CLASS; ///< Message-Class
extern const char * const QD_MA_STREAM; ///< Indicate streaming message
#define QD_MA_PREFIX_LEN (9)
#define QD_MA_INGRESS_LEN (16)
#define QD_MA_TRACE_LEN (14)
#define QD_MA_TO_LEN (11)
#define QD_MA_PHASE_LEN (14)
#define QD_MA_CLASS_LEN (14)
#define QD_MA_STREAM_LEN (15)
extern const int QD_MA_MAX_KEY_LEN; ///< strlen of longest key name
extern const int QD_MA_N_KEYS; ///< number of router annotation keys
extern const int QD_MA_FILTER_LEN; ///< size of annotation filter buffer
/// @}
/** @name Container Capabilities */
/// @{
extern const char * const QD_CAPABILITY_ANONYMOUS_RELAY;
extern const char * const QD_CAPABILITY_STREAMING_LINKS;
/// @}
/** @name Link Terminus Capabilities */
/// @{
extern const char * const QD_CAPABILITY_ROUTER_CONTROL;
extern const char * const QD_CAPABILITY_ROUTER_DATA;
extern const char * const QD_CAPABILITY_EDGE_DOWNLINK;
extern const char * const QD_CAPABILITY_WAYPOINT_DEFAULT;
extern const char * const QD_CAPABILITY_WAYPOINT1;
extern const char * const QD_CAPABILITY_WAYPOINT2;
extern const char * const QD_CAPABILITY_WAYPOINT3;
extern const char * const QD_CAPABILITY_WAYPOINT4;
extern const char * const QD_CAPABILITY_WAYPOINT5;
extern const char * const QD_CAPABILITY_WAYPOINT6;
extern const char * const QD_CAPABILITY_WAYPOINT7;
extern const char * const QD_CAPABILITY_WAYPOINT8;
extern const char * const QD_CAPABILITY_WAYPOINT9;
extern const char * const QD_CAPABILITY_FALLBACK;
/// @}
/** @name Dynamic Node Properties */
/// @{
extern const char * const QD_DYNAMIC_NODE_PROPERTY_ADDRESS; ///< Address for routing dynamic sources
/// @}
/** @name Connection Properties */
/// @{
extern const char * const QD_CONNECTION_PROPERTY_PRODUCT_KEY;
extern const char * const QD_CONNECTION_PROPERTY_PRODUCT_VALUE;
extern const char * const QD_CONNECTION_PROPERTY_VERSION_KEY;
extern const char * const QD_CONNECTION_PROPERTY_COST_KEY;
extern const char * const QD_CONNECTION_PROPERTY_CONN_ID;
extern const char * const QD_CONNECTION_PROPERTY_FAILOVER_LIST_KEY;
extern const char * const QD_CONNECTION_PROPERTY_FAILOVER_NETHOST_KEY;
extern const char * const QD_CONNECTION_PROPERTY_FAILOVER_PORT_KEY;
extern const char * const QD_CONNECTION_PROPERTY_FAILOVER_SCHEME_KEY;
extern const char * const QD_CONNECTION_PROPERTY_FAILOVER_HOSTNAME_KEY;
/// @}
/** @name Terminus Addresses */
/// @{
extern const char * const QD_TERMINUS_EDGE_ADDRESS_TRACKING;
extern const char * const QD_TERMINUS_ADDRESS_LOOKUP;
/// @}
/** @name AMQP error codes. */
/// @{
/** AMQP management error status code and string description (HTTP-style) */
typedef struct qd_amqp_error_t { int status; const char* description; } qd_amqp_error_t;
extern const qd_amqp_error_t QD_AMQP_OK;
extern const qd_amqp_error_t QD_AMQP_CREATED;
extern const qd_amqp_error_t QD_AMQP_NO_CONTENT;
extern const qd_amqp_error_t QD_AMQP_FORBIDDEN;
extern const qd_amqp_error_t QD_AMQP_BAD_REQUEST;
extern const qd_amqp_error_t QD_AMQP_NOT_FOUND;
extern const qd_amqp_error_t QD_AMQP_NOT_IMPLEMENTED;
/// @}
/** @name Standard AMQP error condition names. */
/// @{
extern const char * const QD_AMQP_COND_INTERNAL_ERROR;
extern const char * const QD_AMQP_COND_NOT_FOUND;
extern const char * const QD_AMQP_COND_UNAUTHORIZED_ACCESS;
extern const char * const QD_AMQP_COND_DECODE_ERROR;
extern const char * const QD_AMQP_COND_RESOURCE_LIMIT_EXCEEDED;
extern const char * const QD_AMQP_COND_NOT_ALLOWED;
extern const char * const QD_AMQP_COND_INVALID_FIELD;
extern const char * const QD_AMQP_COND_NOT_IMPLEMENTED;
extern const char * const QD_AMQP_COND_RESOURCE_LOCKED;
extern const char * const QD_AMQP_COND_PRECONDITION_FAILED;
extern const char * const QD_AMQP_COND_RESOURCE_DELETED;
extern const char * const QD_AMQP_COND_ILLEGAL_STATE;
extern const char * const QD_AMQP_COND_FRAME_SIZE_TOO_SMALL;
extern const char * const QD_AMQP_COND_CONNECTION_FORCED;
extern const char * const QD_AMQP_COND_MESSAGE_SIZE_EXCEEDED;
/// @};
/** @name AMQP link endpoint role. */
/// @{
#define QD_AMQP_LINK_ROLE_SENDER false
#define QD_AMQP_LINK_ROLE_RECEIVER true
/// @};
#endif