} 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();
}
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;
}
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;
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;
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;
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
};
-static zend_class_entry *get_class_entry(void)
-{
- return php_http_curl_client_datashare_class_entry;
-}
-
static php_http_client_datashare_ops_t php_http_curl_client_datashare_ops = {
&php_http_curlsh_resource_factory_ops,
php_http_curl_client_datashare_init,
php_http_curl_client_datashare_detach,
php_http_curl_client_datashare_setopt,
(php_http_new_t) php_http_curl_client_datashare_object_new_ex,
- get_class_entry
+ php_http_curl_client_datashare_get_class_entry
};
PHP_HTTP_API php_http_client_datashare_ops_t *php_http_curl_client_datashare_get_ops(void)
#define PHP_HTTP_EMPTY_ARGS(method) PHP_HTTP_EMPTY_ARGS_EX(HttpClientDataShare, method, 0)
#define PHP_HTTP_RSHARE_ME(method, visibility) PHP_ME(HttpClientDataShare, method, PHP_HTTP_ARGS(HttpClientDataShare, method), visibility)
-zend_class_entry *php_http_curl_client_datashare_class_entry;
-zend_function_entry php_http_curl_client_datashare_method_entry[] = {
+static zend_class_entry *php_http_curl_client_datashare_class_entry;
+
+zend_class_entry *php_http_curl_client_datashare_get_class_entry(void)
+{
+ return php_http_curl_client_datashare_class_entry;
+}
+
+static zend_function_entry php_http_curl_client_datashare_method_entry[] = {
EMPTY_FUNCTION_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;
}