X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_request_api.c;h=b3f7150e62fa240a74aed4ad122afb22e8662b20;hp=3f77eff2ae55bc37e2ad541ed9bf1254a5f4e840;hb=b4b3a9ff0e9f853a7f1184d9a6d773d661f8df3d;hpb=902d195a198f4976c8ff081a95cdd3e315c14f5f diff --git a/http_request_api.c b/http_request_api.c index 3f77eff..b3f7150 100644 --- a/http_request_api.c +++ b/http_request_api.c @@ -25,6 +25,9 @@ #include "php_http_api.h" #include "php_http_request_api.h" #include "php_http_url_api.h" +#ifdef ZEND_ENGINE_2 +# include "php_http_request_object.h" +#endif #include "phpstr/phpstr.h" @@ -355,6 +358,7 @@ PHP_HTTP_API STATUS _http_request_init(CURL *ch, http_request_method meth, char /* progress callback */ if (zoption = http_curl_getopt(options, "onprogress", 0)) { + HTTP_CURL_OPT(NOPROGRESS, 0); HTTP_CURL_OPT(PROGRESSFUNCTION, http_curl_progress_callback); HTTP_CURL_OPT(PROGRESSDATA, http_curl_callback_data(zoption)); } else { @@ -920,6 +924,10 @@ static int http_curl_progress_callback(void *data, double dltotal, double dlnow, params_pass[2] = ¶ms_local[2]; params_pass[3] = ¶ms_local[3]; + INIT_PZVAL(params_pass[0]); + INIT_PZVAL(params_pass[1]); + INIT_PZVAL(params_pass[2]); + INIT_PZVAL(params_pass[3]); ZVAL_DOUBLE(params_pass[0], dltotal); ZVAL_DOUBLE(params_pass[1], dlnow); ZVAL_DOUBLE(params_pass[2], ultotal); @@ -929,6 +937,7 @@ static int http_curl_progress_callback(void *data, double dltotal, double dlnow, } /* }}} */ +/* {{{ static int http_curl_debug_callback(CURL *, curl_infotype, char *, size_t, void *) */ static int http_curl_debug_callback(CURL *ch, curl_infotype type, char *string, size_t length, void *data) { zval *params_pass[2], params_local[2], retval; @@ -937,13 +946,28 @@ static int http_curl_debug_callback(CURL *ch, curl_infotype type, char *string, params_pass[0] = ¶ms_local[0]; params_pass[1] = ¶ms_local[1]; + INIT_PZVAL(&retval); + INIT_PZVAL(params_pass[0]); + INIT_PZVAL(params_pass[1]); ZVAL_LONG(params_pass[0], type); - ZVAL_STRINGL(params_pass[1], string, length, 1); + ZVAL_STRINGL(params_pass[1], string, length, 0); - call_user_function(EG(function_table), NULL, func, &retval, 2, params_pass TSRMLS_CC); +#ifdef ZEND_ENGINE_2 + /* ensure we can call private HttpRequest::debugWrapper() */ + { + void *sc = EG(scope); + EG(scope) = http_request_object_ce; +#endif + call_user_function(EG(function_table), NULL, func, &retval, 2, params_pass TSRMLS_CC); +#ifdef ZEND_ENGINE_2 + EG(scope) = sc; + } +#endif return 0; } +/* }}} */ + /* {{{ static inline zval *http_curl_getopt(HashTable *, char *, size_t, int) */ static inline zval *_http_curl_getopt_ex(HashTable *options, char *key, size_t keylen, int type TSRMLS_DC) { @@ -961,7 +985,7 @@ static inline zval *_http_curl_getopt_ex(HashTable *options, char *key, size_t k case IS_DOUBLE: convert_to_double_ex(zoption); break; case IS_STRING: convert_to_string_ex(zoption); break; case IS_ARRAY: convert_to_array_ex(zoption); break; - case IS_OBJECT: convert_to_object_ex(zoption); break; + case IS_OBJECT: convert_to_object_ex(zoption); break; default: break; }