X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_client.c;h=0826bbff77087d39abc98c8344c1b67b8babfa36;hp=c307221f0f0bf98f82b5d4ebde43dd6f13d066f5;hb=ee95d238f4ffa07e8c5f146848cd1e73ac2447d1;hpb=f753226f1f45e10ef3916256ec1bc0416c8644a8 diff --git a/php_http_client.c b/php_http_client.c index c307221..0826bbf 100644 --- a/php_http_client.c +++ b/php_http_client.c @@ -661,19 +661,38 @@ static PHP_METHOD(HttpClient, requeue) } ZEND_BEGIN_ARG_INFO_EX(ai_HttpClient_getResponse, 0, 0, 0) + ZEND_ARG_OBJ_INFO(0, request, http\\Client\\Request, 1) ZEND_END_ARG_INFO(); static PHP_METHOD(HttpClient, getResponse) { - if (SUCCESS == zend_parse_parameters_none()) { + zval *zrequest = NULL; + + if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|O", &zrequest, php_http_client_request_get_class_entry())) { php_http_client_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); - if (obj->client->responses.tail) { - php_http_message_object_t *response_obj = *(php_http_message_object_t **) obj->client->responses.tail->data; + if (!zrequest) { + /* pop off the last respone */ + if (obj->client->responses.tail) { + php_http_message_object_t *response_obj = *(php_http_message_object_t **) obj->client->responses.tail->data; + + /* pop off and go */ + if (response_obj) { + RETVAL_OBJVAL(response_obj->zv, 1); + zend_llist_remove_tail(&obj->client->responses); + } + } + } else { + /* lookup the response with the request */ + zend_llist_element *el = NULL; + php_http_message_object_t *req_obj = zend_object_store_get_object(zrequest TSRMLS_CC); - /* pop off and go */ - if (response_obj) { - RETVAL_OBJVAL(response_obj->zv, 1); - zend_llist_remove_tail(&obj->client->responses); + for (el = obj->client->responses.head; el; el = el->next) { + php_http_message_object_t *response_obj = *(php_http_message_object_t **) el->data; + + if (response_obj->message->parent == req_obj->message) { + RETVAL_OBJVAL(response_obj->zv, 1); + break; + } } } }