phpstr_dtor(&HTTP_G(curlbuf));
#endif
+ zval_dtor(&HTTP_G(message_object_tmp_property));
+
return SUCCESS;
}
/* }}} */
#include "php.h"
+#include "php_http.h"
#include "php_http_std_defs.h"
#include "php_http_message_object.h"
#ifdef ZEND_ENGINE_2
+ZEND_EXTERN_MODULE_GLOBALS(http);
+
#define http_message_object_declare_default_properties() _http_message_object_declare_default_properties(TSRMLS_C)
static inline void _http_message_object_declare_default_properties(TSRMLS_D);
#define http_message_object_read_prop _http_message_object_read_prop
zend_class_entry *http_message_object_ce;
zend_function_entry http_message_object_fe[] = {
PHP_ME(HttpMessage, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
- PHP_ME(HttpMessage, __destruct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_DTOR)
+ PHP_ME(HttpMessage, setRaw, NULL, ZEND_ACC_PUBLIC)
+ PHP_ME(HttpMessage, getBody, NULL, ZEND_ACC_PUBLIC)
+ PHP_ME(HttpMessage, getHeaders, NULL, ZEND_ACC_PUBLIC)
{NULL, NULL, NULL}
};
static zend_object_handlers http_message_object_handlers;
{
getObjectEx(http_message_object, obj, object);
http_message *msg = obj->message;
- zval *return_value;
+ zval *return_value = &HTTP_G(message_object_tmp_property);
if (!EG(scope) || !instanceof_function(EG(scope), obj->zo.ce TSRMLS_CC)) {
zend_error(E_WARNING, "Cannot access protected property %s::$%s", obj->zo.ce->name, Z_STRVAL_P(member));
return EG(uninitialized_zval_ptr);
}
- ALLOC_ZVAL(return_value);
- return_value->refcount = 0;
+ zval_dtor(return_value);
#if 0
fprintf(stderr, "Reading property: %s(%d==%d) (%lu)\n", Z_STRVAL_P(member), Z_STRLEN_P(member), strlen(Z_STRVAL_P(member)),
if (msg->len) {
RETVAL_STRINGL(msg->raw, msg->len, 1);
} else {
- RETVAL_STRINGL(empty_string, 0, 0);
+ RETVAL_STRINGL(empty_string, 0, 1);
}
} else {
RETVAL_NULL();
break;
case HTTP_MSG_PROPHASH_HEADERS:
- Z_TYPE_P(return_value) = IS_ARRAY;
- Z_ARRVAL_P(return_value) = &msg->hdrs;
+ array_init(return_value);
+ zend_hash_copy(Z_ARRVAL_P(return_value), &msg->hdrs, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *));
break;
case HTTP_MSG_PROPHASH_NESTED_MESSAGE:
/* {{{ HttpMessage */
-/* {{{ void HttpMessage::__construct([string raw_message]) */
+/* {{{ void HttpMessage::__construct([string raw_message])
+ *
+ * Instantiate a new HttpMessage object based on the optionally provided
+ * raw message. An HTTP Message can be either a response or a request.
+ */
PHP_METHOD(HttpMessage, __construct)
{
zval *message = NULL;
int message_len;
getObject(http_message_object, obj);
- http_message *msg = obj->message;
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z/", &message)) {
return;
}
if (message) {
+ convert_to_string(message);
SET_PROP(obj, raw, message);
}
}
/* }}} */
-/* {{{ void HttpMessage::__destruct() */
-PHP_METHOD(HttpMessage, __destruct)
+/* {{{ void HttpMessage::setRaw(string raw_message)
+ *
+ * Parse a new raw message.
+ */
+PHP_METHOD(HttpMessage, setRaw)
{
+ zval *message;
getObject(http_message_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/", &message)) {
+ return;
+ }
+ convert_to_string(message);
+ SET_PROP(obj, raw, message);
+}
+/* }}} */
+
+/* {{{ string HttpMessage::getBody()
+ *
+ * Get the body of the parsed Message.
+ */
+PHP_METHOD(HttpMessage, getBody)
+{
+ zval *body;
+ getObject(http_message_object, obj);
+
NO_ARGS;
+ body = GET_PROP(obj, body);
+ RETURN_STRINGL(Z_STRVAL_P(body), Z_STRLEN_P(body), 1);
+}
+/* }}} */
+
+/* {{{ array HttpMessage::getHeaders()
+ *
+ * Get Message Headers.
+ */
+PHP_METHOD(HttpMessage, getHeaders)
+{
+ zval *headers;
+ getObject(http_message_object, obj);
+
+ NO_ARGS;
+
+ headers = GET_PROP(obj, headers);
+ array_init(return_value);
+ array_copy(headers, return_value);
}
/* }}} */
char curlerr[CURL_ERROR_SIZE + 1];
# endif
zend_llist to_free;
+ zval message_object_tmp_property;
#endif /* HTTP_HAVE_CURL */
ZEND_END_MODULE_GLOBALS(http)
#define HTTP_MSG_PROPHASH_RESPONSE_STATUS 3857097400LU
PHP_METHOD(HttpMessage, __construct);
-PHP_METHOD(HttpMessage, __destruct);
+PHP_METHOD(HttpMessage, setRaw);
+PHP_METHOD(HttpMessage, getBody);
+PHP_METHOD(HttpMessage, getHeaders);
#endif
#endif