+static void handle_debug(void *arg, php_http_client_t *client, php_http_client_enqueue_t *e, unsigned type, const char *data, size_t size)
+{
+ zval *ztype, *zdata, *zreq, *zclient;
+ php_http_client_object_t *client_obj = arg;
+ zend_error_handling zeh;
+ TSRMLS_FETCH_FROM_CTX(client->ts);
+
+ MAKE_STD_ZVAL(zclient);
+ ZVAL_OBJVAL(zclient, client_obj->zv, 1);
+ MAKE_STD_ZVAL(zreq);
+ ZVAL_OBJVAL(zreq, ((php_http_message_object_t *) e->opaque)->zv, 1);
+ MAKE_STD_ZVAL(ztype);
+ ZVAL_LONG(ztype, type);
+ MAKE_STD_ZVAL(zdata);
+ ZVAL_STRINGL(zdata, data, size, 1);
+
+ zend_replace_error_handling(EH_NORMAL, NULL, &zeh TSRMLS_CC);
+ if (SUCCESS == zend_fcall_info_argn(&client_obj->debug.fci TSRMLS_CC, 4, &zclient, &zreq, &ztype, &zdata)) {
+ ++client_obj->client->callback.depth;
+ zend_fcall_info_call(&client_obj->debug.fci, &client_obj->debug.fcc, NULL, NULL TSRMLS_CC);
+ --client_obj->client->callback.depth;
+ zend_fcall_info_args_clear(&client_obj->debug.fci, 0);
+ }
+ zend_restore_error_handling(&zeh TSRMLS_CC);
+
+ zval_ptr_dtor(&zclient);
+ zval_ptr_dtor(&zreq);
+ zval_ptr_dtor(&ztype);
+ zval_ptr_dtor(&zdata);
+}
+