sterling                Fri 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.40&r2=1.41&ty=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.c        Fri 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.40&r2=1.41&ty=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.40    Wed 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

Reply via email to