X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_request_object.c;h=2ed979789b009c8a93b2c983baca769b5a50a946;hp=76ba2dd1d2eefc300562f16796701f3c7c9e1ae9;hb=34644fd4c700fb55c3a2c2ff9966d0f5e7572509;hpb=8cba9d81560b60079a53241b3f906e9dff50196e diff --git a/http_request_object.c b/http_request_object.c index 76ba2dd..2ed9797 100644 --- a/http_request_object.c +++ b/http_request_object.c @@ -778,6 +778,7 @@ PHP_METHOD(HttpRequest, setOptions) { char *key = NULL; ulong idx = 0; + HashPosition pos; zval *opts = NULL, *old_opts, **opt; getObject(http_request_object, obj); @@ -795,7 +796,7 @@ PHP_METHOD(HttpRequest, setOptions) } /* some options need extra attention -- thus cannot use array_merge() directly */ - FOREACH_KEYVAL(opts, key, idx, opt) { + FOREACH_KEYVAL(pos, opts, key, idx, opt) { if (key) { if (!strcmp(key, "headers")) { zval **headers; @@ -1664,15 +1665,17 @@ PHP_METHOD(HttpRequest, getResponseCookie) ulong idx = 0; char *key = NULL; zval **header = NULL; + HashPosition pos1; - convert_to_array_ex(headers); - FOREACH_HASH_KEYVAL(Z_ARRVAL_PP(headers), key, idx, header) { + convert_to_array(*headers); + FOREACH_HASH_KEYVAL(pos1, Z_ARRVAL_PP(headers), key, idx, header) { if (key && !strcasecmp(key, "Set-Cookie")) { /* several cookies? */ if (Z_TYPE_PP(header) == IS_ARRAY) { zval **cookie; + HashPosition pos2; - FOREACH_HASH_VAL(Z_ARRVAL_PP(header), cookie) { + FOREACH_HASH_VAL(pos2, Z_ARRVAL_PP(header), cookie) { zval *cookie_hash; MAKE_STD_ZVAL(cookie_hash); array_init(cookie_hash); @@ -1874,6 +1877,13 @@ PHP_METHOD(HttpRequest, getResponseMessage) * references the last received response. Use HttpMessage::getParentMessage() * to access the data of previously sent requests whithin this request * cycle. + * + * Note that the internal request message is immutable, that means that the + * request message received through HttpRequest::getRequestMessage() will + * always look the same for the same request, regardless of any changes you + * may have made to the returned object. + * + * Throws HttpMalformedHeadersException, HttpEncodingException. */ PHP_METHOD(HttpRequest, getRequestMessage) { @@ -1885,7 +1895,7 @@ PHP_METHOD(HttpRequest, getRequestMessage) SET_EH_THROW_HTTP(); if (msg = http_message_parse(PHPSTR_VAL(&obj->request), PHPSTR_LEN(&obj->request))) { - RETVAL_OBJVAL(http_message_object_new_ex(http_message_object_ce, msg, NULL)); + ZVAL_OBJVAL(return_value, http_message_object_new_ex(http_message_object_ce, msg, NULL)); } SET_EH_NORMAL(); } @@ -1905,7 +1915,11 @@ PHP_METHOD(HttpRequest, getRequestMessage) * The object references the last received response, use HttpMessage::getParentMessage() * to access the data of previously sent requests and received responses. * - * Throws HttpMalformedHeaderException. + * Note that the internal history is immutable, that means that any changes + * you make the the message list won't affect a history message list newly + * created by another call to HttpRequest::getHistory(). + * + * Throws HttpMalformedHeaderException, HttpEncodingException. */ PHP_METHOD(HttpRequest, getHistory) { @@ -1917,7 +1931,7 @@ PHP_METHOD(HttpRequest, getHistory) SET_EH_THROW_HTTP(); if (msg = http_message_parse(PHPSTR_VAL(&obj->history), PHPSTR_LEN(&obj->history))) { - RETVAL_OBJVAL(http_message_object_new_ex(http_message_object_ce, msg, NULL)); + ZVAL_OBJVAL(return_value, http_message_object_new_ex(http_message_object_ce, msg, NULL)); } SET_EH_NORMAL(); } @@ -1943,6 +1957,10 @@ PHP_METHOD(HttpRequest, clearHistory) * * Returns the received response as HttpMessage object. * + * NOTE: While an exception may be thrown, the transfer could have succeeded + * at least partially, so you might want to check the return values of various + * HttpRequest::getResponse*() methods. + * * Throws HttpRuntimeException, HttpRequestException, * HttpMalformedHeaderException, HttpEncodingException. *