#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"
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;
* - compress: bool, whether to allow gzip/deflate content encoding
* (defaults to true)
* - port: int, use another port as specified in the url
- * - referer: string, the referer to sends
+ * - referer: string, the referer to send
* - useragent: string, the user agent to send
* (defaults to PECL::HTTP/version (PHP/version)))
* - headers: array, list of custom headers as associative array
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;
}
}
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;
}
}
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;
}
}
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);
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);
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();
}
}
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)) {
RETURN_LONG((long) existing);
}
- RETVAL_LONG((long) http_request_method_register(method));
+ RETVAL_LONG((long) http_request_method_register(method, method_len));
}
/* }}} */
#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 features that depend on external libraries.
+ *
+ * Available features to probe for are:
+ * <ul>
+ * <li> HTTP_SUPPORT: always set
+ * <li> HTTP_SUPPORT_REQUESTS: whether ext/http was linked against libcurl,
+ * and HTTP requests can be issued
+ * <li> HTTP_SUPPORT_SSLREQUESTS: whether libcurl was linked against openssl,
+ * and SSL requests can be issued
+ * <li> HTTP_SUPPORT_ENCODINGS: whether ext/http was linked against zlib,
+ * and compressed HTTP responses can be decoded
+ * <li> HTTP_SUPPORT_MHASHETAGS: whether ext/http was linked against libmhash,
+ * and ETags can be generated with the available mhash algorithms
+ * <li> HTTP_SUPPORT_MAGICMIME: whether ext/http was linked against libmagic,
+ * and the HttpResponse::guessContentType() method is usable
+ * </ul>
+ *
+ * Returns int, whether requested feature is supported, or a bitmask with
+ * all supported features.
+ */
+PHP_FUNCTION(http_support)
+{
+ long feature = 0;
+
+ RETVAL_LONG(0L);
+
+ if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &feature)) {
+ RETVAL_LONG(http_support(feature));
+ }
+}
+/* }}} */
+
PHP_FUNCTION(http_test)
{
}