- release
[m6w6/ext-http] / http_functions.c
index 88aefb47ae33ec54521a645c3f08d27c467a65ab..1f635c59d6f85f100d1994008868cff0ecd12e6f 100644 (file)
@@ -1028,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;
        }
 }
@@ -1061,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;
        }
 }
@@ -1100,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;
        }
 }
@@ -1139,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);
@@ -1189,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);
@@ -1237,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();
        }
 }
@@ -1590,6 +1596,44 @@ PHP_FUNCTION(http_uncompress)
 #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)
 {
 }