25#define PHP_STREAM_BRIGADE_RES_NAME "userfilter.bucket brigade"
26#define PHP_STREAM_BUCKET_RES_NAME "userfilter.bucket"
35static int le_bucket_brigade;
78 user_filter_class_entry = register_class_php_user_filter();
79 stream_bucket_class_entry = register_class_StreamBucket();
86 if (le_bucket_brigade ==
FAILURE) {
90 register_user_filters_symbols(module_number);
97 if (
BG(user_filter_map)) {
100 BG(user_filter_map) =
NULL;
131 size_t *bytes_consumed,
143 if (
CG(unclean_shutdown)) {
151 zval *stream_prop = zend_hash_str_find_ind(
Z_OBJPROP_P(obj),
"stream",
sizeof(
"stream")-1);
165 if (bytes_consumed) {
185 }
else if (call_result ==
FAILURE) {
189 if (bytes_consumed) {
190 *bytes_consumed = zval_get_long(&
args[2]);
193 if (buckets_in->
head) {
210 stream->
flags |= orig_no_fclose;
233 "Cannot use a user-space filter with a persistent stream");
240 if (
NULL == (fdat = zend_hash_str_find_ptr(
BG(user_filter_map), (
char*)filtername,
len))) {
248 if ((period =
strrchr(filtername,
'.'))) {
253 period = wildcard + (period - filtername);
258 if (
NULL != (fdat = zend_hash_str_find_ptr(
BG(user_filter_map), wildcard,
strlen(wildcard)))) {
262 period =
strrchr(wildcard,
'.');
274 "User-filter \"%s\" requires class \"%s\", but that class is not defined",
286 if (filter ==
NULL) {
292 add_property_string(&obj,
"filtername", (
char*)filtername);
296 add_property_zval(&obj,
"params", filterparams);
298 add_property_null(&obj,
"params");
330 user_filter_factory_create
333static void filter_item_dtor(
zval *
zv)
343 zval *zbrigade, zbucket;
374 zval *zbrigade, *zobject;
375 zval *pzbucket, *pzdata,
rv;
442 zval *zstream, zbucket;
516 if (!
BG(user_filter_map)) {
524 if (zend_hash_add_ptr(
BG(user_filter_map), filtername, fdat) !=
NULL) {
stream_bucket_append($brigade, StreamBucket $bucket)
strrchr(string $haystack, string $needle, bool $before_needle=false)
stream_bucket_make_writeable($brigade)
stream_bucket_prepend($brigade, StreamBucket $bucket)
stream_filter_register(string $filter_name, string $class)
stream_bucket_new($stream, string $buffer)
foreach($dp as $el) foreach( $dp as $el) if( $pass2< 2) echo ""
PHPAPI php_stream_bucket * php_stream_bucket_new(php_stream *stream, char *buf, size_t buflen, uint8_t own_buf, uint8_t buf_persistent)
PHPAPI php_stream_bucket * php_stream_bucket_make_writeable(php_stream_bucket *bucket)
PHPAPI void php_stream_bucket_append(php_stream_bucket_brigade *brigade, php_stream_bucket *bucket)
PHPAPI void php_stream_bucket_delref(php_stream_bucket *bucket)
PHPAPI void php_stream_bucket_prepend(php_stream_bucket_brigade *brigade, php_stream_bucket *bucket)
PHPAPI int php_stream_filter_register_factory_volatile(zend_string *filterpattern, const php_stream_filter_factory *factory)
PHPAPI void php_stream_filter_free(php_stream_filter *filter)
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
#define PHP_MINIT_FUNCTION
#define PHP_RSHUTDOWN_FUNCTION
#define php_stream_filter_alloc(fops, thisptr, persistent)
#define PSFS_FLAG_FLUSH_CLOSE
struct _php_stream_filter_ops php_stream_filter_ops
php_stream_filter_status_t
struct _php_stream_filter_factory php_stream_filter_factory
struct _php_stream_bucket php_stream_bucket
struct _php_stream_bucket_brigade php_stream_bucket_brigade
struct _php_stream php_stream
#define php_stream_from_zval(xstr, pzval)
struct _php_stream_filter php_stream_filter
#define php_stream_to_zval(stream, zval)
#define php_get_stream_filters_hash()
#define php_stream_is_persistent(stream)
#define PHP_STREAM_FLAG_NO_FCLOSE
#define PHP_STREAM_BUCKET_RES_NAME
#define PHP_STREAM_BRIGADE_RES_NAME
#define INTERNAL_FUNCTION_PARAMETERS
#define INTERNAL_FUNCTION_PARAM_PASSTHRU
ZEND_API zend_result object_init_ex(zval *arg, zend_class_entry *class_type)
ZEND_API zval * zend_read_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, bool silent, zval *rv)
ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, const char *value, size_t value_len)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value)
ZEND_API void zend_update_property_long(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zend_long value)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
ZEND_API zend_result add_next_index_str(zval *arg, zend_string *str)
#define ZEND_PARSE_PARAMETERS_END()
#define Z_PARAM_RESOURCE(dest)
#define ZEND_PARSE_PARAMETERS_NONE()
ZEND_API zend_result zend_call_method_if_exists(zend_object *object, zend_string *method_name, zval *retval, uint32_t param_count, zval *params)
#define Z_PARAM_STRING(dest, dest_len)
#define Z_PARAM_STR(dest)
#define ZEND_PARSE_PARAMETERS_START(min_num_args, max_num_args)
#define call_user_function(function_table, object, function_name, retval_ptr, param_count, params)
#define Z_PARAM_OBJECT_OF_CLASS(dest, _ce)
#define Z_PARAM_ZVAL(dest)
#define ZVAL_STRINGL(z, s, l)
#define perealloc(ptr, size, persistent)
#define ecalloc(nmemb, size)
#define pemalloc(size, persistent)
#define safe_emalloc(nmemb, size, offset)
zend_string_release_ex(func->internal_function.function_name, 0)
ZEND_API zend_class_entry * zend_lookup_class(zend_string *name)
ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht)
ZEND_API zend_result ZEND_FASTCALL zend_hash_del(HashTable *ht, zend_string *key)
#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent)
#define ZEND_HASH_MAP_FOREACH_STR_KEY(ht, _key)
#define ZEND_HASH_FOREACH_END()
ZEND_API void * zend_fetch_resource(zend_resource *res, const char *resource_type_name, int resource_type)
ZEND_API zend_resource * zend_register_resource(void *rsrc_pointer, int rsrc_type)
ZEND_API void * zend_fetch_resource_ex(zval *res, const char *resource_type_name, int resource_type)
ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, const char *type_name, int module_number)
#define ZEND_RSRC_DTOR_FUNC(name)
struct _zend_string zend_string
ZEND_API void ZEND_FASTCALL convert_to_null(zval *op)
ZEND_API void ZEND_FASTCALL convert_to_long(zval *op)
struct _zend_class_entry zend_class_entry
#define ZSTR_INIT_LITERAL(s, persistent)
#define Z_STRVAL_P(zval_p)
#define Z_ISUNDEF_P(zval_p)
struct _zend_array HashTable
void(* dtor_func_t)(zval *pDest)
#define Z_STRLEN_P(zval_p)
#define Z_OBJCE_P(zval_p)
#define ZVAL_MAKE_REF(zv)
#define Z_OBJPROP_P(zval_p)
ZEND_API void zval_ptr_dtor(zval *zval_ptr)