extesion deps
[m6w6/ext-http] / php_http_curl_client_datashare.c
index cc370bad0f2817ed639a6eb89288d4196384bbcc..38377cc973a1294ed0dc56b6e9703299ab8ea83f 100644 (file)
@@ -19,7 +19,7 @@ typedef struct php_http_curl_client_datashare {
 } php_http_curl_client_datashare_t;
 
 
-static void *php_http_curlsh_ctor(void *opaque TSRMLS_DC)
+static void *php_http_curlsh_ctor(void *opaque, void *init_arg TSRMLS_DC)
 {
        return curl_share_init();
 }
@@ -37,7 +37,7 @@ static php_http_client_datashare_t *php_http_curl_client_datashare_init(php_http
        php_http_curl_client_datashare_t *curl;
        TSRMLS_FETCH_FROM_CTX(h->ts);
 
-       if (!handle && !(handle = php_http_resource_factory_handle_ctor(h->rf TSRMLS_CC))) {
+       if (!handle && !(handle = php_resource_factory_handle_ctor(h->rf, NULL TSRMLS_CC))) {
                php_http_error(HE_WARNING, PHP_HTTP_E_CLIENT_DATASHARE, "could not initialize curl share handle");
                return NULL;
        }
@@ -54,7 +54,7 @@ static void php_http_curl_client_datashare_dtor(php_http_client_datashare_t *h)
        php_http_curl_client_datashare_t *curl = h->ctx;
        TSRMLS_FETCH_FROM_CTX(h->ts);
 
-       php_http_resource_factory_handle_dtor(h->rf, curl->handle TSRMLS_CC);
+       php_resource_factory_handle_dtor(h->rf, curl->handle TSRMLS_CC);
 
        efree(curl);
        h->ctx = NULL;
@@ -67,6 +67,11 @@ static STATUS php_http_curl_client_datashare_attach(php_http_client_datashare_t
        php_http_curl_client_t *recurl = r->ctx;
        TSRMLS_FETCH_FROM_CTX(h->ts);
 
+       if (r->ops != php_http_curl_client_get_ops()) {
+               php_http_error(HE_WARNING, PHP_HTTP_E_CLIENT_DATASHARE, "Cannot attach a non-curl client to this datashare");
+               return FAILURE;
+       }
+
        if (CURLE_OK != (rc = curl_easy_setopt(recurl->handle, CURLOPT_SHARE, curl->handle))) {
                php_http_error(HE_WARNING, PHP_HTTP_E_CLIENT_DATASHARE, "Could not attach request to the datashare: %s", curl_easy_strerror(rc));
                return FAILURE;
@@ -81,6 +86,11 @@ static STATUS php_http_curl_client_datashare_detach(php_http_client_datashare_t
        TSRMLS_FETCH_FROM_CTX(h->ts);
 
 
+       if (r->ops != php_http_curl_client_get_ops()) {
+               php_http_error(HE_WARNING, PHP_HTTP_E_CLIENT_DATASHARE, "Cannot attach a non-curl client to this datashare");
+               return FAILURE;
+       }
+
        if (CURLE_OK != (rc = curl_easy_setopt(recurl->handle, CURLOPT_SHARE, NULL))) {
                php_http_error(HE_WARNING, PHP_HTTP_E_CLIENT_DATASHARE, "Could not detach request from the datashare: %s", curl_share_strerror(rc));
                return FAILURE;
@@ -130,7 +140,7 @@ static STATUS php_http_curl_client_datashare_setopt(php_http_client_datashare_t
        return SUCCESS;
 }
 
-static php_http_resource_factory_ops_t php_http_curlsh_resource_factory_ops = {
+static php_resource_factory_ops_t php_http_curlsh_resource_factory_ops = {
        php_http_curlsh_ctor,
        NULL,
        php_http_curlsh_dtor
@@ -202,7 +212,7 @@ zend_object_value php_http_curl_client_datashare_object_new_ex(zend_class_entry
 
 PHP_MINIT_FUNCTION(http_curl_client_datashare)
 {
-       if (SUCCESS != php_http_persistent_handle_provide(ZEND_STRL("http_client_datashare.curl"), &php_http_curlsh_resource_factory_ops, NULL, NULL)) {
+       if (SUCCESS != php_persistent_handle_provide(ZEND_STRL("http_client_datashare.curl"), &php_http_curlsh_resource_factory_ops, NULL, NULL TSRMLS_CC)) {
                return FAILURE;
        }