X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http.c;h=b95204604421ec6c01a01a67e72a2655dce11bf4;hp=74e2968ec7839e831796611a4a0f807a6e21e0ba;hb=a28b5309657ba64473499e3592f2c943c38dab55;hpb=b587077029cfd30b2daf4f4d519f69c37fae1841 diff --git a/http.c b/http.c index 74e2968..b952046 100644 --- a/http.c +++ b/http.c @@ -31,6 +31,10 @@ #include "php_http.h" #include "php_http_api.h" +#ifdef ZEND_ENGINE_2 +#include "ext/standard/php_http.h" +#endif + #ifdef HTTP_HAVE_CURL #ifdef PHP_WIN32 @@ -47,6 +51,26 @@ ZEND_DECLARE_MODULE_GLOBALS(http) ZEND_GET_MODULE(http) #endif +/* {{{ ARG_INFO */ +#ifdef ZEND_BEGIN_ARG_INFO +ZEND_BEGIN_ARG_INFO(http_request_info_ref_3, 0) + ZEND_ARG_PASS_INFO(0) + ZEND_ARG_PASS_INFO(0) + ZEND_ARG_PASS_INFO(1) +ZEND_END_ARG_INFO(); + +ZEND_BEGIN_ARG_INFO(http_request_info_ref_4, 0) + ZEND_ARG_PASS_INFO(0) + ZEND_ARG_PASS_INFO(0) + ZEND_ARG_PASS_INFO(0) + ZEND_ARG_PASS_INFO(1) +ZEND_END_ARG_INFO(); +#else +static unsigned char http_request_info_ref_3[] = {3, BYREF_NONE, BYREF_FORCE_REST}; +static unsigned char http_request_info_ref_4[] = {4, BYREF_NONE, BYREF_FORCE_REST}; +#endif +/* }}}*/ + /* {{{ http_functions[] */ function_entry http_functions[] = { PHP_FE(http_date, NULL) @@ -67,14 +91,18 @@ function_entry http_functions[] = { PHP_FE(http_send_stream, NULL) PHP_FE(http_chunked_decode, NULL) PHP_FE(http_split_response, NULL) + PHP_FE(http_parse_headers, NULL) #ifdef HTTP_HAVE_CURL - PHP_FE(http_get, NULL) - PHP_FE(http_head, NULL) - PHP_FE(http_post_data, NULL) - PHP_FE(http_post_array, NULL) + PHP_FE(http_get, http_request_info_ref_3) + PHP_FE(http_head, http_request_info_ref_3) + PHP_FE(http_post_data, http_request_info_ref_4) + PHP_FE(http_post_array, http_request_info_ref_4) #endif PHP_FE(http_auth_basic, NULL) PHP_FE(http_auth_basic_cb, NULL) +#ifndef ZEND_ENGINE_2 + PHP_FE(http_build_query, NULL) +#endif {NULL, NULL, NULL} }; /* }}} */ @@ -670,7 +698,10 @@ PHP_FUNCTION(http_split_response) MAKE_STD_ZVAL(zheaders); array_init(zheaders); - http_split_response(zresponse, zheaders, zbody); + if (SUCCESS != http_split_response(zresponse, zheaders, zbody)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not parse HTTP response"); + RETURN_FALSE; + } array_init(return_value); add_index_zval(return_value, 0, zheaders); @@ -678,6 +709,29 @@ PHP_FUNCTION(http_split_response) } /* }}} */ +/* {{{ proto array http_parse_headers(string header) */ +PHP_FUNCTION(http_parse_headers) +{ + char *header, *rnrn; + int header_len; + + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &header, &header_len)) { + RETURN_FALSE; + } + + array_init(return_value); + + if (rnrn = strstr(header, HTTP_CRLF HTTP_CRLF)) { + header_len = rnrn - header + 2; + } + if (SUCCESS != http_parse_headers(header, header_len, return_value)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not parse HTTP header"); + zval_dtor(return_value); + RETURN_FALSE; + } +} +/* }}}*/ + /* {{{ HAVE_CURL */ #ifdef HTTP_HAVE_CURL