projects
/
m6w6
/
ext-http
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
coverity fixes
[m6w6/ext-http]
/
src
/
php_http_client_curl.c
diff --git
a/src/php_http_client_curl.c
b/src/php_http_client_curl.c
index 863b342e294fdd2780f039196a5d3c7601872a34..b7c6b05389012f74bc667b2d2a38f23feee855b9 100644
(file)
--- a/
src/php_http_client_curl.c
+++ b/
src/php_http_client_curl.c
@@
-182,22
+182,19
@@
static int php_http_curle_progress_callback(void *ctx, double dltotal, double dl
#endif
{
php_http_client_curl_handler_t *h = ctx;
#endif
{
php_http_client_curl_handler_t *h = ctx;
- zend_bool update = 0;
if (h->progress.dl.total != dltotal
|| h->progress.dl.now != dlnow
|| h->progress.ul.total != ultotal
|| h->progress.ul.now != ulnow
) {
if (h->progress.dl.total != dltotal
|| h->progress.dl.now != dlnow
|| h->progress.ul.total != ultotal
|| h->progress.ul.now != ulnow
) {
- update = 1;
-
h->progress.dl.total = dltotal;
h->progress.dl.now = dlnow;
h->progress.ul.total = ultotal;
h->progress.ul.now = ulnow;
}
h->progress.dl.total = dltotal;
h->progress.dl.now = dlnow;
h->progress.ul.total = ultotal;
h->progress.ul.now = ulnow;
}
- if (
update &&
h->client->callback.progress.func) {
+ if (h->client->callback.progress.func) {
h->client->callback.progress.func(h->client->callback.progress.arg, h->client, &h->queue, &h->progress);
}
h->client->callback.progress.func(h->client->callback.progress.arg, h->client, &h->queue, &h->progress);
}
@@
-221,6
+218,7
@@
static int php_http_curle_seek_callback(void *userdata, curl_off_t offset, int o
static int php_http_curle_raw_callback(CURL *ch, curl_infotype type, char *data, size_t length, void *ctx)
{
php_http_client_curl_handler_t *h = ctx;
static int php_http_curle_raw_callback(CURL *ch, curl_infotype type, char *data, size_t length, void *ctx)
{
php_http_client_curl_handler_t *h = ctx;
+ unsigned utype = PHP_HTTP_CLIENT_DEBUG_INFO;
/* catch progress */
switch (type) {
/* catch progress */
switch (type) {
@@
-264,20
+262,43
@@
static int php_http_curle_raw_callback(CURL *ch, curl_infotype type, char *data,
h->client->callback.progress.func(h->client->callback.progress.arg, h->client, &h->queue, &h->progress);
}
break;
h->client->callback.progress.func(h->client->callback.progress.arg, h->client, &h->queue, &h->progress);
}
break;
+
case CURLINFO_HEADER_OUT:
case CURLINFO_HEADER_OUT:
- case CURLINFO_DATA_OUT:
+ utype |= PHP_HTTP_CLIENT_DEBUG_HEADER;
+ goto data_out;
+
case CURLINFO_SSL_DATA_OUT:
case CURLINFO_SSL_DATA_OUT:
+ utype |= PHP_HTTP_CLIENT_DEBUG_SSL;
+ goto data_out;
+
+ case CURLINFO_DATA_OUT:
+ data_out:
+ utype |= PHP_HTTP_CLIENT_DEBUG_OUT;
h->progress.info = "send";
break;
h->progress.info = "send";
break;
+
case CURLINFO_HEADER_IN:
case CURLINFO_HEADER_IN:
- case CURLINFO_DATA_IN:
+ utype |= PHP_HTTP_CLIENT_DEBUG_HEADER;
+ goto data_in;
+
case CURLINFO_SSL_DATA_IN:
case CURLINFO_SSL_DATA_IN:
+ utype |= PHP_HTTP_CLIENT_DEBUG_SSL;
+ goto data_in;
+
+ case CURLINFO_DATA_IN:
+ data_in:
+ utype |= PHP_HTTP_CLIENT_DEBUG_IN;
h->progress.info = "receive";
break;
h->progress.info = "receive";
break;
+
default:
break;
}
default:
break;
}
+ if (h->client->callback.debug.func) {
+ h->client->callback.debug.func(h->client->callback.debug.arg, h->client, &h->queue, utype, data, length);
+ }
+
#if 0
/* debug */
_dpf(type, data, length);
#if 0
/* debug */
_dpf(type, data, length);
@@
-429,6
+450,11
@@
static ZEND_RESULT_CODE php_http_curle_get_info(CURL *ch, HashTable *info)
add_assoc_long_ex(&array, "local_port", sizeof("local_port"), l);
}
#endif
add_assoc_long_ex(&array, "local_port", sizeof("local_port"), l);
}
#endif
+#if PHP_HTTP_CURL_VERSION(7,50,0)
+ if (CURLE_OK == curl_easy_getinfo(ch, CURLINFO_HTTP_VERSION, &l)) {
+ add_assoc_long_ex(&array, "http_version", sizeof("http_version"), l);
+ }
+#endif
/* END::CURLINFO */
/* END::CURLINFO */
@@
-2028,6
+2054,7
@@
static void php_http_client_curl_dtor(php_http_client_t *h)
if (curl->ev_ops) {
curl->ev_ops->dtor(&curl->ev_ctx);
if (curl->ev_ops) {
curl->ev_ops->dtor(&curl->ev_ctx);
+ curl->ev_ops = NULL;
}
curl->unfinished = 0;
}
curl->unfinished = 0;
@@
-2143,6
+2170,11
@@
static ZEND_RESULT_CODE php_http_client_curl_dequeue(php_http_client_t *h, php_h
php_http_client_curl_handler_t *handler = enqueue->opaque;
TSRMLS_FETCH_FROM_CTX(h->ts);
php_http_client_curl_handler_t *handler = enqueue->opaque;
TSRMLS_FETCH_FROM_CTX(h->ts);
+ if (h->callback.depth) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not dequeue request while executing callbacks");
+ return FAILURE;
+ }
+
php_http_client_curl_handler_clear(handler);
if (CURLM_OK == (rs = curl_multi_remove_handle(curl->handle->multi, handler->handle))) {
zend_llist_del_element(&h->requests, handler->handle, (int (*)(void *, void *)) compare_queue);
php_http_client_curl_handler_clear(handler);
if (CURLM_OK == (rs = curl_multi_remove_handle(curl->handle->multi, handler->handle))) {
zend_llist_del_element(&h->requests, handler->handle, (int (*)(void *, void *)) compare_queue);
@@
-2206,16
+2238,17
@@
static int php_http_client_curl_once(php_http_client_t *h)
{
php_http_client_curl_t *curl = h->ctx;
{
php_http_client_curl_t *curl = h->ctx;
- if (curl->ev_ops) {
- curl->ev_ops->once(curl->ev_ctx);
- } else {
- while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(curl->handle->multi, &curl->unfinished));
- }
+ if (!h->callback.depth) {
+ if (curl->ev_ops) {
+ curl->ev_ops->once(curl->ev_ctx);
+ } else {
+ while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(curl->handle->multi, &curl->unfinished));
+ }
- php_http_client_curl_responsehandler(h);
+ php_http_client_curl_responsehandler(h);
+ }
return curl->unfinished;
return curl->unfinished;
-
}
static ZEND_RESULT_CODE php_http_client_curl_exec(php_http_client_t *h)
}
static ZEND_RESULT_CODE php_http_client_curl_exec(php_http_client_t *h)
@@
-2223,19
+2256,21
@@
static ZEND_RESULT_CODE php_http_client_curl_exec(php_http_client_t *h)
php_http_client_curl_t *curl = h->ctx;
TSRMLS_FETCH_FROM_CTX(h->ts);
php_http_client_curl_t *curl = h->ctx;
TSRMLS_FETCH_FROM_CTX(h->ts);
- if (curl->ev_ops) {
- return curl->ev_ops->exec(curl->ev_ctx);
- }
+ if (!h->callback.depth) {
+ if (curl->ev_ops) {
+ return curl->ev_ops->exec(curl->ev_ctx);
+ }
- while (php_http_client_curl_once(h) && !EG(exception)) {
- if (SUCCESS != php_http_client_curl_wait(h, NULL)) {
+
while (php_http_client_curl_once(h) && !EG(exception)) {
+
if (SUCCESS != php_http_client_curl_wait(h, NULL)) {
#ifdef PHP_WIN32
#ifdef PHP_WIN32
- /* see http://msdn.microsoft.com/library/en-us/winsock/winsock/windows_sockets_error_codes_2.asp */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "WinSock error: %d", WSAGetLastError());
+
/* see http://msdn.microsoft.com/library/en-us/winsock/winsock/windows_sockets_error_codes_2.asp */
+
php_error_docref(NULL TSRMLS_CC, E_WARNING, "WinSock error: %d", WSAGetLastError());
#else
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
#endif
#else
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
#endif
- return FAILURE;
+ return FAILURE;
+ }
}
}
}
}