+ NO_ARGS;
+
+ if (return_value_used) {
+ RETURN_PROP(postFields);
+ }
+}
+/* }}} */
+
+/* {{{ proto bool HttpRequest::setBody([string request_body_data])
+ Set request body to send, overwriting previously set request body. Don't forget to specify a content type. */
+PHP_METHOD(HttpRequest, setBody)
+{
+ char *raw_data = NULL;
+ int data_len = 0;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &raw_data, &data_len)) {
+ RETURN_FALSE;
+ }
+
+ if (!raw_data) {
+ raw_data = "";
+ }
+
+ UPD_STRL(requestBody, raw_data, data_len);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto bool HttpRequest::addBody(string request_body_data)
+ Add request body data, leaving previously set request body data unchanged. */
+PHP_METHOD(HttpRequest, addBody)
+{
+ char *raw_data;
+ int data_len;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &raw_data, &data_len)) {
+ RETURN_FALSE;
+ }
+
+ if (data_len) {
+ zval *data = GET_PROP(rrequestBody);
+
+ if (Z_STRLEN_P(data)) {
+ Z_STRVAL_P(data) = erealloc(Z_STRVAL_P(data), (Z_STRLEN_P(data) += data_len) + 1);
+ Z_STRVAL_P(data)[Z_STRLEN_P(data)] = '\0';
+ memcpy(Z_STRVAL_P(data) + Z_STRLEN_P(data) - data_len, raw_data, data_len);
+ } else {
+ UPD_STRL(putData, raw_data, data_len);
+ }
+ }
+
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto string HttpRequest::getBody()
+ Get previously set request body data. */
+PHP_METHOD(HttpRequest, getBody)
+{
+ NO_ARGS;
+
+ if (return_value_used) {
+ RETURN_PROP(requestBody);
+ }
+}
+/* }}} */
+
+/* {{{ proto bool HttpRequest::addPostFile(string name, string file[, string content_type = "application/x-octetstream"])
+ Add a file to the POST request, leaving previously set files unchanged. */
+PHP_METHOD(HttpRequest, addPostFile)
+{
+ zval *entry, *old_post, *new_post;
+ char *name, *file, *type = NULL;
+ int name_len, file_len, type_len = 0;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|s", &name, &name_len, &file, &file_len, &type, &type_len)) {
+ RETURN_FALSE;
+ }
+
+ if (type_len) {
+ HTTP_CHECK_CONTENT_TYPE(type, RETURN_FALSE);
+ } else {
+ type = "application/x-octetstream";
+ type_len = sizeof("application/x-octetstream") - 1;
+ }
+
+ MAKE_STD_ZVAL(entry);
+ array_init(entry);
+
+ add_assoc_stringl(entry, "name", name, name_len, 1);
+ add_assoc_stringl(entry, "type", type, type_len, 1);
+ add_assoc_stringl(entry, "file", file, file_len, 1);
+
+ MAKE_STD_ZVAL(new_post);
+ array_init(new_post);
+ old_post = GET_PROP(postFiles);
+ if (Z_TYPE_P(old_post) == IS_ARRAY) {
+ array_copy(Z_ARRVAL_P(old_post), Z_ARRVAL_P(new_post));
+ }
+ add_next_index_zval(new_post, entry);
+ SET_PROP(postFiles, new_post);
+ zval_ptr_dtor(&new_post);
+
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto bool HttpRequest::setPostFiles([array post_files])
+ Set files to post, overwriting previously set post files. */
+PHP_METHOD(HttpRequest, setPostFiles)
+{
+ zval *files = NULL, *post;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a!/", &files)) {
+ RETURN_FALSE;
+ }
+
+ MAKE_STD_ZVAL(post);
+ array_init(post);
+ if (files && (Z_TYPE_P(files) == IS_ARRAY)) {
+ array_copy(Z_ARRVAL_P(files), Z_ARRVAL_P(post));
+ }
+ SET_PROP(postFiles, post);
+ zval_ptr_dtor(&post);
+
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto array HttpRequest::getPostFiles()
+ Get all previously added POST files. */
+PHP_METHOD(HttpRequest, getPostFiles)
+{
+ NO_ARGS;
+
+ if (return_value_used) {
+ RETURN_PROP(postFiles);
+ }
+}
+/* }}} */
+
+/* {{{ proto bool HttpRequest::setPutFile([string file])
+ Set file to put. Affects only PUT requests. */
+PHP_METHOD(HttpRequest, setPutFile)
+{
+ char *file = "";
+ int file_len = 0;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &file, &file_len)) {
+ RETURN_FALSE;
+ }
+
+ UPD_STRL(putFile, file, file_len);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto string HttpRequest::getPutFile()
+ Get previously set put file. */
+PHP_METHOD(HttpRequest, getPutFile)
+{
+ NO_ARGS;
+
+ if (return_value_used) {
+ RETURN_PROP(putFile);
+ }
+}
+/* }}} */
+
+/* {{{ proto bool HttpRequest::setPutData([string put_data])
+ Set PUT data to send, overwriting previously set PUT data. */
+PHP_METHOD(HttpRequest, setPutData)
+{
+ char *put_data = NULL;
+ int data_len = 0;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &put_data, &data_len)) {
+ RETURN_FALSE;
+ }
+
+ if (!put_data) {
+ put_data = "";
+ }
+
+ UPD_STRL(putData, put_data, data_len);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto bool HttpRequest::addPutData(string put_data)
+ Add PUT data, leaving previously set PUT data unchanged. */
+PHP_METHOD(HttpRequest, addPutData)
+{
+ char *put_data;
+ int data_len;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &put_data, &data_len)) {
+ RETURN_FALSE;
+ }
+
+ if (data_len) {
+ zval *data = GET_PROP(putData);
+
+ if (Z_STRLEN_P(data)) {
+ Z_STRVAL_P(data) = erealloc(Z_STRVAL_P(data), (Z_STRLEN_P(data) += data_len) + 1);
+ Z_STRVAL_P(data)[Z_STRLEN_P(data)] = '\0';
+ memcpy(Z_STRVAL_P(data) + Z_STRLEN_P(data) - data_len, put_data, data_len);
+ } else {
+ UPD_STRL(putData, put_data, data_len);
+ }
+ }
+
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto string HttpRequest::getPutData()
+ Get previously set PUT data. */
+PHP_METHOD(HttpRequest, getPutData)
+{
+ NO_ARGS;
+
+ if (return_value_used) {
+ RETURN_PROP(putData);
+ }
+}
+/* }}} */