#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)
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[] = {
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)
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;
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;
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;
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);
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:
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:
break;
case HTTP_MSG_PROPHASH_HTTP_VERSION:
- convert_to_long_ex(&value);
+ convert_to_double_ex(&value);
switch (msg->type)
{
case HTTP_MSG_REQUEST:
- msg->info.request.http_version = (float) Z_DVAL_P(value);
+ msg->info.request.http_version = Z_DVAL_P(value);
break;
case HTTP_MSG_RESPONSE:
- msg->info.response.http_version = (float) Z_DVAL_P(value);
+ msg->info.response.http_version = Z_DVAL_P(value);
break;
}
break;