#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-#include "php.h"
-#include "zend_operators.h"
+#define HTTP_WANT_CURL
+#include "php_http.h"
#include "SAPI.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "ext/standard/php_string.h"
+#include "zend_operators.h"
+
#if defined(HAVE_PHP_SESSION) && !defined(COMPILE_DL_SESSION)
# include "ext/session/php_session.h"
#endif
-#include "php_http.h"
-#include "php_http_std_defs.h"
#include "php_http_api.h"
-#include "php_http_request_api.h"
#include "php_http_cache_api.h"
-#include "php_http_request_method_api.h"
-#include "php_http_request_api.h"
#include "php_http_date_api.h"
+#include "php_http_encoding_api.h"
#include "php_http_headers_api.h"
#include "php_http_message_api.h"
+#include "php_http_request_api.h"
+#include "php_http_request_method_api.h"
#include "php_http_send_api.h"
#include "php_http_url_api.h"
-#include "php_http_encoding_api.h"
-
-#include "phpstr/phpstr.h"
ZEND_EXTERN_MODULE_GLOBALS(http)
}
/* }}} */
+/* {{{ proto string http_negotiate_ctype(array supported[, array &result])
+ *
+ * This function negotiates the clients preferred content type based on its
+ * Accept HTTP header. The qualifier is recognized and content types
+ * without qualifier are rated highest.
+ *
+ * Expects an array as parameter cotaining the supported content types as values.
+ * If the optional second parameter is supplied, it will be filled with an
+ * array containing the negotiation results.
+ *
+ * Returns the negotiated content type or the default content type
+ * (i.e. first array entry) if none match.
+ *
+ * Example:
+ * <pre>
+ * <?php
+ * $ctypes = array('application/xhtml+xml', 'text/html');
+ * http_send_content_type(http_negotiate_content_type($ctypes));
+ * ?>
+ * </pre>
+ */
+PHP_FUNCTION(http_negotiate_content_type)
+{
+ zval *supported, *rs_array = NULL;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|z", &supported, &rs_array)) {
+ RETURN_FALSE;
+ }
+
+ if (rs_array) {
+ zval_dtor(rs_array);
+ array_init(rs_array);
+ }
+
+ HTTP_DO_NEGOTIATE(content_type, supported, rs_array);
+}
+/* }}} */
+
/* {{{ proto bool http_send_status(int status)
*
* Send HTTP status code.
* 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>