root/ext/curl/share.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. PHP_FUNCTION
  2. PHP_FUNCTION
  3. _php_curl_share_setopt
  4. PHP_FUNCTION
  5. _php_curl_share_close

   1 /*
   2    +----------------------------------------------------------------------+
   3    | PHP Version 7                                                        |
   4    +----------------------------------------------------------------------+
   5    | Copyright (c) 1997-2016 The PHP Group                                |
   6    +----------------------------------------------------------------------+
   7    | This source file is subject to version 3.01 of the PHP license,      |
   8    | that is bundled with this package in the file LICENSE, and is        |
   9    | available through the world-wide-web at the following url:           |
  10    | http://www.php.net/license/3_01.txt                                  |
  11    | If you did not receive a copy of the PHP license and are unable to   |
  12    | obtain it through the world-wide-web, please send a note to          |
  13    | license@php.net so we can mail you a copy immediately.               |
  14    +----------------------------------------------------------------------+
  15    | Author: Pierrick Charron <pierrick@php.net>                          |
  16    +----------------------------------------------------------------------+
  17 */
  18 
  19 /* $Id$ */
  20 
  21 #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
  22 
  23 #ifdef HAVE_CONFIG_H
  24 #include "config.h"
  25 #endif
  26 
  27 #include "php.h"
  28 
  29 #if HAVE_CURL
  30 
  31 #include "php_curl.h"
  32 
  33 #include <curl/curl.h>
  34 
  35 /* {{{ proto void curl_share_init()
  36    Initialize a share curl handle */
  37 PHP_FUNCTION(curl_share_init)
  38 {
  39         php_curlsh *sh;
  40 
  41         if (zend_parse_parameters_none() == FAILURE) {
  42                 return;
  43         }
  44 
  45         sh = ecalloc(1, sizeof(php_curlsh));
  46 
  47         sh->share = curl_share_init();
  48 
  49         RETURN_RES(zend_register_resource(sh, le_curl_share_handle));
  50 }
  51 /* }}} */
  52 
  53 /* {{{ proto void curl_share_close(resource sh)
  54    Close a set of cURL handles */
  55 PHP_FUNCTION(curl_share_close)
  56 {
  57         zval *z_sh;
  58         php_curlsh *sh;
  59 
  60         if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_sh) == FAILURE) {
  61                 return;
  62         }
  63 
  64         if ((sh = (php_curlsh *)zend_fetch_resource(Z_RES_P(z_sh), le_curl_share_handle_name, le_curl_share_handle)) == NULL) {
  65                 RETURN_FALSE;
  66         }
  67 
  68         zend_list_close(Z_RES_P(z_sh));
  69 }
  70 /* }}} */
  71 
  72 static int _php_curl_share_setopt(php_curlsh *sh, zend_long option, zval *zvalue, zval *return_value) /* {{{ */
  73 {
  74         CURLSHcode error = CURLSHE_OK;
  75 
  76         switch (option) {
  77                 case CURLSHOPT_SHARE:
  78                 case CURLSHOPT_UNSHARE:
  79                         error = curl_share_setopt(sh->share, option, zval_get_long(zvalue));
  80                         break;
  81 
  82                 default:
  83                         php_error_docref(NULL, E_WARNING, "Invalid curl share configuration option");
  84                         error = CURLSHE_BAD_OPTION;
  85                         break;
  86         }
  87 
  88         if (error != CURLSHE_OK) {
  89                 return 1;
  90         } else {
  91                 return 0;
  92         }
  93 }
  94 /* }}} */
  95 
  96 /* {{{ proto bool curl_share_setopt(resource sh, int option, mixed value)
  97       Set an option for a cURL transfer */
  98 PHP_FUNCTION(curl_share_setopt)
  99 {
 100         zval       *zid, *zvalue;
 101         zend_long        options;
 102         php_curlsh *sh;
 103 
 104         if (zend_parse_parameters(ZEND_NUM_ARGS(), "rlz", &zid, &options, &zvalue) == FAILURE) {
 105                 return;
 106         }
 107 
 108         if ((sh = (php_curlsh *)zend_fetch_resource(Z_RES_P(zid), le_curl_share_handle_name, le_curl_share_handle)) == NULL) {
 109                 RETURN_FALSE;
 110         }
 111 
 112         if (!_php_curl_share_setopt(sh, options, zvalue, return_value)) {
 113                 RETURN_TRUE;
 114         } else {
 115                 RETURN_FALSE;
 116         }
 117 }
 118 /* }}} */
 119 
 120 void _php_curl_share_close(zend_resource *rsrc) /* {{{ */
 121 {
 122         php_curlsh *sh = (php_curlsh *)rsrc->ptr;
 123         if (sh) {
 124                 curl_share_cleanup(sh->share);
 125                 efree(sh);
 126                 rsrc->ptr = NULL;
 127         }
 128 }
 129 /* }}} */
 130 
 131 #endif
 132 
 133 /*
 134  * Local variables:
 135  * tab-width: 4
 136  * c-basic-offset: 4
 137  * End:
 138  * vim600: noet sw=4 ts=4 fdm=marker
 139  * vim<600: noet sw=4 ts=4
 140  */

/* [<][>][^][v][top][bottom][index][help] */