X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=http_functions.c;h=bf376ac479b46b3a7d54cdf267b1801a9cd47581;hb=a0098fdbfef71be0fab417b5bc624dc884bd4549;hp=b0916b9af403373bda564d06fd5b410bc30659db;hpb=693aff1dce7d26388ff36794fe4b90a26b7f2ccd;p=m6w6%2Fext-http
diff --git a/http_functions.c b/http_functions.c
index b0916b9..bf376ac 100644
--- a/http_functions.c
+++ b/http_functions.c
@@ -42,6 +42,7 @@
#include "php_http_message_api.h"
#include "php_http_send_api.h"
#include "php_http_url_api.h"
+#include "php_http_encoding_api.h"
#include "phpstr/phpstr.h"
@@ -87,11 +88,11 @@ PHP_FUNCTION(http_date)
* Returns the absolute URI as string.
*
* Examples:
- *
+ *
+ *
*/
PHP_FUNCTION(http_build_uri)
{
@@ -754,7 +755,7 @@ PHP_FUNCTION(http_chunked_decode)
RETURN_FALSE;
}
- if (NULL != http_chunked_decode(encoded, encoded_len, &decoded, &decoded_len)) {
+ if (NULL != http_encoding_dechunk(encoded, encoded_len, &decoded, &decoded_len)) {
RETURN_STRINGL(decoded, (int) decoded_len, 0);
} else {
RETURN_FALSE;
@@ -1027,6 +1028,7 @@ PHP_FUNCTION(http_get)
if (SUCCESS == http_get(URL, options ? Z_ARRVAL_P(options) : NULL, info ? Z_ARRVAL_P(info) : NULL, &response)) {
RETURN_PHPSTR_VAL(&response);
} else {
+ phpstr_dtor(&response);
RETURN_FALSE;
}
}
@@ -1060,6 +1062,7 @@ PHP_FUNCTION(http_head)
if (SUCCESS == http_head(URL, options ? Z_ARRVAL_P(options) : NULL, info ? Z_ARRVAL_P(info) : NULL, &response)) {
RETURN_PHPSTR_VAL(&response);
} else {
+ phpstr_dtor(&response);
RETURN_FALSE;
}
}
@@ -1099,6 +1102,7 @@ PHP_FUNCTION(http_post_data)
if (SUCCESS == http_post(URL, &body, options ? Z_ARRVAL_P(options) : NULL, info ? Z_ARRVAL_P(info) : NULL, &response)) {
RETVAL_PHPSTR_VAL(&response);
} else {
+ phpstr_dtor(&response);
RETVAL_FALSE;
}
}
@@ -1138,6 +1142,7 @@ PHP_FUNCTION(http_post_fields)
if (SUCCESS == http_post(URL, &body, options ? Z_ARRVAL_P(options) : NULL, info ? Z_ARRVAL_P(info) : NULL, &response)) {
RETVAL_PHPSTR_VAL(&response);
} else {
+ phpstr_dtor(&response);
RETVAL_FALSE;
}
http_request_body_dtor(&body);
@@ -1188,6 +1193,7 @@ PHP_FUNCTION(http_put_file)
if (SUCCESS == http_put(URL, &body, options ? Z_ARRVAL_P(options) : NULL, info ? Z_ARRVAL_P(info) : NULL, &response)) {
RETVAL_PHPSTR_VAL(&response);
} else {
+ phpstr_dtor(&response);
RETVAL_FALSE;
}
http_request_body_dtor(&body);
@@ -1236,6 +1242,7 @@ PHP_FUNCTION(http_put_stream)
if (SUCCESS == http_put(URL, &body, options ? Z_ARRVAL_P(options) : NULL, info ? Z_ARRVAL_P(info) : NULL, &response)) {
RETURN_PHPSTR_VAL(&response);
} else {
+ phpstr_dtor(&response);
RETURN_NULL();
}
}
@@ -1254,7 +1261,7 @@ PHP_FUNCTION(http_put_stream)
PHP_FUNCTION(http_request_method_register)
{
char *method;
- int *method_len;
+ int method_len;
unsigned long existing;
if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &method, &method_len)) {
@@ -1264,7 +1271,7 @@ PHP_FUNCTION(http_request_method_register)
RETURN_LONG((long) existing);
}
- RETVAL_LONG((long) http_request_method_register(method));
+ RETVAL_LONG((long) http_request_method_register(method, method_len));
}
/* }}} */
@@ -1307,7 +1314,7 @@ PHP_FUNCTION(http_request_method_unregister)
}
/* }}} */
-/* {{{ proto long http_request_method_exists(mixed method)
+/* {{{ proto int http_request_method_exists(mixed method)
*
* Check if a request method is registered (or available by default).
*
@@ -1407,6 +1414,226 @@ PHP_FUNCTION(http_build_query)
#endif /* !ZEND_ENGINE_2 */
/* }}} */
+/* {{{ */
+#ifdef HTTP_HAVE_ZLIB
+
+/* {{{ proto string http_gzencode(string data[, int level = -1])
+ *
+ * Compress data with the HTTP compatible GZIP 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.
+ *
+ * Returns the encoded string on success, or NULL on failure.
+ */
+PHP_FUNCTION(http_gzencode)
+{
+ char *data;
+ int data_len;
+ long level = -1;
+
+ RETVAL_NULL();
+
+ if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &data, &data_len, &level)) {
+ HTTP_CHECK_GZIP_LEVEL(level, return);
+ {
+ char *encoded;
+ size_t encoded_len;
+
+ if (SUCCESS == http_encoding_gzencode(level, data, data_len, &encoded, &encoded_len)) {
+ RETURN_STRINGL(encoded, (int) encoded_len, 0);
+ }
+ }
+ }
+}
+/* }}} */
+
+/* {{{ proto string http_gzdecode(string data)
+ *
+ * Uncompress data compressed with the HTTP compatible GZIP encoding.
+ *
+ * Expects a string as parameter containing the compressed data.
+ *
+ * Returns the decoded string on success, or NULL on failure.
+ */
+PHP_FUNCTION(http_gzdecode)
+{
+ char *data;
+ int data_len;
+
+ 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_gzdecode(data, data_len, &decoded, &decoded_len)) {
+ RETURN_STRINGL(decoded, (int) decoded_len, 0);
+ }
+ }
+}
+/* }}} */
+
+/* {{{ proto string http_deflate(string data[, int level = -1])
+ *
+ * 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.
+ */
+PHP_FUNCTION(http_deflate)
+{
+ char *data;
+ int data_len;
+ long level = -1;
+
+ RETVAL_NULL();
+
+ if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &data, &data_len, &level)) {
+ HTTP_CHECK_GZIP_LEVEL(level, return);
+ {
+ char *encoded;
+ size_t encoded_len;
+
+ if (SUCCESS == http_encoding_deflate(level, data, data_len, &encoded, &encoded_len)) {
+ RETURN_STRINGL(encoded, (int) encoded_len, 0);
+ }
+ }
+ }
+}
+/* }}} */
+
+/* {{{ proto string http_inflate(string data)
+ *
+ * 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.
+ */
+PHP_FUNCTION(http_inflate)
+{
+ char *data;
+ int data_len;
+
+ 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);
+ }
+ }
+}
+/* }}} */
+
+/* {{{ proto string http_compress(string data[, int level = -1])
+ *
+ * Compress data with the HTTP compatible COMPRESS encoding.
+ *
+ * Expects the first parameter to be a string containing the data which 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.
+ */
+PHP_FUNCTION(http_compress)
+{
+ char *data;
+ int data_len;
+ long level = -1;
+
+ RETVAL_NULL();
+
+ if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &data, &data_len, &level)) {
+ HTTP_CHECK_GZIP_LEVEL(level, return);
+ {
+ char *encoded;
+ size_t encoded_len;
+
+ if (SUCCESS == http_encoding_compress(level, data, data_len, &encoded, &encoded_len)) {
+ RETURN_STRINGL(encoded, (int) encoded_len, 0);
+ }
+ }
+ }
+}
+/* }}} */
+
+/* {{{ proto string http_uncompress(string data)
+ *
+ * Uncompress data compressed with the HTTP compatible COMPRESS encoding.
+ *
+ * Expects a string as parameter containing the compressed data.
+ *
+ * Returns the decoded string on success, or NULL on failure.
+ */
+PHP_FUNCTION(http_uncompress)
+{
+ char *data;
+ int data_len;
+
+ 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_uncompress(data, data_len, &decoded, &decoded_len)) {
+ RETURN_STRINGL(decoded, (int) decoded_len, 0);
+ }
+ }
+}
+/* }}} */
+#endif /* HTTP_HAVE_ZLIB */
+/* }}} */
+
+/* {{{ proto int http_support([int feature = 0])
+ *
+ * Check for feature that require external libraries.
+ *
+ * Accpepts an optional in parameter specifying which feature to probe for.
+ * If the parameter is 0 or omitted, the return value contains a bitmask of
+ * all supported featuers that depend on external libraries.
+ *
+ * Available features to probe for are:
+ *
*
- *