X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_message_object.c;h=244e29da292569359834051902169c13548f51e3;hp=ffb319809ba6a1752b54b385d82a390e06be709b;hb=b7d46301e6a672db53cec3363ab0d2f31ccb6de9;hpb=e434da0fad7db62d86c236c68b22150165f2647a diff --git a/http_message_object.c b/http_message_object.c index ffb3198..244e29d 100644 --- a/http_message_object.c +++ b/http_message_object.c @@ -39,8 +39,6 @@ static HashTable *_http_message_object_get_props(zval *object TSRMLS_DC); 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, setRaw, NULL, ZEND_ACC_PUBLIC) PHP_ME(HttpMessage, getBody, NULL, ZEND_ACC_PUBLIC) PHP_ME(HttpMessage, getHeaders, NULL, ZEND_ACC_PUBLIC) PHP_ME(HttpMessage, setHeaders, NULL, ZEND_ACC_PUBLIC) @@ -55,7 +53,6 @@ zend_function_entry http_message_object_fe[] = { PHP_ME(HttpMessage, setRequestUri, NULL, ZEND_ACC_PUBLIC) PHP_ME(HttpMessage, getHttpVersion, NULL, ZEND_ACC_PUBLIC) PHP_ME(HttpMessage, setHttpVersion, NULL, ZEND_ACC_PUBLIC) - PHP_ME(HttpMessage, getNestedMessage, NULL, ZEND_ACC_PUBLIC) PHP_ME(HttpMessage, toString, NULL, ZEND_ACC_PUBLIC) ZEND_MALIAS(HttpMessage, __toString, toString, NULL, ZEND_ACC_PUBLIC) @@ -90,7 +87,18 @@ zend_object_value _http_message_object_new_ex(zend_class_entry *ce, http_message o = ecalloc(1, sizeof(http_message_object)); o->zo.ce = ce; - o->message = msg ? msg : http_message_new(); + + MAKE_STD_ZVAL(o->nested); + Z_TYPE_P(o->nested) = IS_OBJECT; + + if (msg) { + o->message = msg; + if (msg->nested) { + o->nested->value.obj = http_message_object_from_msg(msg->nested); + } + } else { + o->message = http_message_new(); + } ALLOC_HASHTABLE(OBJ_PROP(o)); zend_hash_init(OBJ_PROP(o), 0, NULL, ZVAL_PTR_DTOR, 0); @@ -115,7 +123,8 @@ static inline void _http_message_object_declare_default_properties(TSRMLS_D) DCL_PROP_N(PROTECTED, httpVersion); DCL_PROP_N(PROTECTED, headers); - DCL_PROP_N(PROTECTED, nestedMessage); + + DCL_PROP_N(PUBLIC, nestedMessage); } static void _http_message_object_free(zend_object *object TSRMLS_DC) @@ -127,8 +136,10 @@ static void _http_message_object_free(zend_object *object TSRMLS_DC) FREE_HASHTABLE(OBJ_PROP(o)); } if (o->message) { - http_message_free(o->message); + http_message_dtor(o->message); + efree(o->message); } + FREE_ZVAL(o->nested); zval_dtor(&o->_tmp_property); efree(o); } @@ -139,12 +150,15 @@ static zval *_http_message_object_read_prop(zval *object, zval *member, int type http_message *msg = obj->message; zval *return_value = &obj->_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); + /* public */ + if (strcmp(Z_STRVAL_P(member), "nestedMessage")) { + 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); + } } - zval_ptr_dtor(&return_value); + 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)), @@ -186,11 +200,9 @@ static zval *_http_message_object_read_prop(zval *object, zval *member, int type break; case HTTP_MSG_PROPHASH_NESTED_MESSAGE: + RETVAL_NULL(); if (msg->nested) { - Z_TYPE_P(return_value) = IS_OBJECT; - return_value->value.obj = http_message_object_from_msg(msg->nested); - } else { - RETVAL_NULL(); + return obj->nested; } break; @@ -231,8 +243,11 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va getObjectEx(http_message_object, obj, object); http_message *msg = obj->message; - 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)); + /* public */ + if (strcmp("nestedMessage", Z_STRVAL_P(member))) { + 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)); + } } #if 0 @@ -286,6 +301,9 @@ static void _http_message_object_write_prop(zval *object, zval *member, zval *va break; case HTTP_MSG_PROPHASH_NESTED_MESSAGE: + zval_ptr_dtor(&obj->nested); + obj->nested->value.obj = value->value.obj; + zval_add_ref(&value); break; case HTTP_MSG_PROPHASH_REQUEST_METHOD: