X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_functions.c;h=41afd28e3733664ab0d7ad22e3f47fd2420002a1;hp=1b71506b7dcbe8f35e14d15431732bf47b77ec48;hb=7b88d9022c90eb12e5fe195af8644935141c9d68;hpb=bf87f6e654235acb023ca052a5e71faeb2635a3f diff --git a/http_functions.c b/http_functions.c index 1b71506..41afd28 100644 --- a/http_functions.c +++ b/http_functions.c @@ -41,8 +41,6 @@ #include "php_http_send_api.h" #include "php_http_url_api.h" -ZEND_EXTERN_MODULE_GLOBALS(http) - /* {{{ proto string http_date([int timestamp]) * * Compose a valid HTTP date regarding RFC 822/1123 @@ -1578,48 +1576,44 @@ PHP_FUNCTION(http_build_query) /* {{{ */ #ifdef HTTP_HAVE_ZLIB -/* {{{ proto string http_gzencode(string data[, int level = -1[, int mtime = 0]]) +/* {{{ proto string http_deflate(string data[, int flags = 0]) * - * Compress data with the HTTP compatible GZIP encoding. + * Compress data with gzip, zlib AKA deflate or raw deflate encoding. * - * Expects the first parameter to be a string which contains the data that - * should be encoded. Additionally accepts an optional in paramter specifying - * the compression level, where -1 is default, 0 is no compression and 9 is - * best compression ratio. + * Expects the first parameter to be a string containing the data that should + * be encoded. * * Returns the encoded string on success, or NULL on failure. */ -PHP_FUNCTION(http_gzencode) +PHP_FUNCTION(http_deflate) { char *data; int data_len; - long level = -1, mtime = 0; - + long flags = 0; + RETVAL_NULL(); - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &data, &data_len, &level, &mtime)) { - HTTP_CHECK_GZIP_LEVEL(level, return); - { - char *encoded; - size_t encoded_len; - - if (SUCCESS == http_encoding_gzencode(level, mtime, data, data_len, &encoded, &encoded_len)) { - RETURN_STRINGL(encoded, (int) encoded_len, 0); - } + if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &data, &data_len, &flags)) { + char *encoded; + size_t encoded_len; + + if (SUCCESS == http_encoding_deflate(flags, data, data_len, &encoded, &encoded_len)) { + RETURN_STRINGL(encoded, (int) encoded_len, 0); } } } /* }}} */ -/* {{{ proto string http_gzdecode(string data) +/* {{{ proto string http_inflate(string data) * - * Uncompress data compressed with the HTTP compatible GZIP encoding. + * Uncompress data compressed with either gzip, deflate AKA zlib or raw + * deflate encoding. * * Expects a string as parameter containing the compressed data. * * Returns the decoded string on success, or NULL on failure. */ -PHP_FUNCTION(http_gzdecode) +PHP_FUNCTION(http_inflate) { char *data; int data_len; @@ -1630,70 +1624,51 @@ PHP_FUNCTION(http_gzdecode) char *decoded; size_t decoded_len; - if (SUCCESS == http_encoding_gzdecode(data, data_len, &decoded, &decoded_len)) { + if (SUCCESS == http_encoding_inflate(data, data_len, &decoded, &decoded_len)) { RETURN_STRINGL(decoded, (int) decoded_len, 0); } } } /* }}} */ -/* {{{ proto string http_deflate(string data[, int level = -1[, bool zlib_header = false]]) +/* {{{ proto string ob_deflatehandler(string data, int mode) * - * Compress data with the HTTP compatible DEFLATE encoding. - * - * Expects the first parameter to be a string containing the data that should - * be encoded. Additionally accepts an optional int parameter specifying the - * compression level, where -1 is default, 0 is no compression and 9 is best - * compression ratio. - * - * Returns the encoded string on success, or NULL on failure. + * For use with ob_start(). The deflate output buffer handler can only be used once. + * It conflicts with ob_gzhanlder and zlib.output_compression as well and should + * not be used after ext/mbstrings mb_output_handler and ext/sessions URL-Rewriter (AKA + * session.use_trans_sid). */ -PHP_FUNCTION(http_deflate) +PHP_FUNCTION(ob_deflatehandler) { char *data; int data_len; - long level = -1; - zend_bool zhdr = 0; - - RETVAL_NULL(); - - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lb", &data, &data_len, &level, &zhdr)) { - HTTP_CHECK_GZIP_LEVEL(level, return); - { - char *encoded; - size_t encoded_len; - - if (SUCCESS == http_encoding_deflate(level, zhdr, data, data_len, &encoded, &encoded_len)) { - RETURN_STRINGL(encoded, (int) encoded_len, 0); - } - } + long mode; + + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &data, &data_len, &mode)) { + RETURN_FALSE; } + + http_ob_deflatehandler(data, data_len, &Z_STRVAL_P(return_value), (uint *) &Z_STRLEN_P(return_value), mode); + Z_TYPE_P(return_value) = Z_STRVAL_P(return_value) ? IS_STRING : IS_NULL; } /* }}} */ -/* {{{ proto string http_inflate(string data) +/* {{{ proto string ob_inflatehandler(string data, int mode) * - * Uncompress data compressed with the HTTP compatible DEFLATE encoding. - * - * Expects a string as parameter containing the compressed data. - * - * Returns the decoded string on success, or NULL on failure. + * For use with ob_start(). Same restrictions as with ob_deflatehandler apply. */ -PHP_FUNCTION(http_inflate) +PHP_FUNCTION(ob_inflatehandler) { char *data; int data_len; + long mode; - RETVAL_NULL(); - - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &data, &data_len)) { - char *decoded; - size_t decoded_len; - - if (SUCCESS == http_encoding_inflate(data, data_len, &decoded, &decoded_len)) { - RETURN_STRINGL(decoded, (int) decoded_len, 0); - } + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &data, &data_len, &mode)) { + RETURN_FALSE; } + + http_ob_inflatehandler(data, data_len, &Z_STRVAL_P(return_value), (uint *) &Z_STRLEN_P(return_value), mode); + Z_TYPE_P(return_value) = Z_STRVAL_P(return_value) ? IS_STRING : IS_NULL; } /* }}} */