X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_request_object.c;h=bb3ebf46527e02a498cba94567e907bdb9209e24;hp=80d802f81ebcdc7cc4e1e1cb63fdce821461e2e2;hb=1a0dbb96fbe46a2edec1c813798cef7b0898eebe;hpb=4fcbd8e8ae31611c5197ff2369673b5939fc2b80 diff --git a/http_request_object.c b/http_request_object.c index 80d802f..bb3ebf4 100644 --- a/http_request_object.c +++ b/http_request_object.c @@ -28,183 +28,184 @@ #include "php_http_request_pool_api.h" #include "php_http_url_api.h" -#define HTTP_BEGIN_ARGS(method, ret_ref, req_args) HTTP_BEGIN_ARGS_EX(HttpRequest, method, ret_ref, req_args) -#define HTTP_EMPTY_ARGS(method, ret_ref) HTTP_EMPTY_ARGS_EX(HttpRequest, method, ret_ref) -#define HTTP_REQUEST_ME(method, visibility) PHP_ME(HttpRequest, method, HTTP_ARGS(HttpRequest, method), visibility) -#define HTTP_REQUEST_ALIAS(method, func) HTTP_STATIC_ME_ALIAS(method, func, HTTP_ARGS(HttpRequest, method)) +#define HTTP_BEGIN_ARGS(method, req_args) HTTP_BEGIN_ARGS_EX(HttpRequest, method, 0, req_args) +#define HTTP_EMPTY_ARGS(method) HTTP_EMPTY_ARGS_EX(HttpRequest, method, 0) +#define HTTP_REQUEST_ME(method, visibility) PHP_ME(HttpRequest, method, HTTP_ARGS(HttpRequest, method), visibility) +#define HTTP_REQUEST_ALIAS(method, func) HTTP_STATIC_ME_ALIAS(method, func, HTTP_ARGS(HttpRequest, method)) -HTTP_BEGIN_ARGS(__construct, 0, 0) +HTTP_BEGIN_ARGS(__construct, 0) HTTP_ARG_VAL(url, 0) HTTP_ARG_VAL(method, 0) HTTP_ARG_VAL(options, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getOptions, 0); -HTTP_BEGIN_ARGS(setOptions, 0, 0) +HTTP_EMPTY_ARGS(getOptions); +HTTP_BEGIN_ARGS(setOptions, 0) HTTP_ARG_VAL(options, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getSslOptions, 0); -HTTP_BEGIN_ARGS(setSslOptions, 0, 0) +HTTP_EMPTY_ARGS(getSslOptions); +HTTP_BEGIN_ARGS(setSslOptions, 0) HTTP_ARG_VAL(ssl_options, 0) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(addSslOptions, 0, 0) +HTTP_BEGIN_ARGS(addSslOptions, 0) HTTP_ARG_VAL(ssl_optins, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getHeaders, 0); -HTTP_BEGIN_ARGS(setHeaders, 0, 0) +HTTP_EMPTY_ARGS(getHeaders); +HTTP_BEGIN_ARGS(setHeaders, 0) HTTP_ARG_VAL(headers, 0) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(addHeaders, 0, 1) +HTTP_BEGIN_ARGS(addHeaders, 1) HTTP_ARG_VAL(headers, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getCookies, 0); -HTTP_BEGIN_ARGS(setCookies, 0, 0) +HTTP_EMPTY_ARGS(getCookies); +HTTP_BEGIN_ARGS(setCookies, 0) HTTP_ARG_VAL(cookies, 0) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(addCookies, 0, 1) +HTTP_BEGIN_ARGS(addCookies, 1) HTTP_ARG_VAL(cookies, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getUrl, 0); -HTTP_BEGIN_ARGS(setUrl, 0, 1) +HTTP_EMPTY_ARGS(getUrl); +HTTP_BEGIN_ARGS(setUrl, 1) HTTP_ARG_VAL(url, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getMethod, 0); -HTTP_BEGIN_ARGS(setMethod, 0, 1) +HTTP_EMPTY_ARGS(getMethod); +HTTP_BEGIN_ARGS(setMethod, 1) HTTP_ARG_VAL(request_method, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getContentType, 0); -HTTP_BEGIN_ARGS(setContentType, 0, 1) +HTTP_EMPTY_ARGS(getContentType); +HTTP_BEGIN_ARGS(setContentType, 1) HTTP_ARG_VAL(content_type, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getQueryData, 0); -HTTP_BEGIN_ARGS(setQueryData, 0, 0) +HTTP_EMPTY_ARGS(getQueryData); +HTTP_BEGIN_ARGS(setQueryData, 0) HTTP_ARG_VAL(query_data, 0) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(addQueryData, 0, 1) +HTTP_BEGIN_ARGS(addQueryData, 1) HTTP_ARG_VAL(query_data, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getPostFields, 0); -HTTP_BEGIN_ARGS(setPostFields, 0, 0) +HTTP_EMPTY_ARGS(getPostFields); +HTTP_BEGIN_ARGS(setPostFields, 0) HTTP_ARG_VAL(post_fields, 0) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(addPostFields, 0, 1) +HTTP_BEGIN_ARGS(addPostFields, 1) HTTP_ARG_VAL(post_fields, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getPostFiles, 0); -HTTP_BEGIN_ARGS(setPostFiles, 0, 0) +HTTP_EMPTY_ARGS(getPostFiles); +HTTP_BEGIN_ARGS(setPostFiles, 0) HTTP_ARG_VAL(post_files, 0) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(addPostFile, 0, 2) +HTTP_BEGIN_ARGS(addPostFile, 2) HTTP_ARG_VAL(formname, 0) HTTP_ARG_VAL(filename, 0) HTTP_ARG_VAL(content_type, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getRawPostData, 0); -HTTP_BEGIN_ARGS(setRawPostData, 0, 0) +HTTP_EMPTY_ARGS(getRawPostData); +HTTP_BEGIN_ARGS(setRawPostData, 0) HTTP_ARG_VAL(raw_post_data, 0) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(addRawPostData, 0, 1) +HTTP_BEGIN_ARGS(addRawPostData, 1) HTTP_ARG_VAL(raw_post_data, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getPutFile, 0); -HTTP_BEGIN_ARGS(setPutFile, 0, 0) +HTTP_EMPTY_ARGS(getPutFile); +HTTP_BEGIN_ARGS(setPutFile, 0) HTTP_ARG_VAL(filename, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getResponseData, 0); -HTTP_BEGIN_ARGS(getResponseHeader, 0, 0) +HTTP_EMPTY_ARGS(getResponseData); +HTTP_BEGIN_ARGS(getResponseHeader, 0) HTTP_ARG_VAL(name, 0) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(getResponseCookie, 0, 0) +HTTP_BEGIN_ARGS(getResponseCookie, 0) HTTP_ARG_VAL(name, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getResponseBody, 0); -HTTP_EMPTY_ARGS(getResponseCode, 0); -HTTP_BEGIN_ARGS(getResponseInfo, 0, 0) +HTTP_EMPTY_ARGS(getResponseBody); +HTTP_EMPTY_ARGS(getResponseCode); +HTTP_EMPTY_ARGS(getResponseStatus); +HTTP_BEGIN_ARGS(getResponseInfo, 0) HTTP_ARG_VAL(name, 0) HTTP_END_ARGS; -HTTP_EMPTY_ARGS(getResponseMessage, 0); -HTTP_EMPTY_ARGS(getRawResponseMessage, 0); -HTTP_EMPTY_ARGS(getRequestMessage, 0); -HTTP_EMPTY_ARGS(getRawRequestMessage, 0); -HTTP_EMPTY_ARGS(getHistory, 0); -HTTP_EMPTY_ARGS(clearHistory, 0); -HTTP_EMPTY_ARGS(send, 0); +HTTP_EMPTY_ARGS(getResponseMessage); +HTTP_EMPTY_ARGS(getRawResponseMessage); +HTTP_EMPTY_ARGS(getRequestMessage); +HTTP_EMPTY_ARGS(getRawRequestMessage); +HTTP_EMPTY_ARGS(getHistory); +HTTP_EMPTY_ARGS(clearHistory); +HTTP_EMPTY_ARGS(send); -HTTP_BEGIN_ARGS(get, 0, 1) +HTTP_BEGIN_ARGS(get, 1) HTTP_ARG_VAL(url, 0) HTTP_ARG_VAL(options, 0) HTTP_ARG_VAL(info, 1) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(head, 0, 1) +HTTP_BEGIN_ARGS(head, 1) HTTP_ARG_VAL(url, 0) HTTP_ARG_VAL(options, 0) HTTP_ARG_VAL(info, 1) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(postData, 0, 2) +HTTP_BEGIN_ARGS(postData, 2) HTTP_ARG_VAL(url, 0) HTTP_ARG_VAL(data, 0) HTTP_ARG_VAL(options, 0) HTTP_ARG_VAL(info, 1) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(postFields, 0, 2) +HTTP_BEGIN_ARGS(postFields, 2) HTTP_ARG_VAL(url, 0) HTTP_ARG_VAL(data, 0) HTTP_ARG_VAL(options, 0) HTTP_ARG_VAL(info, 1) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(putFile, 0, 2) +HTTP_BEGIN_ARGS(putFile, 2) HTTP_ARG_VAL(url, 0) HTTP_ARG_VAL(file, 0) HTTP_ARG_VAL(options, 0) HTTP_ARG_VAL(info, 1) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(putStream, 0, 2) +HTTP_BEGIN_ARGS(putStream, 2) HTTP_ARG_VAL(url, 0) HTTP_ARG_VAL(stream, 0) HTTP_ARG_VAL(options, 0) HTTP_ARG_VAL(info, 1) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(methodRegister, 0, 1) +HTTP_BEGIN_ARGS(methodRegister, 1) HTTP_ARG_VAL(method_name, 0) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(methodUnregister, 0, 1) +HTTP_BEGIN_ARGS(methodUnregister, 1) HTTP_ARG_VAL(method, 0) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(methodName, 0, 1) +HTTP_BEGIN_ARGS(methodName, 1) HTTP_ARG_VAL(method_id, 0) HTTP_END_ARGS; -HTTP_BEGIN_ARGS(methodExists, 0, 1) +HTTP_BEGIN_ARGS(methodExists, 1) HTTP_ARG_VAL(method, 0) HTTP_END_ARGS; @@ -264,6 +265,7 @@ zend_function_entry http_request_object_fe[] = { HTTP_REQUEST_ME(getResponseHeader, ZEND_ACC_PUBLIC) HTTP_REQUEST_ME(getResponseCookie, ZEND_ACC_PUBLIC) HTTP_REQUEST_ME(getResponseCode, ZEND_ACC_PUBLIC) + HTTP_REQUEST_ME(getResponseStatus, ZEND_ACC_PUBLIC) HTTP_REQUEST_ME(getResponseBody, ZEND_ACC_PUBLIC) HTTP_REQUEST_ME(getResponseInfo, ZEND_ACC_PUBLIC) HTTP_REQUEST_ME(getResponseMessage, ZEND_ACC_PUBLIC) @@ -357,6 +359,7 @@ static inline void _http_request_object_declare_default_properties(TSRMLS_D) DCL_PROP_N(PRIVATE, responseData); DCL_PROP_N(PRIVATE, responseMessage); DCL_PROP(PRIVATE, long, responseCode, 0); + DCL_PROP(PRIVATE, string, responseStatus, ""); DCL_PROP(PRIVATE, long, method, HTTP_GET); DCL_PROP(PRIVATE, string, url, ""); DCL_PROP(PRIVATE, string, contentType, ""); @@ -590,6 +593,7 @@ STATUS _http_request_object_responsehandler(http_request_object *obj, zval *this } UPD_PROP(long, responseCode, msg->http.info.response.code); + UPD_PROP(string, responseStatus, msg->http.info.response.status); MAKE_STD_ZVAL(resp); array_init(resp); @@ -603,7 +607,7 @@ STATUS _http_request_object_responsehandler(http_request_object *obj, zval *this zval_ptr_dtor(&resp); MAKE_STD_ZVAL(message); - ZVAL_OBJVAL(message, http_message_object_new_ex(http_message_object_ce, msg, NULL)); + ZVAL_OBJVAL(message, http_message_object_new_ex(http_message_object_ce, msg, NULL), 0); SET_PROP(responseMessage, message); zval_ptr_dtor(&message); @@ -687,7 +691,7 @@ static inline void _http_request_get_options_subr(INTERNAL_FUNCTION_PARAMETERS, * Instantiate a new HttpRequest object. * * Accepts a string as optional parameter containing the target request url. - * Additianally accepts an optional int parameter specifying the request method + * Additionally accepts an optional int parameter specifying the request method * to use and an associative array as optional third parameter which will be * passed to HttpRequest::setOptions(). * @@ -720,9 +724,9 @@ PHP_METHOD(HttpRequest, __construct) * * Set the request options to use. See http_get() for a full list of available options. * - * Accepts an array as optional parameters, wich values will overwrite the - * currently set request options. If the parameter is empty or mitted, - * the optoions of the HttpRequest object will be reset. + * Accepts an array as optional parameters, which values will overwrite the + * currently set request options. If the parameter is empty or omitted, + * the options of the HttpRequest object will be reset. * * Returns TRUE on success, or FALSE on failure. */ @@ -844,7 +848,7 @@ PHP_METHOD(HttpRequest, getSslOptions) * * Add request header name/value pairs. * - * Expects an ssociative array as parameter containing additional header + * Expects an associative array as parameter containing additional header * name/value pairs. * * Returns TRUE on success, or FALSE on failure. @@ -1013,7 +1017,6 @@ PHP_METHOD(HttpRequest, setContentType) { char *ctype; int ct_len; - getObject(http_request_object, obj); if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &ctype, &ct_len)) { RETURN_FALSE; @@ -1055,7 +1058,6 @@ PHP_METHOD(HttpRequest, getContentType) PHP_METHOD(HttpRequest, setQueryData) { zval *qdata = NULL; - getObject(http_request_object, obj); if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z!", &qdata)) { RETURN_FALSE; @@ -1293,12 +1295,12 @@ PHP_METHOD(HttpRequest, getRawPostData) /* {{{ proto bool HttpRequest::addPostFile(string name, string file[, string content_type = "application/x-octetstream"]) * - * Add a file to the POST request, leaving prefiously set files unchanged. + * Add a file to the POST request, leaving previously set files unchanged. * Affects only POST and custom requests. Cannot be used with raw post data. * * Expects a string parameter containing the form element name, and a string * paremeter containing the path to the file which should be uploaded. - * Additionally accepts an optional string parameter which chould contain + * Additionally accepts an optional string parameter which should contain * the content type of the file. * * Returns TRUE on success, or FALSE if the content type seems not to contain a @@ -1433,7 +1435,7 @@ PHP_METHOD(HttpRequest, getPutFile) * Get all response data after the request has been sent. * * Returns an associative array with the key "headers" containing an associative - * array holding all response headers, as well as the ley "body" containing a + * array holding all response headers, as well as the key "body" containing a * string with the response body. * * If redirects were allowed and several responses were received, the data @@ -1457,7 +1459,7 @@ PHP_METHOD(HttpRequest, getResponseData) * If the parameter is empty or omitted all response headers will be returned. * * Returns either a string with the value of the header matching name if requested, - * FALSE on failure, or an associative array containing all reponse headers. + * FALSE on failure, or an associative array containing all response headers. * * If redirects were allowed and several responses were received, the data * references the last received response. @@ -1643,6 +1645,22 @@ PHP_METHOD(HttpRequest, getResponseCode) } /* }}} */ +/* {{{ proto string HttpRequest::getResponseStatus() + * + * Get the response status (i.e. the string after the response code) after the message has been sent. + * + * Returns a string containing the response status text. + */ +PHP_METHOD(HttpRequest, getResponseStatus) +{ + NO_ARGS; + + IF_RETVAL_USED { + RETURN_PROP(responseStatus); + } +} +/* }}} */ + /* {{{ proto mixed HttpRequest::getResponseInfo([string name]) * * Get response info after the request has been sent. @@ -1698,7 +1716,7 @@ PHP_METHOD(HttpRequest, getResponseInfo) * * If redirects were allowed and several responses were received, the data * references the last received response. Use HttpMessage::getParentMessage() - * to access the data of previously received responses whithin this request + * to access the data of previously received responses within this request * cycle. * * Throws HttpException. @@ -1713,7 +1731,7 @@ PHP_METHOD(HttpRequest, getResponseMessage) SET_EH_THROW_HTTP(); message = GET_PROP(responseMessage); if (Z_TYPE_P(message) == IS_OBJECT) { - RETVAL_OBJECT(message); + RETVAL_OBJECT(message, 1); } else { RETVAL_NULL(); } @@ -1730,7 +1748,7 @@ PHP_METHOD(HttpRequest, getResponseMessage) * * If redirects were allowed and several responses were received, the data * references the last received response. Use HttpMessage::getParentMessage() - * to access the data of previously sent requests whithin this request + * to access the data of previously sent requests within this request * cycle. * * Note that the internal request message is immutable, that means that the @@ -1750,7 +1768,7 @@ PHP_METHOD(HttpRequest, getRequestMessage) SET_EH_THROW_HTTP(); if ((msg = http_message_parse(PHPSTR_VAL(&obj->request->conv.request), PHPSTR_LEN(&obj->request->conv.request)))) { - ZVAL_OBJVAL(return_value, http_message_object_new_ex(http_message_object_ce, msg, NULL)); + RETVAL_OBJVAL(http_message_object_new_ex(http_message_object_ce, msg, NULL), 0); } SET_EH_NORMAL(); } @@ -1800,7 +1818,7 @@ PHP_METHOD(HttpRequest, getRawResponseMessage) * Get all sent requests and received responses as an HttpMessage object. * * If you don't want to record history at all, set the instance variable - * HttpRequest::$recoedHistory to FALSE. + * HttpRequest::$recordHistory to FALSE. * * Returns an HttpMessage object representing the complete request/response * history. @@ -1824,7 +1842,7 @@ PHP_METHOD(HttpRequest, getHistory) SET_EH_THROW_HTTP(); if ((msg = http_message_parse(PHPSTR_VAL(&obj->history), PHPSTR_LEN(&obj->history)))) { - ZVAL_OBJVAL(return_value, http_message_object_new_ex(http_message_object_ce, msg, NULL)); + RETVAL_OBJVAL(http_message_object_new_ex(http_message_object_ce, msg, NULL), 0); } SET_EH_NORMAL(); } @@ -1904,7 +1922,7 @@ PHP_METHOD(HttpRequest, send) } else if (SUCCESS == http_request_object_requesthandler(obj, getThis())) { http_request_exec(obj->request); if (SUCCESS == http_request_object_responsehandler(obj, getThis())) { - RETVAL_OBJECT(GET_PROP(responseMessage)); + RETVAL_OBJECT(GET_PROP(responseMessage), 1); } }