implement #58
[m6w6/ext-http] / src / php_http_client.c
index b7cf2b90ea62aec15c468d65fa82ca8dab3094fa..0749825ba40b9b601500f299f835888e52576bb8 100644 (file)
@@ -689,7 +689,7 @@ static PHP_METHOD(HttpClient, enqueue)
        zend_fcall_info_cache fcc = empty_fcall_info_cache;
        php_http_client_object_t *obj;
        php_http_message_object_t *msg_obj;
-       php_http_client_enqueue_t q;
+       php_http_client_enqueue_t q = {0};
 
        php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS(), "O|f", &request, php_http_get_client_request_class_entry(), &fci, &fcc), invalid_arg, return);
 
@@ -701,6 +701,17 @@ static PHP_METHOD(HttpClient, enqueue)
                return;
        }
 
+       /* set early for progress callback */
+       q.opaque = msg_obj;
+
+       if (obj->client->callback.progress.func) {
+               php_http_client_progress_state_t progress = {0};
+
+               progress.info = "prepare";
+               obj->client->callback.progress.func(obj->client->callback.progress.arg, obj->client, &q, &progress);
+       }
+
+       Z_ADDREF_P(request);
        q.request = msg_obj->message;
        q.options = combined_options(getThis(), request);
        q.dtor = msg_queue_dtor;
@@ -715,8 +726,6 @@ static PHP_METHOD(HttpClient, enqueue)
                }
        }
 
-       Z_ADDREF_P(request);
-
        php_http_expect(SUCCESS == php_http_client_enqueue(obj->client, &q), runtime,
                        msg_queue_dtor(&q);
                        return;