[PHP-CVS] cvs: php-src /ext/curl interface.c php_curl.h
janiThu May 28 09:09:03 2009 UTC Modified files: /php-src/ext/curl interface.c php_curl.h Log: - Fix build for winblows http://cvs.php.net/viewvc.cgi/php-src/ext/curl/interface.c?r1=1.167r2=1.168diff_format=u Index: php-src/ext/curl/interface.c diff -u php-src/ext/curl/interface.c:1.167 php-src/ext/curl/interface.c:1.168 --- php-src/ext/curl/interface.c:1.167 Tue May 26 15:48:28 2009 +++ php-src/ext/curl/interface.cThu May 28 09:09:02 2009 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: interface.c,v 1.167 2009/05/26 15:48:28 jani Exp $ */ +/* $Id: interface.c,v 1.168 2009/05/28 09:09:02 jani Exp $ */ #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS @@ -1691,11 +1691,11 @@ break; case CURLOPT_STDERR: if (((php_stream *) what)-mode[0] != 'r') { - if (ch-handlers-stderr) { - zval_ptr_dtor(ch-handlers-stderr); + if (ch-handlers-std_err) { + zval_ptr_dtor(ch-handlers-std_err); } zval_add_ref(zvalue); - ch-handlers-stderr = *zvalue; + ch-handlers-std_err = *zvalue; zend_list_addref(Z_LVAL_PP(zvalue)); } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, the provided file handle is not writable); @@ -2349,8 +2349,8 @@ #endif /* Prevent crash inside cURL if passed file has already been closed */ - if (ch-handlers-stderr Z_REFCOUNT_P(ch-handlers-stderr) = 0) { - curl_easy_setopt(ch-cp, CURLOPT_STDERR, stderr); + if (ch-handlers-std_err Z_REFCOUNT_P(ch-handlers-std_err) = 0) { + curl_easy_setopt(ch-cp, CURLOPT_STDERR, std_err); } curl_easy_cleanup(ch-cp); @@ -2378,8 +2378,8 @@ if (ch-handlers-passwd) { zval_ptr_dtor(ch-handlers-passwd); } - if (ch-handlers-stderr) { - zval_ptr_dtor(ch-handlers-stderr); + if (ch-handlers-std_err) { + zval_ptr_dtor(ch-handlers-std_err); } if (ch-header.str_len 0) { efree(ch-header.str); http://cvs.php.net/viewvc.cgi/php-src/ext/curl/php_curl.h?r1=1.54r2=1.55diff_format=u Index: php-src/ext/curl/php_curl.h diff -u php-src/ext/curl/php_curl.h:1.54 php-src/ext/curl/php_curl.h:1.55 --- php-src/ext/curl/php_curl.h:1.54Tue May 26 15:48:28 2009 +++ php-src/ext/curl/php_curl.h Thu May 28 09:09:02 2009 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_curl.h,v 1.54 2009/05/26 15:48:28 jani Exp $ */ +/* $Id: php_curl.h,v 1.55 2009/05/28 09:09:02 jani Exp $ */ #ifndef _PHP_CURL_H #define _PHP_CURL_H @@ -107,7 +107,7 @@ php_curl_write *write_header; php_curl_read *read; zval *passwd; - zval *stderr; + zval *std_err; php_curl_progress *progress; } php_curl_handlers; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/curl interface.c php_curl.h
janiTue May 26 15:48:28 2009 UTC Modified files: /php-src/ext/curl interface.c php_curl.h Log: - Fixed bug #48203 (crash when CURLOPT_STDERR is set to regular file) http://cvs.php.net/viewvc.cgi/php-src/ext/curl/interface.c?r1=1.166r2=1.167diff_format=u Index: php-src/ext/curl/interface.c diff -u php-src/ext/curl/interface.c:1.166 php-src/ext/curl/interface.c:1.167 --- php-src/ext/curl/interface.c:1.166 Thu May 21 12:52:59 2009 +++ php-src/ext/curl/interface.cTue May 26 15:48:28 2009 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: interface.c,v 1.166 2009/05/21 12:52:59 iliaa Exp $ */ +/* $Id: interface.c,v 1.167 2009/05/26 15:48:28 jani Exp $ */ #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS @@ -459,7 +459,7 @@ le_curl_multi_handle = zend_register_list_destructors_ex(_php_curl_multi_close, NULL, curl, module_number); /* See http://curl.haxx.se/lxr/source/docs/libcurl/symbols-in-versions - or curl src/docs/libcurl/symbols-in-versions for a (almost) complete list + or curl src/docs/libcurl/symbols-in-versions for a (almost) complete list of options and which version they were introduced */ /* Constants for curl_setopt() */ @@ -1689,6 +1689,20 @@ ch-handlers-read-fp = fp; ch-handlers-read-fd = Z_LVAL_PP(zvalue); break; + case CURLOPT_STDERR: + if (((php_stream *) what)-mode[0] != 'r') { + if (ch-handlers-stderr) { + zval_ptr_dtor(ch-handlers-stderr); + } + zval_add_ref(zvalue); + ch-handlers-stderr = *zvalue; + zend_list_addref(Z_LVAL_PP(zvalue)); + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, the provided file handle is not writable); + RETVAL_FALSE; + return 1; + } + /* break omitted intentionally */ default: error = curl_easy_setopt(ch-cp, option, fp); break; @@ -2334,6 +2348,11 @@ fprintf(stderr, DTOR CALLED, ch = %x\n, ch); #endif + /* Prevent crash inside cURL if passed file has already been closed */ + if (ch-handlers-stderr Z_REFCOUNT_P(ch-handlers-stderr) = 0) { + curl_easy_setopt(ch-cp, CURLOPT_STDERR, stderr); + } + curl_easy_cleanup(ch-cp); #if LIBCURL_VERSION_NUM 0x071101 zend_llist_clean(ch-to_free.str); @@ -2353,12 +2372,15 @@ if (ch-handlers-write_header-func_name) { zval_ptr_dtor(ch-handlers-write_header-func_name); } - if(ch-handlers-progress-func_name) { + if (ch-handlers-progress-func_name) { zval_ptr_dtor(ch-handlers-progress-func_name); } if (ch-handlers-passwd) { zval_ptr_dtor(ch-handlers-passwd); } + if (ch-handlers-stderr) { + zval_ptr_dtor(ch-handlers-stderr); + } if (ch-header.str_len 0) { efree(ch-header.str); } http://cvs.php.net/viewvc.cgi/php-src/ext/curl/php_curl.h?r1=1.53r2=1.54diff_format=u Index: php-src/ext/curl/php_curl.h diff -u php-src/ext/curl/php_curl.h:1.53 php-src/ext/curl/php_curl.h:1.54 --- php-src/ext/curl/php_curl.h:1.53Sun May 3 14:58:06 2009 +++ php-src/ext/curl/php_curl.h Tue May 26 15:48:28 2009 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_curl.h,v 1.53 2009/05/03 14:58:06 pajoye Exp $ */ +/* $Id: php_curl.h,v 1.54 2009/05/26 15:48:28 jani Exp $ */ #ifndef _PHP_CURL_H #define _PHP_CURL_H @@ -107,6 +107,7 @@ php_curl_write *write_header; php_curl_read *read; zval *passwd; + zval *stderr; php_curl_progress *progress; } php_curl_handlers; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/curl interface.c php_curl.h
pajoye Sun May 3 14:58:06 2009 UTC Modified files: /php-src/ext/curl interface.c php_curl.h Log: - [DOC] #41712, implement progress callback - add constants CURLOPT_NOPROGRESS and CURLOPT_PROGRESSFUNCTION http://cvs.php.net/viewvc.cgi/php-src/ext/curl/interface.c?r1=1.149r2=1.150diff_format=u Index: php-src/ext/curl/interface.c diff -u php-src/ext/curl/interface.c:1.149 php-src/ext/curl/interface.c:1.150 --- php-src/ext/curl/interface.c:1.149 Mon Mar 16 15:05:21 2009 +++ php-src/ext/curl/interface.cSun May 3 14:58:06 2009 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: interface.c,v 1.149 2009/03/16 15:05:21 felipe Exp $ */ +/* $Id: interface.c,v 1.150 2009/05/03 14:58:06 pajoye Exp $ */ #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS @@ -456,6 +456,7 @@ REGISTER_CURL_CONSTANT(CURLOPT_HEADER); REGISTER_CURL_CONSTANT(CURLOPT_HTTPHEADER); REGISTER_CURL_CONSTANT(CURLOPT_NOPROGRESS); + REGISTER_CURL_CONSTANT(CURLOPT_PROGRESSFUNCTION); REGISTER_CURL_CONSTANT(CURLOPT_NOBODY); REGISTER_CURL_CONSTANT(CURLOPT_FAILONERROR); REGISTER_CURL_CONSTANT(CURLOPT_UPLOAD); @@ -902,6 +903,87 @@ } /* }}} */ +/* {{{ curl_progress + */ +static size_t curl_progress(void *clientp, +double dltotal, +double dlnow, +double ultotal, +double ulnow) +{ + php_curl *ch = (php_curl *) clientp; + php_curl_progress *t = ch-handlers-progress; + int length = -1; + size_t rval = 0; + +#if PHP_CURL_DEBUG + fprintf(stderr, curl_progress() called\n); + fprintf(stderr, clientp = %x, dltotal = %f, dlnow = %f, ultotal = %f, ulnow = %f\n, clientp, dltotal, dlnow, ultotal, ulnow); +#endif + + switch (t-method) { + case PHP_CURL_USER: { + zval **argv[4]; + zval *zdltotal = NULL; + zval *zdlnow = NULL; + zval *zultotal = NULL; + zval *zulnow = NULL; + zval *retval_ptr; + int error; + zend_fcall_info fci; + TSRMLS_FETCH_FROM_CTX(ch-thread_ctx); + + MAKE_STD_ZVAL(zdltotal); + MAKE_STD_ZVAL(zdlnow); + MAKE_STD_ZVAL(zultotal); + MAKE_STD_ZVAL(zulnow); + + ZVAL_LONG(zdltotal, dltotal); + ZVAL_LONG(zdlnow, dlnow); + ZVAL_LONG(zultotal, ultotal); + ZVAL_LONG(zulnow, ulnow); + + argv[0] = zdltotal; + argv[1] = zdlnow; + argv[2] = zultotal; + argv[3] = zulnow; + + fci.size = sizeof(fci); + fci.function_table = EG(function_table); + fci.function_name = t-func_name; + fci.object_ptr = NULL; + fci.retval_ptr_ptr = retval_ptr; + fci.param_count = 4; + fci.params = argv; + fci.no_separation = 0; + fci.symbol_table = NULL; + + ch-in_callback = 1; + error = zend_call_function(fci, t-fci_cache TSRMLS_CC); + ch-in_callback = 0; + if (error == FAILURE) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, Cannot call the CURLOPT_READFUNCTION); + length = -1; + } else if (retval_ptr) { + if (Z_TYPE_P(retval_ptr) != IS_LONG) { + convert_to_long_ex(retval_ptr); + } + if(0 != Z_LVAL_P(retval_ptr)) + rval = 1; + zval_ptr_dtor(retval_ptr); + } + zval_ptr_dtor(argv[0]); + zval_ptr_dtor(argv[1]); + zval_ptr_dtor(argv[2]); + zval_ptr_dtor(argv[3]); + break; + } + } + return rval; +} +/* }}} */ + + /* {{{ curl_read */ static size_t curl_read(char *data, size_t size, size_t nmemb, void *ctx) @@ -1199,6 +1281,7 @@ (*ch)-handlers-write= ecalloc(1, sizeof(php_curl_write)); (*ch)-handlers-write_header = ecalloc(1, sizeof(php_curl_write)); (*ch)-handlers-read = ecalloc(1, sizeof(php_curl_read)); + (*ch)-handlers-progress = ecalloc(1, sizeof(php_curl_progress)); (*ch)-in_callback = 0;
[PHP-CVS] cvs: php-src /ext/curl interface.c php_curl.h
janiWed Dec 17 14:13:25 2008 UTC Modified files: /php-src/ext/curl interface.c php_curl.h Log: - Fixed bug #45161 (Reusing a curl handle leaks memory) http://cvs.php.net/viewvc.cgi/php-src/ext/curl/interface.c?r1=1.138r2=1.139diff_format=u Index: php-src/ext/curl/interface.c diff -u php-src/ext/curl/interface.c:1.138 php-src/ext/curl/interface.c:1.139 --- php-src/ext/curl/interface.c:1.138 Tue Dec 9 17:17:49 2008 +++ php-src/ext/curl/interface.cWed Dec 17 14:13:25 2008 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: interface.c,v 1.138 2008/12/09 17:17:49 iliaa Exp $ */ +/* $Id: interface.c,v 1.139 2008/12/17 14:13:25 jani Exp $ */ #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS @@ -323,7 +323,6 @@ char str[1024]; size_t n = 0; - d = curl_version_info(CURLVERSION_NOW); php_info_print_table_start(); php_info_print_table_row(2, cURL support,enabled); @@ -331,7 +330,6 @@ sprintf(str, %d, d-age); php_info_print_table_row(2, Age, str); - #ifdef CURL_VERSION_IPV6 if (d-features CURL_VERSION_IPV6) { n = sprintf(str, %s, IPv6-enabled, ); @@ -1102,6 +1100,7 @@ /* }}} */ #endif +#if LIBCURL_VERSION_NUM 0x071101 /* {{{ curl_free_string */ static void curl_free_string(void **string) @@ -1109,6 +1108,7 @@ efree(*string); } /* }}} */ +#endif /* {{{ curl_free_post */ @@ -1184,7 +1184,9 @@ memset((*ch)-err, 0, sizeof((*ch)-err)); +#if LIBCURL_VERSION_NUM 0x071101 zend_llist_init((*ch)-to_free.str, sizeof(char *), (llist_dtor_func_t) curl_free_string, 0); +#endif zend_llist_init((*ch)-to_free.slist, sizeof(struct curl_slist), (llist_dtor_func_t) curl_free_slist, 0); zend_llist_init((*ch)-to_free.post, sizeof(struct HttpPost), (llist_dtor_func_t) curl_free_post, 0); } @@ -1196,17 +1198,17 @@ { php_curl*ch; CURL*cp; - zstrsrc = NULL_ZSTR; - int src_len = 0; - zend_uchar src_type = 0; + zstrurl = NULL_ZSTR; + int url_len = 0; + zend_uchar url_type = 0; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, |t, src, src_len, src_type) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, |t, url, url_len, url_type) == FAILURE) { RETURN_FALSE; } - if (src.v src_type == IS_UNICODE) { - src.s = zend_unicode_to_ascii((UChar*)src.u, src_len TSRMLS_CC); - if (!src.s) { + if (url.v url_type == IS_UNICODE) { + url.s = zend_unicode_to_ascii((UChar*)url.u, url_len TSRMLS_CC); + if (!url.s) { php_error_docref(NULL TSRMLS_CC, E_WARNING, Binary or ASCII-Unicode string expected, non-ASCII-Unicode string received); RETURN_FALSE; } @@ -1246,12 +1248,16 @@ curl_easy_setopt(ch-cp, CURLOPT_NOSIGNAL, 1); #endif - if (src.v) { + if (url.v) { +#if LIBCURL_VERSION_NUM = 0x071100 + curl_easy_setopt(ch-cp, CURLOPT_URL, url.s); +#else char *urlcopy; - urlcopy = estrndup(src.s, src_len); + urlcopy = estrndup(url.s, url_len); curl_easy_setopt(ch-cp, CURLOPT_URL, urlcopy); zend_llist_add_element(ch-to_free.str, urlcopy); +#endif } ZEND_REGISTER_RESOURCE(return_value, ch, le_curl); @@ -1318,9 +1324,11 @@ curl_easy_setopt(dupch-cp, CURLOPT_INFILE,(void *) dupch); curl_easy_setopt(dupch-cp, CURLOPT_WRITEHEADER, (void *) dupch); +#if LIBCURL_VERSION_NUM 0x071101 zend_llist_copy(dupch-to_free.str, ch-to_free.str); /* Don't try to free copied strings, they're free'd when the original handle is destroyed */ dupch-to_free.str.dtor = NULL; +#endif zend_llist_copy(dupch-to_free.slist, ch-to_free.slist); zend_llist_copy(dupch-to_free.post, ch-to_free.post); @@ -1443,7 +1451,9 @@ case CURLOPT_SSLENGINE_DEFAULT: case CURLOPT_SSLCERTTYPE: case CURLOPT_ENCODING: { +#if LIBCURL_VERSION_NUM 0x071100 char *copystr = NULL; +#endif convert_to_string_ex(zvalue); @@ -1451,9 +1461,14 @@ PHP_CURL_CHECK_OPEN_BASEDIR(Z_STRVAL_PP(zvalue), Z_STRLEN_PP(zvalue), 1); } +#if LIBCURL_VERSION_NUM = 0x071100 + /* Strings passed to libcurl as âchar *â arguments, are copied by the library... NOTE: before 7.17.0 strings were not copied. */ + error = curl_easy_setopt(ch-cp, option, Z_STRVAL_PP(zvalue)); +#else copystr =
[PHP-CVS] cvs: php-src /ext/curl interface.c php_curl.h
iliaa Tue Aug 9 10:15:01 2005 EDT Modified files: /php-src/ext/curl interface.c php_curl.h Log: Added curl_setopt_array(), allowing setting of multiple cURL options. Added CURLINFO_HEADER_OUT to facilitate request retrieval. http://cvs.php.net/diff.php/php-src/ext/curl/interface.c?r1=1.62r2=1.63ty=u Index: php-src/ext/curl/interface.c diff -u php-src/ext/curl/interface.c:1.62 php-src/ext/curl/interface.c:1.63 --- php-src/ext/curl/interface.c:1.62 Wed Aug 3 10:06:44 2005 +++ php-src/ext/curl/interface.cTue Aug 9 10:14:55 2005 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: interface.c,v 1.62 2005/08/03 14:06:44 sniper Exp $ */ +/* $Id: interface.c,v 1.63 2005/08/09 14:14:55 iliaa Exp $ */ #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS @@ -91,6 +91,7 @@ PHP_FE(curl_copy_handle, NULL) PHP_FE(curl_version, NULL) PHP_FE(curl_setopt, NULL) + PHP_FE(curl_setopt_array,NULL) PHP_FE(curl_exec,NULL) PHP_FE(curl_getinfo, NULL) PHP_FE(curl_error, NULL) @@ -293,6 +294,7 @@ REGISTER_CURL_CONSTANT(CURLINFO_CONTENT_TYPE); REGISTER_CURL_CONSTANT(CURLINFO_REDIRECT_TIME); REGISTER_CURL_CONSTANT(CURLINFO_REDIRECT_COUNT); + REGISTER_CURL_CONSTANT(CURLINFO_HEADER_OUT); /* cURL protocol constants (curl_version) */ REGISTER_CURL_CONSTANT(CURL_VERSION_IPV6); @@ -670,6 +672,23 @@ } /* }}} */ +static int curl_debug(CURL *cp, curl_infotype type, char *buf, size_t buf_len, void *ctx) +{ + php_curl*ch = (php_curl *) ctx; + + if (type == CURLINFO_HEADER_OUT) { + if (ch-header.str_len) { + efree(ch-header.str); + } + if (buf_len 0) { + ch-header.str = estrndup(buf, buf_len); + ch-header.str_len = buf_len; + } + } + + return 0; +} + #if CURLOPT_PASSWDFUNCTION != 0 /* {{{ curl_passwd */ @@ -792,6 +811,7 @@ (*ch)-handlers-read = ecalloc(1, sizeof(php_curl_read)); (*ch)-in_callback = 0; + (*ch)-header.str_len = 0; memset((*ch)-err, 0, sizeof((*ch)-err)); @@ -900,24 +920,10 @@ } /* }}} */ -/* {{{ proto bool curl_setopt(resource ch, int option, mixed value) - Set an option for a CURL transfer */ -PHP_FUNCTION(curl_setopt) +static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue, zval *return_value TSRMLS_DC) { - zval **zid, **zoption, **zvalue; - php_curl*ch; CURLcode error=CURLE_OK; - int option; - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, zid, zoption, zvalue) == FAILURE) { - WRONG_PARAM_COUNT; - } - - ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl); - - convert_to_long_ex(zoption); - - option = Z_LVAL_PP(zoption); switch (option) { case CURLOPT_INFILESIZE: case CURLOPT_VERBOSE: @@ -1240,17 +1246,83 @@ break; } + case CURLINFO_HEADER_OUT: + convert_to_long_ex(zvalue); + if (Z_LVAL_PP(zvalue) == 1) { + curl_easy_setopt(ch-cp, CURLOPT_DEBUGFUNCTION, curl_debug); + curl_easy_setopt(ch-cp, CURLOPT_DEBUGDATA, (void *)ch); + curl_easy_setopt(ch-cp, CURLOPT_VERBOSE, 1); + } else { + curl_easy_setopt(ch-cp, CURLOPT_DEBUGFUNCTION, NULL); + curl_easy_setopt(ch-cp, CURLOPT_DEBUGDATA, NULL); + curl_easy_setopt(ch-cp, CURLOPT_VERBOSE, 0); + } + break; } SAVE_CURL_ERROR(ch, error); if (error != CURLE_OK) { - RETURN_FALSE; + return 1; } else { + return 0; + } +} + +/* {{{ proto bool curl_setopt(resource ch, int option, mixed value) + Set an option for a CURL transfer */ +PHP_FUNCTION(curl_setopt) +{ + zval **zid, **zoption, **zvalue; + php_curl*ch; + + if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, zid, zoption, zvalue) == FAILURE) { + WRONG_PARAM_COUNT; + } + + ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl); + + convert_to_long_ex(zoption); + + if (!_php_curl_setopt(ch, Z_LVAL_PP(zoption), zvalue, return_value TSRMLS_CC)) { RETURN_TRUE; + } else { + RETURN_FALSE; } } /* }}} */ +/* {{{ proto bool curl_setopt_array(resource ch, array options) + Set an array of option
[PHP-CVS] cvs: php-src /ext/curl interface.c php_curl.h
gschlossnagle Fri Jul 15 12:47:48 2005 EDT Modified files: /php-src/ext/curl interface.c php_curl.h Log: Darwin seems to like this much better. http://cvs.php.net/diff.php/php-src/ext/curl/interface.c?r1=1.58r2=1.59ty=u Index: php-src/ext/curl/interface.c diff -u php-src/ext/curl/interface.c:1.58 php-src/ext/curl/interface.c:1.59 --- php-src/ext/curl/interface.c:1.58 Sun Jun 26 13:31:07 2005 +++ php-src/ext/curl/interface.cFri Jul 15 12:47:48 2005 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: interface.c,v 1.58 2005/06/26 17:31:07 iliaa Exp $ */ +/* $Id: interface.c,v 1.59 2005/07/15 16:47:48 gschlossnagle Exp $ */ #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS @@ -52,6 +52,9 @@ #include ext/standard/url.h #include php_curl.h +int le_curl; +int le_curl_multi_handle; + static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC); #define SAVE_CURL_ERROR(__handle, __err) (__handle)-err.no = (int) __err; http://cvs.php.net/diff.php/php-src/ext/curl/php_curl.h?r1=1.42r2=1.43ty=u Index: php-src/ext/curl/php_curl.h diff -u php-src/ext/curl/php_curl.h:1.42 php-src/ext/curl/php_curl.h:1.43 --- php-src/ext/curl/php_curl.h:1.42Thu Jun 2 17:04:12 2005 +++ php-src/ext/curl/php_curl.h Fri Jul 15 12:47:48 2005 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_curl.h,v 1.42 2005/06/02 21:04:12 tony2001 Exp $ */ +/* $Id: php_curl.h,v 1.43 2005/07/15 16:47:48 gschlossnagle Exp $ */ #ifndef _PHP_CURL_H #define _PHP_CURL_H @@ -51,9 +51,9 @@ #define PHP_CURL_BINARY 6 #define PHP_CURL_IGNORE 7 -int le_curl; +extern int le_curl; #define le_curl_name cURL handle -int le_curl_multi_handle; +extern int le_curl_multi_handle; #define le_curl_multi_handle_name cURL Multi Handle PHP_MINIT_FUNCTION(curl); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/curl interface.c php_curl.h
tony2001Thu Jun 2 17:04:12 2005 EDT Modified files: /php-src/ext/curl interface.c php_curl.h Log: fix bug #33222 (segfault when CURL handle is closed in a callback). fix segfaults when CURL callback functions throw exception. http://cvs.php.net/diff.php/php-src/ext/curl/interface.c?r1=1.56r2=1.57ty=u Index: php-src/ext/curl/interface.c diff -u php-src/ext/curl/interface.c:1.56 php-src/ext/curl/interface.c:1.57 --- php-src/ext/curl/interface.c:1.56 Thu Apr 21 17:11:21 2005 +++ php-src/ext/curl/interface.cThu Jun 2 17:04:12 2005 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: interface.c,v 1.56 2005/04/21 21:11:21 iliaa Exp $ */ +/* $Id: interface.c,v 1.57 2005/06/02 21:04:12 tony2001 Exp $ */ #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS @@ -490,20 +490,22 @@ fci.no_separation = 0; fci.symbol_table = NULL; + ch-in_callback = 1; error = zend_call_function(fci, t-fci_cache TSRMLS_CC); + ch-in_callback = 0; if (error == FAILURE) { php_error_docref(NULL TSRMLS_CC, E_WARNING, Could not call the CURLOPT_WRITEFUNCTION); length = -1; - } else { + } else if (retval_ptr) { if (Z_TYPE_P(retval_ptr) != IS_LONG) { convert_to_long_ex(retval_ptr); } length = Z_LVAL_P(retval_ptr); + zval_ptr_dtor(retval_ptr); } zval_ptr_dtor(argv[0]); zval_ptr_dtor(argv[1]); - zval_ptr_dtor(retval_ptr); break; } } @@ -560,20 +562,23 @@ fci.no_separation = 0; fci.symbol_table = NULL; + ch-in_callback = 1; error = zend_call_function(fci, t-fci_cache TSRMLS_CC); + ch-in_callback = 0; if (error == FAILURE) { php_error_docref(NULL TSRMLS_CC, E_WARNING, Cannot call the CURLOPT_READFUNCTION); - } else { + length = -1; + } else if (retval_ptr) { if (Z_TYPE_P(retval_ptr) == IS_STRING) { length = MIN(size * nmemb, Z_STRLEN_P(retval_ptr)); memcpy(data, Z_STRVAL_P(retval_ptr), length); } + zval_ptr_dtor(retval_ptr); } zval_ptr_dtor(argv[0]); zval_ptr_dtor(argv[1]); zval_ptr_dtor(argv[2]); - zval_ptr_dtor(retval_ptr); break; } } @@ -631,19 +636,21 @@ fci.params = argv; fci.no_separation = 0; + ch-in_callback = 1; error = zend_call_function(fci, t-fci_cache TSRMLS_CC); + ch-in_callback = 0; if (error == FAILURE) { php_error_docref(NULL TSRMLS_CC, E_WARNING, Could not call the CURLOPT_HEADERFUNCTION); length = -1; - } else { + } else if (retval_ptr) { if (Z_TYPE_P(retval_ptr) != IS_LONG) { convert_to_long_ex(retval_ptr); } length = Z_LVAL_P(retval_ptr); + zval_ptr_dtor(retval_ptr); } zval_ptr_dtor(argv[0]); zval_ptr_dtor(argv[1]); - zval_ptr_dtor(retval_ptr); break; } @@ -779,6 +786,8 @@ (*ch)-handlers-write_header = ecalloc(1, sizeof(php_curl_write)); (*ch)-handlers-read = ecalloc(1, sizeof(php_curl_read)); + (*ch)-in_callback = 0; + memset((*ch)-err, 0, sizeof((*ch)-err)); zend_llist_init((*ch)-to_free.str, sizeof(char *), (void(*)(void *)) curl_free_string, 0); @@ -1478,6 +1487,12 @@ } ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl); + + if (ch-in_callback) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, Attempt to close CURL handle from a callback); + return; + } + if
[PHP-CVS] cvs: php-src /ext/curl interface.c php_curl.h
sterlingFri Mar 12 13:38:00 2004 EDT Modified files: /php-src/ext/curl interface.c php_curl.h Log: add the curl_copy_handle() function which will exactly duplicate a cURL handle. Useful when you have multiple similair transforms as with a multi handle with only small variances (like the URL) http://cvs.php.net/diff.php/php-src/ext/curl/interface.c?r1=1.40r2=1.41ty=u Index: php-src/ext/curl/interface.c diff -u php-src/ext/curl/interface.c:1.40 php-src/ext/curl/interface.c:1.41 --- php-src/ext/curl/interface.c:1.40 Fri Mar 12 12:37:04 2004 +++ php-src/ext/curl/interface.cFri Mar 12 13:37:55 2004 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: interface.c,v 1.40 2004/03/12 17:37:04 iliaa Exp $ */ +/* $Id: interface.c,v 1.41 2004/03/12 18:37:55 sterling Exp $ */ #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS @@ -59,6 +59,7 @@ */ function_entry curl_functions[] = { PHP_FE(curl_init,NULL) + PHP_FE(curl_copy_handle, NULL) PHP_FE(curl_version, NULL) PHP_FE(curl_setopt, NULL) PHP_FE(curl_exec,NULL) @@ -780,6 +781,40 @@ } /* }}} */ +/* {{{ proto resource curl_copy_handle(resource ch) + Copy a cURL handle along with all of it's preferences */ +PHP_FUNCTION(curl_copy_handle) +{ + zval *zid; + CURL *cp; + php_curl *ch; + php_curl *dupch; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, zid) == FAILURE) { + WRONG_PARAM_COUNT; + } + ZEND_FETCH_RESOURCE(ch, php_curl *, zid, -1, le_curl_name, le_curl); + + cp = curl_easy_duphandle(ch-cp); + if (!cp) { + php_error(E_WARNING, Cannot duplicate cURL handle); + RETURN_FALSE; + } + + alloc_curl_handle(dupch); + TSRMLS_SET_CTX(ch-thread_ctx); + + dupch-cp = cp; + dupch-handlers-write-method = ch-handlers-write-method; + dupch-handlers-write-type = ch-handlers-write-type; + dupch-handlers-read-method = ch-handlers-read-method; + dupch-handlers-write_header-method = ch-handlers-write_header-method; + + ZEND_REGISTER_RESOURCE(return_value, dupch, le_curl); + dupch-id = Z_LVAL_P(return_value); +} +/* }}} */ + /* {{{ proto bool curl_setopt(resource ch, string option, mixed value) Set an option for a CURL transfer */ PHP_FUNCTION(curl_setopt) http://cvs.php.net/diff.php/php-src/ext/curl/php_curl.h?r1=1.40r2=1.41ty=u Index: php-src/ext/curl/php_curl.h diff -u php-src/ext/curl/php_curl.h:1.40 php-src/ext/curl/php_curl.h:1.41 --- php-src/ext/curl/php_curl.h:1.40Wed Mar 10 19:11:18 2004 +++ php-src/ext/curl/php_curl.h Fri Mar 12 13:37:55 2004 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_curl.h,v 1.40 2004/03/11 00:11:18 iliaa Exp $ */ +/* $Id: php_curl.h,v 1.41 2004/03/12 18:37:55 sterling Exp $ */ #ifndef _PHP_CURL_H #define _PHP_CURL_H @@ -61,6 +61,7 @@ PHP_MINFO_FUNCTION(curl); PHP_FUNCTION(curl_version); PHP_FUNCTION(curl_init); +PHP_FUNCTION(curl_copy_handle); PHP_FUNCTION(curl_setopt); PHP_FUNCTION(curl_exec); PHP_FUNCTION(curl_getinfo); -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] cvs: php-src /ext/curl interface.c php_curl.h ZendEngine2 zend_execute_API.c
sniper Tue Aug 5 19:50:59 2003 EDT Modified files: /ZendEngine2zend_execute_API.c /php-src/ext/curl interface.c php_curl.h Log: Fix the build Index: ZendEngine2/zend_execute_API.c diff -u ZendEngine2/zend_execute_API.c:1.227 ZendEngine2/zend_execute_API.c:1.228 --- ZendEngine2/zend_execute_API.c:1.227Tue Aug 5 06:24:40 2003 +++ ZendEngine2/zend_execute_API.c Tue Aug 5 19:50:59 2003 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: zend_execute_API.c,v 1.227 2003/08/05 10:24:40 zeev Exp $ */ +/* $Id: zend_execute_API.c,v 1.228 2003/08/05 23:50:59 sniper Exp $ */ #include stdio.h #include signal.h @@ -33,14 +33,14 @@ #include sys/time.h #endif - ZEND_API void (*zend_execute)(zend_op_array *op_array TSRMLS_DC); ZEND_API void (*zend_execute_internal)(zend_execute_data *execute_data_ptr, int return_value_used TSRMLS_DC); -#ifdef ZEND_WIN32 -#include process.h /* true global */ ZEND_API zend_fcall_info_cache empty_fcall_info_cache = { NULL, NULL, NULL, 0 }; + +#ifdef ZEND_WIN32 +#include process.h static WNDCLASS wc; static HWND timeout_window; Index: php-src/ext/curl/interface.c diff -u php-src/ext/curl/interface.c:1.26 php-src/ext/curl/interface.c:1.27 --- php-src/ext/curl/interface.c:1.26 Tue Aug 5 06:29:02 2003 +++ php-src/ext/curl/interface.cTue Aug 5 19:50:59 2003 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: interface.c,v 1.26 2003/08/05 10:29:02 zeev Exp $ */ +/* $Id: interface.c,v 1.27 2003/08/05 23:50:59 sniper Exp $ */ #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS @@ -562,7 +562,7 @@ fci.params = argv; fci.no_separation = 0; - error = zend_call_user_function(fci, t-fci_cache TSRMLS_CC); + error = zend_call_function(fci, t-fci_cache TSRMLS_CC); if (error == FAILURE) { php_error_docref(NULL TSRMLS_CC, E_WARNING, Could not call the CURLOPT_HEADERFUNCTION); length = -1; Index: php-src/ext/curl/php_curl.h diff -u php-src/ext/curl/php_curl.h:1.37 php-src/ext/curl/php_curl.h:1.38 --- php-src/ext/curl/php_curl.h:1.37Tue Aug 5 06:29:03 2003 +++ php-src/ext/curl/php_curl.h Tue Aug 5 19:50:59 2003 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_curl.h,v 1.37 2003/08/05 10:29:03 zeev Exp $ */ +/* $Id: php_curl.h,v 1.38 2003/08/05 23:50:59 sniper Exp $ */ #ifndef _PHP_CURL_H #define _PHP_CURL_H @@ -79,7 +79,7 @@ typedef struct { zval*func_name; - zend_fcall_info fci_cache; + zend_fcall_info_cache fci_cache; FILE*fp; smart_str buf; int method; @@ -88,7 +88,7 @@ typedef struct { zval*func_name; - zend_fcall_info fci_cache; + zend_fcall_info_cache fci_cache; FILE*fp; longfd; int method; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php