+PHP_HTTP_API STATUS _http_request_flush_cookies(http_request *request)
+{
+ int initialized = 1;
+ TSRMLS_FETCH_FROM_CTX(request->tsrm_ls);
+
+ HTTP_CHECK_CURL_INIT(request->ch, http_curl_init_ex(request->ch, request), initialized = 0);
+#if HTTP_CURL_VERSION(7,17,1)
+ if (initialized && CURLE_OK == curl_easy_setopt(request->ch, CURLOPT_COOKIELIST, "FLUSH")) {
+ return SUCCESS;
+ }
+#else
+ http_error(HE_WARNING, HTTP_E_REQUEST, "Could not flush cookies (need libcurl >= v7.17.1)");
+#endif
+ return FAILURE;
+}
+
+/* {{{ void http_request_defaults(http_request *) */
+PHP_HTTP_API void _http_request_defaults(http_request *request)
+{
+ if (request->ch) {
+ HTTP_CURL_OPT(CURLOPT_PROGRESSFUNCTION, NULL);
+ HTTP_CURL_OPT(CURLOPT_URL, NULL);
+ HTTP_CURL_OPT(CURLOPT_NOPROGRESS, 1L);
+ HTTP_CURL_OPT(CURLOPT_PROXY, NULL);
+ HTTP_CURL_OPT(CURLOPT_PROXYPORT, 0L);
+ HTTP_CURL_OPT(CURLOPT_PROXYTYPE, 0L);
+ HTTP_CURL_OPT(CURLOPT_PROXYUSERPWD, NULL);
+ HTTP_CURL_OPT(CURLOPT_PROXYAUTH, 0L);
+ HTTP_CURL_OPT(CURLOPT_DNS_CACHE_TIMEOUT, 60L);
+ HTTP_CURL_OPT(CURLOPT_IPRESOLVE, 0);
+ HTTP_CURL_OPT(CURLOPT_LOW_SPEED_LIMIT, 0L);
+ HTTP_CURL_OPT(CURLOPT_LOW_SPEED_TIME, 0L);
+#if HTTP_CURL_VERSION(7,15,5)
+ /* LFS weirdance
+ HTTP_CURL_OPT(CURLOPT_MAX_SEND_SPEED_LARGE, (curl_off_t) 0);
+ HTTP_CURL_OPT(CURLOPT_MAX_RECV_SPEED_LARGE, (curl_off_t) 0);
+ */
+#endif
+ /* crashes
+ HTTP_CURL_OPT(CURLOPT_MAXCONNECTS, 5L); */
+ HTTP_CURL_OPT(CURLOPT_FRESH_CONNECT, 0L);
+ HTTP_CURL_OPT(CURLOPT_FORBID_REUSE, 0L);
+ HTTP_CURL_OPT(CURLOPT_INTERFACE, NULL);
+ HTTP_CURL_OPT(CURLOPT_PORT, 0L);
+#if HTTP_CURL_VERSION(7,15,2)
+ HTTP_CURL_OPT(CURLOPT_LOCALPORT, 0L);
+ HTTP_CURL_OPT(CURLOPT_LOCALPORTRANGE, 0L);
+#endif
+ HTTP_CURL_OPT(CURLOPT_USERPWD, NULL);
+ HTTP_CURL_OPT(CURLOPT_HTTPAUTH, 0L);
+ HTTP_CURL_OPT(CURLOPT_ENCODING, NULL);
+#if HTTP_CURL_VERSION(7,16,2)
+ /* we do this ourself anyway */
+ HTTP_CURL_OPT(CURLOPT_HTTP_CONTENT_DECODING, 0L);
+ HTTP_CURL_OPT(CURLOPT_HTTP_TRANSFER_DECODING, 0L);
+#endif
+ HTTP_CURL_OPT(CURLOPT_FOLLOWLOCATION, 0L);
+ HTTP_CURL_OPT(CURLOPT_UNRESTRICTED_AUTH, 0L);
+ HTTP_CURL_OPT(CURLOPT_REFERER, NULL);
+ HTTP_CURL_OPT(CURLOPT_USERAGENT, "PECL::HTTP/" PHP_EXT_HTTP_VERSION " (PHP/" PHP_VERSION ")");
+ HTTP_CURL_OPT(CURLOPT_HTTPHEADER, NULL);
+ HTTP_CURL_OPT(CURLOPT_COOKIE, NULL);
+#if HTTP_CURL_VERSION(7,14,1)
+ HTTP_CURL_OPT(CURLOPT_COOKIELIST, NULL);
+#endif
+ HTTP_CURL_OPT(CURLOPT_RANGE, NULL);
+ HTTP_CURL_OPT(CURLOPT_RESUME_FROM, 0L);
+ HTTP_CURL_OPT(CURLOPT_MAXFILESIZE, 0L);
+ HTTP_CURL_OPT(CURLOPT_TIMECONDITION, 0L);
+ HTTP_CURL_OPT(CURLOPT_TIMEVALUE, 0L);
+ HTTP_CURL_OPT(CURLOPT_TIMEOUT, 0L);
+ HTTP_CURL_OPT(CURLOPT_CONNECTTIMEOUT, 3);
+ HTTP_CURL_OPT(CURLOPT_SSLCERT, NULL);
+ HTTP_CURL_OPT(CURLOPT_SSLCERTTYPE, NULL);
+ HTTP_CURL_OPT(CURLOPT_SSLCERTPASSWD, NULL);
+ HTTP_CURL_OPT(CURLOPT_SSLKEY, NULL);
+ HTTP_CURL_OPT(CURLOPT_SSLKEYTYPE, NULL);
+ HTTP_CURL_OPT(CURLOPT_SSLKEYPASSWD, NULL);
+ HTTP_CURL_OPT(CURLOPT_SSLENGINE, NULL);
+ HTTP_CURL_OPT(CURLOPT_SSLVERSION, 0L);
+ HTTP_CURL_OPT(CURLOPT_SSL_VERIFYPEER, 0L);
+ HTTP_CURL_OPT(CURLOPT_SSL_VERIFYHOST, 0L);
+ HTTP_CURL_OPT(CURLOPT_SSL_CIPHER_LIST, NULL);
+#ifdef HTTP_CURL_CAINFO
+ HTTP_CURL_OPT(CURLOPT_CAINFO, HTTP_CURL_CAINFO);
+#else
+ HTTP_CURL_OPT(CURLOPT_CAINFO, NULL);
+#endif
+ HTTP_CURL_OPT(CURLOPT_CAPATH, NULL);
+ HTTP_CURL_OPT(CURLOPT_RANDOM_FILE, NULL);
+ HTTP_CURL_OPT(CURLOPT_EGDSOCKET, NULL);
+ HTTP_CURL_OPT(CURLOPT_POSTFIELDS, NULL);
+ HTTP_CURL_OPT(CURLOPT_POSTFIELDSIZE, 0L);
+ HTTP_CURL_OPT(CURLOPT_HTTPPOST, NULL);
+ HTTP_CURL_OPT(CURLOPT_IOCTLDATA, NULL);
+ HTTP_CURL_OPT(CURLOPT_READDATA, NULL);
+ HTTP_CURL_OPT(CURLOPT_INFILESIZE, 0L);
+ HTTP_CURL_OPT(CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_NONE);
+ HTTP_CURL_OPT(CURLOPT_CUSTOMREQUEST, NULL);
+ HTTP_CURL_OPT(CURLOPT_NOBODY, 0L);
+ HTTP_CURL_OPT(CURLOPT_POST, 0L);
+ HTTP_CURL_OPT(CURLOPT_UPLOAD, 0L);
+ HTTP_CURL_OPT(CURLOPT_HTTPGET, 1L);
+ }
+}
+/* }}} */
+
+PHP_HTTP_API void _http_request_set_progress_callback(http_request *request, zval *cb)
+{
+ if (request->_progress_callback) {
+ zval_ptr_dtor(&request->_progress_callback);
+ }
+ if ((request->_progress_callback = cb)) {
+ ZVAL_ADDREF(cb);
+ HTTP_CURL_OPT(CURLOPT_NOPROGRESS, 0);
+ HTTP_CURL_OPT(CURLOPT_PROGRESSDATA, request);
+ HTTP_CURL_OPT(CURLOPT_PROGRESSFUNCTION, http_curl_progress_callback);
+ } else {
+ HTTP_CURL_OPT(CURLOPT_NOPROGRESS, 1);
+ HTTP_CURL_OPT(CURLOPT_PROGRESSDATA, NULL);
+ HTTP_CURL_OPT(CURLOPT_PROGRESSFUNCTION, NULL);
+ }
+}
+
+/* {{{ STATUS http_request_prepare(http_request *, HashTable *) */