Implement gc handlers
[m6w6/ext-http] / src / php_http_client_curl.c
index 317edd3baf00851f80fc40c721ad09e3358200f2..18eb944708b7d74b562966a9f4fed1b0e6552aac 100644 (file)
@@ -198,14 +198,10 @@ static php_resource_factory_ops_t php_http_curlm_resource_factory_ops = {
 
 static size_t php_http_curle_read_callback(void *data, size_t len, size_t n, void *ctx)
 {
 
 static size_t php_http_curle_read_callback(void *data, size_t len, size_t n, void *ctx)
 {
-       php_http_message_body_t *body = ctx;
+       php_stream *s = php_http_message_body_stream(ctx);
 
 
-       if (body && body->res) {
-               php_stream *s = php_http_message_body_stream(body);
-
-               if (s) {
-                       return php_stream_read(s, data, len * n);
-               } else abort();
+       if (s) {
+               return php_stream_read(s, data, len * n);
        }
        return 0;
 }
        }
        return 0;
 }
@@ -1795,9 +1791,15 @@ static ZEND_RESULT_CODE php_http_curlm_option_set_share_cookies(php_http_option_
        } else {
                rc = curl_share_setopt(curl->handle->share, CURLSHOPT_UNSHARE, CURL_LOCK_DATA_COOKIE);
        }
        } else {
                rc = curl_share_setopt(curl->handle->share, CURLSHOPT_UNSHARE, CURL_LOCK_DATA_COOKIE);
        }
-       return CURLSHE_OK == rc ? SUCCESS : FAILURE;
+
+       if (CURLSHE_OK != rc) {
+               php_error_docref(NULL, E_NOTICE, "Could not set option %s (%s)", opt->name->val, curl_share_strerror(rc));
+               return FAILURE;
+       }
+       return SUCCESS;
 }
 
 }
 
+#if PHP_HTTP_CURL_VERSION(7,23,0)
 static ZEND_RESULT_CODE php_http_curlm_option_set_share_ssl(php_http_option_t *opt, zval *value, void *userdata)
 {
        php_http_client_t *client = userdata;
 static ZEND_RESULT_CODE php_http_curlm_option_set_share_ssl(php_http_option_t *opt, zval *value, void *userdata)
 {
        php_http_client_t *client = userdata;
@@ -1809,8 +1811,14 @@ static ZEND_RESULT_CODE php_http_curlm_option_set_share_ssl(php_http_option_t *o
        } else {
                rc = curl_share_setopt(curl->handle->share, CURLSHOPT_UNSHARE, CURL_LOCK_DATA_SSL_SESSION);
        }
        } else {
                rc = curl_share_setopt(curl->handle->share, CURLSHOPT_UNSHARE, CURL_LOCK_DATA_SSL_SESSION);
        }
-       return CURLSHE_OK == rc ? SUCCESS : FAILURE;
+
+       if (CURLSHE_OK != rc) {
+               php_error_docref(NULL, E_NOTICE, "Could not set option %s (%s)", opt->name->val, curl_share_strerror(rc));
+               return FAILURE;
+       }
+       return SUCCESS;
 }
 }
+#endif
 
 static void php_http_curlm_options_init(php_http_options_t *registry)
 {
 
 static void php_http_curlm_options_init(php_http_options_t *registry)
 {
@@ -1868,10 +1876,12 @@ static void php_http_curlm_options_init(php_http_options_t *registry)
                opt->setter = php_http_curlm_option_set_share_cookies;
                ZVAL_TRUE(&opt->defval);
        }
                opt->setter = php_http_curlm_option_set_share_cookies;
                ZVAL_TRUE(&opt->defval);
        }
+#if PHP_HTTP_CURL_VERSION(7,23,0)
        if ((opt = php_http_option_register(registry, ZEND_STRL("share_ssl"), 0, _IS_BOOL))) {
                opt->setter = php_http_curlm_option_set_share_ssl;
                ZVAL_TRUE(&opt->defval);
        }
        if ((opt = php_http_option_register(registry, ZEND_STRL("share_ssl"), 0, _IS_BOOL))) {
                opt->setter = php_http_curlm_option_set_share_ssl;
                ZVAL_TRUE(&opt->defval);
        }
+#endif
 }
 
 static ZEND_RESULT_CODE php_http_curlm_set_option(php_http_option_t *opt, zval *val, void *userdata)
 }
 
 static ZEND_RESULT_CODE php_http_curlm_set_option(php_http_option_t *opt, zval *val, void *userdata)
@@ -1901,15 +1911,18 @@ static ZEND_RESULT_CODE php_http_curlm_set_option(php_http_option_t *opt, zval *
                case _IS_BOOL:
                        if (CURLM_OK != (rc = curl_multi_setopt(ch, opt->option, (long) zend_is_true(val)))) {
                                rv = FAILURE;
                case _IS_BOOL:
                        if (CURLM_OK != (rc = curl_multi_setopt(ch, opt->option, (long) zend_is_true(val)))) {
                                rv = FAILURE;
+                               php_error_docref(NULL, E_NOTICE, "Could not set option %s (%s)", opt->name->val, curl_multi_strerror(rc));
                        }
                        break;
                case IS_LONG:
                        if (CURLM_OK != (rc = curl_multi_setopt(ch, opt->option, Z_LVAL_P(val)))) {
                                rv = FAILURE;
                        }
                        break;
                case IS_LONG:
                        if (CURLM_OK != (rc = curl_multi_setopt(ch, opt->option, Z_LVAL_P(val)))) {
                                rv = FAILURE;
+                               php_error_docref(NULL, E_NOTICE, "Could not set option %s (%s)", opt->name->val, curl_multi_strerror(rc));
                        }
                        break;
                default:
                        rv = FAILURE;
                        }
                        break;
                default:
                        rv = FAILURE;
+                       php_error_docref(NULL, E_NOTICE, "Could not set option %s", opt->name->val);
                        break;
                }
        }
                        break;
                }
        }
@@ -1918,9 +1931,6 @@ static ZEND_RESULT_CODE php_http_curlm_set_option(php_http_option_t *opt, zval *
                zval_ptr_dtor(val);
        }
 
                zval_ptr_dtor(val);
        }
 
-       if (rv != SUCCESS) {
-               php_error_docref(NULL, E_NOTICE, "Could not set option %s (%s)", opt->name->val, curl_easy_strerror(rc));
-       }
        return rv;
 }
 
        return rv;
 }