- http_build_url() replaces http_absolute_(url|uri)/http_build_uri;
[m6w6/ext-http] / http_filter_api.c
index 648c509adff7d66177a9f07bed22b04704796156..4b54998a31c3019a9b2d15d15c5bebf3dfff46b1 100644 (file)
@@ -381,6 +381,7 @@ static HTTP_FILTER_OPS(deflate) = {
 
 static php_stream_filter *http_filter_create(const char *name, zval *params, int p TSRMLS_DC)
 {
 
 static php_stream_filter *http_filter_create(const char *name, zval *params, int p TSRMLS_DC)
 {
+       zval **tmp = &params;
        php_stream_filter *f = NULL;
        
        if (!strcasecmp(name, "http.chunked_decode")) {
        php_stream_filter *f = NULL;
        
        if (!strcasecmp(name, "http.chunked_decode")) {
@@ -407,6 +408,20 @@ static php_stream_filter *http_filter_create(const char *name, zval *params, int
                        if (p) {
                                b->flags |= HTTP_ENCODING_STREAM_PERSISTENT;
                        }
                        if (p) {
                                b->flags |= HTTP_ENCODING_STREAM_PERSISTENT;
                        }
+                       if (params) {
+                               switch (Z_TYPE_P(params))
+                               {
+                                       case IS_ARRAY:
+                                       case IS_OBJECT:
+                                               if (SUCCESS != zend_hash_find(HASH_OF(params), "zlib", sizeof("zlib"), (void **) &tmp)) {
+                                                       break;
+                                               }
+                                       default:
+                                               if (zval_is_true(*tmp)) {
+                                                       b->flags |= HTTP_ENCODING_STREAM_ZLIB_HEADER;
+                                               }
+                               }
+                       }
                        if (!(f = php_stream_filter_alloc(&HTTP_FILTER_OP(gzencode), b, p))) {
                                pefree(b, p);
                        }
                        if (!(f = php_stream_filter_alloc(&HTTP_FILTER_OP(gzencode), b, p))) {
                                pefree(b, p);
                        }
@@ -420,6 +435,20 @@ static php_stream_filter *http_filter_create(const char *name, zval *params, int
                        if (p) {
                                b->flags |= HTTP_ENCODING_STREAM_PERSISTENT;
                        }
                        if (p) {
                                b->flags |= HTTP_ENCODING_STREAM_PERSISTENT;
                        }
+                       if (params) {
+                               switch (Z_TYPE_P(params))
+                               {
+                                       case IS_ARRAY:
+                                       case IS_OBJECT:
+                                               if (SUCCESS != zend_hash_find(HASH_OF(params), "zlib", sizeof("zlib"), (void **) &tmp)) {
+                                                       break;
+                                               }
+                                       default:
+                                               if (zval_is_true(*tmp)) {
+                                                       b->flags |= HTTP_ENCODING_STREAM_ZLIB_HEADER;
+                                               }
+                               }
+                       }
                        if (!(f = php_stream_filter_alloc(&HTTP_FILTER_OP(deflate), b, p))) {
                                pefree(b, p);
                        }
                        if (!(f = php_stream_filter_alloc(&HTTP_FILTER_OP(deflate), b, p))) {
                                pefree(b, p);
                        }