X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_message_object.c;h=e934f8bd6a1792de423e1ae4fcfb925450ef5b26;hp=6ebb751f1bcb3c6ff37898bdd3c51879b218ad6a;hb=74c406d2e8a73540d9df9b888a17c86b0bb7fc2c;hpb=c2b4f0332ead5425b183d2487ab5f25663f1009f diff --git a/http_message_object.c b/http_message_object.c index 6ebb751..e934f8b 100644 --- a/http_message_object.c +++ b/http_message_object.c @@ -26,6 +26,8 @@ #include "php_http_std_defs.h" #include "php_http_message_object.h" +#include "phpstr/phpstr.h" + #ifdef ZEND_ENGINE_2 #define http_message_object_declare_default_properties() _http_message_object_declare_default_properties(TSRMLS_C) @@ -36,6 +38,8 @@ static zval *_http_message_object_read_prop(zval *object, zval *member, int type static void _http_message_object_write_prop(zval *object, zval *member, zval *value TSRMLS_DC); #define http_message_object_get_props _http_message_object_get_props static HashTable *_http_message_object_get_props(zval *object TSRMLS_DC); +#define http_message_object_clone_obj _http_message_object_clone_obj +static inline zend_object_value _http_message_object_clone_obj(zval *object TSRMLS_DC); zend_class_entry *http_message_object_ce; zend_function_entry http_message_object_fe[] = { @@ -57,7 +61,7 @@ zend_function_entry http_message_object_fe[] = { PHP_ME(HttpMessage, getParentMessage, NULL, ZEND_ACC_PUBLIC) PHP_ME(HttpMessage, send, NULL, ZEND_ACC_PUBLIC) PHP_ME(HttpMessage, toString, NULL, ZEND_ACC_PUBLIC) - + ZEND_MALIAS(HttpMessage, __toString, toString, NULL, ZEND_ACC_PUBLIC) PHP_ME(HttpMessage, fromString, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) @@ -73,6 +77,7 @@ void _http_message_object_init(INIT_FUNC_ARGS) HTTP_LONG_CONSTANT("HTTP_MSG_REQUEST", HTTP_MSG_REQUEST); HTTP_LONG_CONSTANT("HTTP_MSG_RESPONSE", HTTP_MSG_RESPONSE); + http_message_object_handlers.clone_obj = http_message_object_clone_obj; http_message_object_handlers.read_property = http_message_object_read_prop; http_message_object_handlers.write_property = http_message_object_write_prop; http_message_object_handlers.get_properties = http_message_object_get_props; @@ -110,6 +115,11 @@ zend_object_value _http_message_object_new_ex(zend_class_entry *ce, http_message return ov; } +zend_object_value _http_message_object_clone(zval *this_ptr TSRMLS_DC) +{ + return http_message_object_clone_obj(this_ptr TSRMLS_CC); +} + static inline void _http_message_object_declare_default_properties(TSRMLS_D) { zend_class_entry *ce = http_message_object_ce; @@ -124,7 +134,7 @@ static inline void _http_message_object_declare_default_properties(TSRMLS_D) DCL_PROP_N(PROTECTED, parentMessage); } -static void _http_message_object_free(zend_object *object TSRMLS_DC) +void _http_message_object_free(zend_object *object TSRMLS_DC) { http_message_object *o = (http_message_object *) object; @@ -139,6 +149,12 @@ static void _http_message_object_free(zend_object *object TSRMLS_DC) efree(o); } +static inline zend_object_value _http_message_object_clone_obj(zval *this_ptr TSRMLS_DC) +{ + getObject(http_message_object, obj); + return http_message_object_from_msg(http_message_dup(obj->message)); +} + static zval *_http_message_object_read_prop(zval *object, zval *member, int type TSRMLS_DC) { getObjectEx(http_message_object, obj, object); @@ -154,10 +170,6 @@ static zval *_http_message_object_read_prop(zval *object, zval *member, int type return EG(uninitialized_zval_ptr); } -#if 1 - fprintf(stderr, "Reading property: %s(%d==%d)\n", Z_STRVAL_P(member), Z_STRLEN_P(member), strlen(Z_STRVAL_P(member))); -#endif - switch (zend_get_hash_value(Z_STRVAL_P(member), Z_STRLEN_P(member) + 1)) { case HTTP_MSG_PROPHASH_TYPE: @@ -244,10 +256,6 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va zend_error(E_WARNING, "Cannot access protected property %s::$%s", obj->zo.ce->name, Z_STRVAL_P(member)); } -#if 1 - fprintf(stderr, "Writing property: %s(%d==%d)\n", Z_STRVAL_P(member), Z_STRLEN_P(member), strlen(Z_STRVAL_P(member))); -#endif - switch (zend_get_hash_value(Z_STRVAL_P(member), Z_STRLEN_P(member) + 1)) { case HTTP_MSG_PROPHASH_TYPE: @@ -271,7 +279,7 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va break; case HTTP_MSG_PROPHASH_HTTP_VERSION: - convert_to_long_ex(&value); + convert_to_double_ex(&value); switch (msg->type) { case HTTP_MSG_REQUEST: