Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F628881
amqp_envelope.c
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Authored By
Unknown
Size
26 KB
Referenced Files
None
Subscribers
None
amqp_envelope.c
View Options
/*
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2007 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Alexandre Kalendarev akalend@mail.ru Copyright (c) 2009-2010 |
| Lead: |
| - Pieter de Zwart |
| Maintainers: |
| - Brad Rodriguez |
| - Jonathan Tansavatdi |
+----------------------------------------------------------------------+
*/
/* $Id: amqp_envelope.c 327551 2012-09-09 03:49:34Z pdezwart $ */
#ifdef HAVE_CONFIG_H
#include
"config.h"
#endif
#include
"php.h"
#include
"php_ini.h"
#include
"ext/standard/info.h"
#include
"zend_exceptions.h"
#ifdef PHP_WIN32
#
include
"win32/php_stdint.h"
#
include
"win32/signal.h"
#else
#
include
<signal.h>
#
include
<stdint.h>
#endif
#include
<amqp.h>
#include
<amqp_framing.h>
#ifdef PHP_WIN32
#
include
"win32/unistd.h"
#else
#
include
<unistd.h>
#endif
#include
"php_amqp.h"
#include
"amqp_envelope.h"
zend_class_entry
*
amqp_envelope_class_entry
;
#define this_ce amqp_envelope_class_entry
void
parse_amqp_table
(
amqp_table_t
*
table
,
zval
*
result
);
void
convert_amqp_envelope_to_zval
(
amqp_envelope_t
*
amqp_envelope
,
zval
*
envelope
TSRMLS_DC
)
{
PHP5to7_zval_t
headers
PHP5to7_MAYBE_SET_TO_NULL
;
/* Build the envelope */
object_init_ex
(
envelope
,
this_ce
);
PHP5to7_MAYBE_INIT
(
headers
);
PHP5to7_ARRAY_INIT
(
headers
);
amqp_basic_properties_t
*
p
=
&
amqp_envelope
->
message
.
properties
;
amqp_message_t
*
message
=
&
amqp_envelope
->
message
;
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"body"
),
(
const
char
*
)
message
->
body
.
bytes
,
(
PHP5to7_param_str_len_type_t
)
message
->
body
.
len
TSRMLS_CC
);
zend_update_property_long
(
this_ce
,
envelope
,
ZEND_STRL
(
"delivery_tag"
),
(
PHP5to7_param_long_type_t
)
amqp_envelope
->
delivery_tag
TSRMLS_CC
);
zend_update_property_bool
(
this_ce
,
envelope
,
ZEND_STRL
(
"is_redelivery"
),
(
PHP5to7_param_long_type_t
)
amqp_envelope
->
redelivered
TSRMLS_CC
);
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"exchange_name"
),
(
const
char
*
)
amqp_envelope
->
exchange
.
bytes
,
(
PHP5to7_param_str_len_type_t
)
amqp_envelope
->
exchange
.
len
TSRMLS_CC
);
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"routing_key"
),
(
const
char
*
)
amqp_envelope
->
routing_key
.
bytes
,
(
PHP5to7_param_str_len_type_t
)
amqp_envelope
->
routing_key
.
len
TSRMLS_CC
);
if
(
p
->
_flags
&
AMQP_BASIC_CONTENT_TYPE_FLAG
)
{
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"content_type"
),
(
const
char
*
)
p
->
content_type
.
bytes
,
(
PHP5to7_param_str_len_type_t
)
p
->
content_type
.
len
TSRMLS_CC
);
}
else
{
/* BC */
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"content_type"
),
""
,
0
TSRMLS_CC
);
}
if
(
p
->
_flags
&
AMQP_BASIC_CONTENT_ENCODING_FLAG
)
{
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"content_encoding"
),
(
const
char
*
)
p
->
content_encoding
.
bytes
,
(
PHP5to7_param_str_len_type_t
)
p
->
content_encoding
.
len
TSRMLS_CC
);
}
else
{
/* BC */
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"content_encoding"
),
""
,
0
TSRMLS_CC
);
}
if
(
p
->
_flags
&
AMQP_BASIC_HEADERS_FLAG
)
{
parse_amqp_table
(
&
(
p
->
headers
),
PHP5to7_MAYBE_PTR
(
headers
));
}
zend_update_property
(
this_ce
,
envelope
,
ZEND_STRL
(
"headers"
),
PHP5to7_MAYBE_PTR
(
headers
)
TSRMLS_CC
);
if
(
p
->
_flags
&
AMQP_BASIC_DELIVERY_MODE_FLAG
)
{
zend_update_property_long
(
this_ce
,
envelope
,
ZEND_STRL
(
"delivery_mode"
),
(
PHP5to7_param_long_type_t
)
p
->
delivery_mode
TSRMLS_CC
);
}
else
{
/* BC */
zend_update_property_long
(
this_ce
,
envelope
,
ZEND_STRL
(
"delivery_mode"
),
AMQP_DELIVERY_NONPERSISTENT
TSRMLS_CC
);
}
if
(
p
->
_flags
&
AMQP_BASIC_PRIORITY_FLAG
)
{
zend_update_property_long
(
this_ce
,
envelope
,
ZEND_STRL
(
"priority"
),
(
PHP5to7_param_long_type_t
)
p
->
priority
TSRMLS_CC
);
}
else
{
/* BC */
zend_update_property_long
(
this_ce
,
envelope
,
ZEND_STRL
(
"priority"
),
0
TSRMLS_CC
);
}
if
(
p
->
_flags
&
AMQP_BASIC_CORRELATION_ID_FLAG
)
{
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"correlation_id"
),
(
const
char
*
)
p
->
correlation_id
.
bytes
,
(
PHP5to7_param_str_len_type_t
)
p
->
correlation_id
.
len
TSRMLS_CC
);
}
else
{
/* BC */
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"correlation_id"
),
""
,
0
TSRMLS_CC
);
}
if
(
p
->
_flags
&
AMQP_BASIC_REPLY_TO_FLAG
)
{
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"reply_to"
),
(
const
char
*
)
p
->
reply_to
.
bytes
,
(
PHP5to7_param_str_len_type_t
)
p
->
reply_to
.
len
TSRMLS_CC
);
}
else
{
/* BC */
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"reply_to"
),
""
,
0
TSRMLS_CC
);
}
if
(
p
->
_flags
&
AMQP_BASIC_EXPIRATION_FLAG
)
{
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"expiration"
),
(
const
char
*
)
p
->
expiration
.
bytes
,
(
PHP5to7_param_str_len_type_t
)
p
->
expiration
.
len
TSRMLS_CC
);
}
else
{
/* BC */
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"expiration"
),
""
,
0
TSRMLS_CC
);
}
if
(
p
->
_flags
&
AMQP_BASIC_MESSAGE_ID_FLAG
)
{
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"message_id"
),
(
const
char
*
)
p
->
message_id
.
bytes
,
(
PHP5to7_param_str_len_type_t
)
p
->
message_id
.
len
TSRMLS_CC
);
}
else
{
/* BC */
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"message_id"
),
""
,
0
TSRMLS_CC
);
}
if
(
p
->
_flags
&
AMQP_BASIC_TIMESTAMP_FLAG
)
{
zend_update_property_long
(
this_ce
,
envelope
,
ZEND_STRL
(
"timestamp"
),
(
PHP5to7_param_long_type_t
)
p
->
timestamp
TSRMLS_CC
);
}
else
{
/* BC */
zend_update_property_long
(
this_ce
,
envelope
,
ZEND_STRL
(
"timestamp"
),
0
TSRMLS_CC
);
}
if
(
p
->
_flags
&
AMQP_BASIC_TYPE_FLAG
)
{
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"type"
),
(
const
char
*
)
p
->
type
.
bytes
,
(
PHP5to7_param_str_len_type_t
)
p
->
type
.
len
TSRMLS_CC
);
}
else
{
/* BC */
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"type"
),
""
,
0
TSRMLS_CC
);
}
if
(
p
->
_flags
&
AMQP_BASIC_USER_ID_FLAG
)
{
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"user_id"
),
(
const
char
*
)
p
->
user_id
.
bytes
,
(
PHP5to7_param_str_len_type_t
)
p
->
user_id
.
len
TSRMLS_CC
);
}
else
{
/* BC */
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"user_id"
),
""
,
0
TSRMLS_CC
);
}
if
(
p
->
_flags
&
AMQP_BASIC_APP_ID_FLAG
)
{
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"app_id"
),
(
const
char
*
)
p
->
app_id
.
bytes
,
(
PHP5to7_param_str_len_type_t
)
p
->
app_id
.
len
TSRMLS_CC
);
}
else
{
/* BC */
zend_update_property_stringl
(
this_ce
,
envelope
,
ZEND_STRL
(
"app_id"
),
""
,
0
TSRMLS_CC
);
}
PHP5to7_MAYBE_DESTROY
(
headers
);
}
/* {{{ proto AMQPEnvelope::__construct() */
PHP_METHOD
(
amqp_envelope_class
,
__construct
)
{
PHP_AMQP_NOPARAMS
();
/* BC */
PHP5to7_zval_t
headers
PHP5to7_MAYBE_SET_TO_NULL
;
PHP5to7_MAYBE_INIT
(
headers
);
PHP5to7_ARRAY_INIT
(
headers
);
zend_update_property_stringl
(
this_ce
,
getThis
(),
ZEND_STRL
(
"body"
),
""
,
0
TSRMLS_CC
);
zend_update_property_long
(
this_ce
,
getThis
(),
ZEND_STRL
(
"delivery_tag"
),
0
TSRMLS_CC
);
zend_update_property_bool
(
this_ce
,
getThis
(),
ZEND_STRL
(
"is_redelivery"
),
0
TSRMLS_CC
);
zend_update_property_stringl
(
this_ce
,
getThis
(),
ZEND_STRL
(
"exchange_name"
),
""
,
0
TSRMLS_CC
);
zend_update_property_stringl
(
this_ce
,
getThis
(),
ZEND_STRL
(
"routing_key"
),
""
,
0
TSRMLS_CC
);
zend_update_property_stringl
(
this_ce
,
getThis
(),
ZEND_STRL
(
"content_type"
),
""
,
0
TSRMLS_CC
);
zend_update_property_stringl
(
this_ce
,
getThis
(),
ZEND_STRL
(
"content_encoding"
),
""
,
0
TSRMLS_CC
);
zend_update_property
(
this_ce
,
getThis
(),
ZEND_STRL
(
"headers"
),
PHP5to7_MAYBE_PTR
(
headers
)
TSRMLS_CC
);
zend_update_property_long
(
this_ce
,
getThis
(),
ZEND_STRL
(
"delivery_mode"
),
AMQP_DELIVERY_NONPERSISTENT
TSRMLS_CC
);
zend_update_property_long
(
this_ce
,
getThis
(),
ZEND_STRL
(
"priority"
),
0
TSRMLS_CC
);
zend_update_property_stringl
(
this_ce
,
getThis
(),
ZEND_STRL
(
"correlation_id"
),
""
,
0
TSRMLS_CC
);
zend_update_property_stringl
(
this_ce
,
getThis
(),
ZEND_STRL
(
"reply_to"
),
""
,
0
TSRMLS_CC
);
zend_update_property_stringl
(
this_ce
,
getThis
(),
ZEND_STRL
(
"expiration"
),
""
,
0
TSRMLS_CC
);
zend_update_property_stringl
(
this_ce
,
getThis
(),
ZEND_STRL
(
"message_id"
),
""
,
0
TSRMLS_CC
);
zend_update_property_long
(
this_ce
,
getThis
(),
ZEND_STRL
(
"timestamp"
),
0
TSRMLS_CC
);
zend_update_property_stringl
(
this_ce
,
getThis
(),
ZEND_STRL
(
"type"
),
""
,
0
TSRMLS_CC
);
zend_update_property_stringl
(
this_ce
,
getThis
(),
ZEND_STRL
(
"user_id"
),
""
,
0
TSRMLS_CC
);
zend_update_property_stringl
(
this_ce
,
getThis
(),
ZEND_STRL
(
"app_id"
),
""
,
0
TSRMLS_CC
);
PHP5to7_MAYBE_DESTROY
(
headers
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getBody()*/
PHP_METHOD
(
amqp_envelope_class
,
getBody
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
zval
*
zv
=
PHP_AMQP_READ_THIS_PROP
(
"body"
);
if
(
Z_STRLEN_P
(
zv
)
==
0
)
{
/* BC */
RETURN_FALSE
;
}
RETURN_ZVAL
(
zv
,
1
,
0
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getRoutingKey() */
PHP_METHOD
(
amqp_envelope_class
,
getRoutingKey
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"routing_key"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getDeliveryMode() */
PHP_METHOD
(
amqp_envelope_class
,
getDeliveryMode
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"delivery_mode"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getDeliveryTag() */
PHP_METHOD
(
amqp_envelope_class
,
getDeliveryTag
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"delivery_tag"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getExchangeName() */
PHP_METHOD
(
amqp_envelope_class
,
getExchangeName
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"exchange_name"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::isRedelivery() */
PHP_METHOD
(
amqp_envelope_class
,
isRedelivery
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"is_redelivery"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getContentType() */
PHP_METHOD
(
amqp_envelope_class
,
getContentType
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"content_type"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getContentEncoding() */
PHP_METHOD
(
amqp_envelope_class
,
getContentEncoding
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"content_encoding"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getType() */
PHP_METHOD
(
amqp_envelope_class
,
getType
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"type"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getTimestamp() */
PHP_METHOD
(
amqp_envelope_class
,
getTimestamp
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"timestamp"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getPriority() */
PHP_METHOD
(
amqp_envelope_class
,
getPriority
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"priority"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getExpiration()
check amqp envelope */
PHP_METHOD
(
amqp_envelope_class
,
getExpiration
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"expiration"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getUserId() */
PHP_METHOD
(
amqp_envelope_class
,
getUserId
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"user_id"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getAppId() */
PHP_METHOD
(
amqp_envelope_class
,
getAppId
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"app_id"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getMessageId() */
PHP_METHOD
(
amqp_envelope_class
,
getMessageId
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"message_id"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getReplyTo() */
PHP_METHOD
(
amqp_envelope_class
,
getReplyTo
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"reply_to"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getCorrelationId() */
PHP_METHOD
(
amqp_envelope_class
,
getCorrelationId
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"correlation_id"
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::getHeader(string name) */
PHP_METHOD
(
amqp_envelope_class
,
getHeader
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
char
*
key
;
PHP5to7_param_str_len_type_t
key_len
;
PHP5to7_zval_t
*
tmp
=
NULL
;
if
(
zend_parse_parameters
(
ZEND_NUM_ARGS
()
TSRMLS_CC
,
"s"
,
&
key
,
&
key_len
)
==
FAILURE
)
{
return
;
}
zval
*
zv
=
PHP_AMQP_READ_THIS_PROP
(
"headers"
);
/* Look for the hash key */
if
(
!
PHP5to7_ZEND_HASH_FIND
(
HASH_OF
(
zv
),
key
,
key_len
+
1
,
tmp
))
{
RETURN_FALSE
;
}
RETURN_ZVAL
(
PHP5to7_MAYBE_DEREF
(
tmp
),
1
,
0
);
}
/* }}} */
/* {{{ proto AMQPEnvelope::hasHeader(string name) */
PHP_METHOD
(
amqp_envelope_class
,
hasHeader
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
char
*
key
;
PHP5to7_param_str_len_type_t
key_len
;
PHP5to7_zval_t
*
tmp
=
NULL
;
if
(
zend_parse_parameters
(
ZEND_NUM_ARGS
()
TSRMLS_CC
,
"s"
,
&
key
,
&
key_len
)
==
FAILURE
)
{
return
;
}
zval
*
zv
=
PHP_AMQP_READ_THIS_PROP
(
"headers"
);
/* Look for the hash key */
if
(
!
PHP5to7_ZEND_HASH_FIND
(
HASH_OF
(
zv
),
key
,
key_len
+
1
,
tmp
))
{
RETURN_FALSE
;
}
RETURN_TRUE
;
}
/* }}} */
/* {{{ proto AMQPEnvelope::getHeaders() */
PHP_METHOD
(
amqp_envelope_class
,
getHeaders
)
{
PHP5to7_READ_PROP_RV_PARAM_DECL
;
PHP_AMQP_NOPARAMS
();
PHP_AMQP_RETURN_THIS_PROP
(
"headers"
);
}
/* }}} */
/* amqp_envelope_class ARG_INFO definition */
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class__construct
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getBody
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getRoutingKey
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getDeliveryTag
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getDeliveryMode
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getExchangeName
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_isRedelivery
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getContentType
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getContentEncoding
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getType
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getTimestamp
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getPriority
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getExpiration
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getUserId
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getAppId
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getMessageId
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getReplyTo
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getCorrelationId
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getHeaders
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
0
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_getHeader
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
1
)
ZEND_ARG_INFO
(
0
,
name
)
ZEND_END_ARG_INFO
()
ZEND_BEGIN_ARG_INFO_EX
(
arginfo_amqp_envelope_class_hasHeader
,
ZEND_SEND_BY_VAL
,
ZEND_RETURN_VALUE
,
1
)
ZEND_ARG_INFO
(
0
,
name
)
ZEND_END_ARG_INFO
()
zend_function_entry
amqp_envelope_class_functions
[]
=
{
PHP_ME
(
amqp_envelope_class
,
__construct
,
arginfo_amqp_envelope_class__construct
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getBody
,
arginfo_amqp_envelope_class_getBody
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getRoutingKey
,
arginfo_amqp_envelope_class_getRoutingKey
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getDeliveryTag
,
arginfo_amqp_envelope_class_getDeliveryTag
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getDeliveryMode
,
arginfo_amqp_envelope_class_getDeliveryMode
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getExchangeName
,
arginfo_amqp_envelope_class_getExchangeName
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
isRedelivery
,
arginfo_amqp_envelope_class_isRedelivery
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getContentType
,
arginfo_amqp_envelope_class_getContentType
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getContentEncoding
,
arginfo_amqp_envelope_class_getContentEncoding
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getType
,
arginfo_amqp_envelope_class_getType
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getTimestamp
,
arginfo_amqp_envelope_class_getTimestamp
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getPriority
,
arginfo_amqp_envelope_class_getPriority
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getExpiration
,
arginfo_amqp_envelope_class_getExpiration
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getUserId
,
arginfo_amqp_envelope_class_getUserId
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getAppId
,
arginfo_amqp_envelope_class_getAppId
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getMessageId
,
arginfo_amqp_envelope_class_getMessageId
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getReplyTo
,
arginfo_amqp_envelope_class_getReplyTo
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getCorrelationId
,
arginfo_amqp_envelope_class_getCorrelationId
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getHeaders
,
arginfo_amqp_envelope_class_getHeaders
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
getHeader
,
arginfo_amqp_envelope_class_getHeader
,
ZEND_ACC_PUBLIC
)
PHP_ME
(
amqp_envelope_class
,
hasHeader
,
arginfo_amqp_envelope_class_hasHeader
,
ZEND_ACC_PUBLIC
)
{
NULL
,
NULL
,
NULL
}
/* Must be the last line in amqp_functions[] */
};
PHP_MINIT_FUNCTION
(
amqp_envelope
)
{
zend_class_entry
ce
;
INIT_CLASS_ENTRY
(
ce
,
"AMQPEnvelope"
,
amqp_envelope_class_functions
);
this_ce
=
zend_register_internal_class
(
&
ce
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"body"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
/*
deliver(consumer-tag consumer-tag,
delivery-tag delivery-tag,
redelivered redelivered,
exchange-name exchange,
shortstr routing-key)
get-ok(delivery-tag delivery-tag,
redelivered redelivered,
exchange-name exchange,
shortstr routing-key,
message-count message-count)
*/
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"delivery_tag"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"is_redelivery"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"exchange_name"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"routing_key"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
/*
shortstr content-type MIME content type.
shortstr content-encoding MIME content encoding.
table headers Message header field table.
octet delivery-mode Non-persistent (1) or persistent (2).
octet priority Message priority, 0 to 9.
shortstr correlation-id Application correlation identifier.
shortstr reply-to Address to reply to.
shortstr expiration Message expiration specification.
shortstr message-id Application message identifier.
timestamp timestamp Message timestamp.
shortstr type Message type name.
shortstr user-id Creating user id.
shortstr app-id Creating application id.
*/
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"content_type"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"content_encoding"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"headers"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"delivery_mode"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"priority"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"correlation_id"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"reply_to"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"expiration"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"message_id"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"timestamp"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"type"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"user_id"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
zend_declare_property_null
(
this_ce
,
ZEND_STRL
(
"app_id"
),
ZEND_ACC_PRIVATE
TSRMLS_CC
);
return
SUCCESS
;
}
void
parse_amqp_table
(
amqp_table_t
*
table
,
zval
*
result
)
{
int
i
;
PHP5to7_zval_t
value
PHP5to7_MAYBE_SET_TO_NULL
;
assert
(
Z_TYPE_P
(
result
)
==
IS_ARRAY
);
for
(
i
=
0
;
i
<
table
->
num_entries
;
i
++
)
{
PHP5to7_MAYBE_INIT
(
value
);
amqp_table_entry_t
*
entry
=
&
(
table
->
entries
[
i
]);
switch
(
entry
->
value
.
kind
)
{
case
AMQP_FIELD_KIND_BOOLEAN
:
ZVAL_BOOL
(
PHP5to7_MAYBE_PTR
(
value
),
entry
->
value
.
value
.
boolean
);
break
;
case
AMQP_FIELD_KIND_I8
:
ZVAL_LONG
(
PHP5to7_MAYBE_PTR
(
value
),
entry
->
value
.
value
.
i8
);
break
;
case
AMQP_FIELD_KIND_U8
:
ZVAL_LONG
(
PHP5to7_MAYBE_PTR
(
value
),
entry
->
value
.
value
.
u8
);
break
;
case
AMQP_FIELD_KIND_I16
:
ZVAL_LONG
(
PHP5to7_MAYBE_PTR
(
value
),
entry
->
value
.
value
.
i16
);
break
;
case
AMQP_FIELD_KIND_U16
:
ZVAL_LONG
(
PHP5to7_MAYBE_PTR
(
value
),
entry
->
value
.
value
.
u16
);
break
;
case
AMQP_FIELD_KIND_I32
:
ZVAL_LONG
(
PHP5to7_MAYBE_PTR
(
value
),
entry
->
value
.
value
.
i32
);
break
;
case
AMQP_FIELD_KIND_U32
:
ZVAL_LONG
(
PHP5to7_MAYBE_PTR
(
value
),
entry
->
value
.
value
.
u32
);
break
;
case
AMQP_FIELD_KIND_I64
:
ZVAL_LONG
(
PHP5to7_MAYBE_PTR
(
value
),
entry
->
value
.
value
.
i64
);
break
;
case
AMQP_FIELD_KIND_U64
:
ZVAL_LONG
(
PHP5to7_MAYBE_PTR
(
value
),
entry
->
value
.
value
.
i64
);
break
;
case
AMQP_FIELD_KIND_F32
:
ZVAL_DOUBLE
(
PHP5to7_MAYBE_PTR
(
value
),
entry
->
value
.
value
.
f32
);
break
;
case
AMQP_FIELD_KIND_F64
:
ZVAL_DOUBLE
(
PHP5to7_MAYBE_PTR
(
value
),
entry
->
value
.
value
.
f64
);
break
;
case
AMQP_FIELD_KIND_UTF8
:
case
AMQP_FIELD_KIND_BYTES
:
PHP5to7_ZVAL_STRINGL_DUP
(
PHP5to7_MAYBE_PTR
(
value
),
entry
->
value
.
value
.
bytes
.
bytes
,
entry
->
value
.
value
.
bytes
.
len
);
break
;
case
AMQP_FIELD_KIND_ARRAY
:
{
int
j
;
array_init
(
PHP5to7_MAYBE_PTR
(
value
));
for
(
j
=
0
;
j
<
entry
->
value
.
value
.
array
.
num_entries
;
++
j
)
{
switch
(
entry
->
value
.
value
.
array
.
entries
[
j
].
kind
)
{
case
AMQP_FIELD_KIND_UTF8
:
PHP5to7_ADD_NEXT_INDEX_STRINGL_DUP
(
PHP5to7_MAYBE_PTR
(
value
),
entry
->
value
.
value
.
array
.
entries
[
j
].
value
.
bytes
.
bytes
,
(
uint
)
entry
->
value
.
value
.
array
.
entries
[
j
].
value
.
bytes
.
len
);
break
;
case
AMQP_FIELD_KIND_TABLE
:
{
PHP5to7_zval_t
subtable
PHP5to7_MAYBE_SET_TO_NULL
;
PHP5to7_MAYBE_INIT
(
subtable
);
PHP5to7_ARRAY_INIT
(
subtable
);
parse_amqp_table
(
&
(
entry
->
value
.
value
.
array
.
entries
[
j
].
value
.
table
),
PHP5to7_MAYBE_PTR
(
subtable
)
);
add_next_index_zval
(
PHP5to7_MAYBE_PTR
(
value
),
PHP5to7_MAYBE_PTR
(
subtable
));
}
break
;
default
:
break
;
}
}
}
break
;
case
AMQP_FIELD_KIND_TABLE
:
PHP5to7_ARRAY_INIT
(
value
);
parse_amqp_table
(
&
(
entry
->
value
.
value
.
table
),
PHP5to7_MAYBE_PTR
(
value
));
break
;
case
AMQP_FIELD_KIND_TIMESTAMP
:
ZVAL_DOUBLE
(
PHP5to7_MAYBE_PTR
(
value
),
entry
->
value
.
value
.
u64
);
break
;
case
AMQP_FIELD_KIND_VOID
:
case
AMQP_FIELD_KIND_DECIMAL
:
default
:
ZVAL_NULL
(
PHP5to7_MAYBE_PTR
(
value
));
break
;
}
if
(
Z_TYPE_P
(
PHP5to7_MAYBE_PTR
(
value
))
!=
IS_NULL
)
{
char
*
key
=
estrndup
(
entry
->
key
.
bytes
,
(
uint
)
entry
->
key
.
len
);
add_assoc_zval
(
result
,
key
,
PHP5to7_MAYBE_PTR
(
value
));
efree
(
key
);
}
else
{
PHP5to7_MAYBE_DESTROY
(
value
);
}
}
return
;
}
/*
*Local variables:
*tab-width: 4
*c-basic-offset: 4
*End:
*vim600: noet sw=4 ts=4 fdm=marker
*vim<600: noet sw=4 ts=4
*/
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Sun, Nov 15, 5:26 AM (21 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
131912
Default Alt Text
amqp_envelope.c (26 KB)
Attached To
Mode
R113 php-ampqp
Attached
Detach File
Event Timeline