+PHP_METHOD(HttpRequest, setMethod)
+{
+ long meth;
+ getObject(http_request_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &meth)) {
+ RETURN_FALSE;
+ }
+
+ UPD_PROP(obj, long, method, meth);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto long HttpRequest::getMethod()
+ *
+ * Get the previously set request method.
+ */
+PHP_METHOD(HttpRequest, getMethod)
+{
+ NO_ARGS;
+
+ IF_RETVAL_USED {
+ zval *meth;
+ getObject(http_request_object, obj);
+
+ meth = GET_PROP(obj, method);
+ RETURN_LONG(Z_LVAL_P(meth));
+ }
+}
+/* }}} */
+
+/* {{{ proto bool HttpRequest::setContentType(string content_type)
+ *
+ * Set the content type the post request should have.
+ * Use this only if you know what you're doing.
+ */
+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;
+ }
+
+ if (!strchr(ctype, '/')) {
+ http_error_ex(E_WARNING, HTTP_E_PARAM, "Content-Type '%s' doesn't seem to contain a primary and a secondary part", ctype);
+ RETURN_FALSE;
+ }
+
+ UPD_PROP(obj, string, contentType, ctype);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto string HttpRequest::getContentType()
+ *
+ * Get the previously content type.
+ */
+PHP_METHOD(HttpRequest, getContentType)
+{
+ NO_ARGS;
+
+ IF_RETVAL_USED {
+ zval *ctype;
+ getObject(http_request_object, obj);
+
+ ctype = GET_PROP(obj, contentType);
+ RETURN_STRINGL(Z_STRVAL_P(ctype), Z_STRLEN_P(ctype), 1);
+ }
+}
+/* }}} */
+
+/* {{{ proto bool HttpRequest::setQueryData(mixed query_data)
+ *
+ * Set the URL query parameters to use.
+ * Overwrites previously set query parameters.
+ * Affects any request types.
+ */
+PHP_METHOD(HttpRequest, setQueryData)
+{
+ zval *qdata;
+ char *query_data = NULL;
+ getObject(http_request_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &qdata)) {
+ RETURN_FALSE;
+ }
+
+ if ((Z_TYPE_P(qdata) == IS_ARRAY) || (Z_TYPE_P(qdata) == IS_OBJECT)) {
+ if (SUCCESS != http_urlencode_hash(HASH_OF(qdata), &query_data)) {
+ RETURN_FALSE;
+ }
+ UPD_PROP(obj, string, queryData, query_data);
+ efree(query_data);
+ RETURN_TRUE;
+ }
+
+ convert_to_string(qdata);
+ UPD_PROP(obj, string, queryData, Z_STRVAL_P(qdata));
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto string HttpRequest::getQueryData()
+ *
+ * Get the current query data in form of an urlencoded query string.
+ */
+PHP_METHOD(HttpRequest, getQueryData)
+{
+ NO_ARGS;
+
+ IF_RETVAL_USED {
+ zval *qdata;
+ getObject(http_request_object, obj);
+
+ qdata = GET_PROP(obj, queryData);
+ RETURN_STRINGL(Z_STRVAL_P(qdata), Z_STRLEN_P(qdata), 1);
+ }
+}
+/* }}} */
+
+/* {{{ proto bool HttpRequest::addQueryData(array query_params)
+ *
+ * Add parameters to the query parameter list.
+ * Affects any request type.
+ */
+PHP_METHOD(HttpRequest, addQueryData)
+{
+ zval *qdata, *old_qdata;
+ char *query_data = NULL;
+ getObject(http_request_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &qdata)) {
+ RETURN_FALSE;
+ }
+
+ old_qdata = GET_PROP(obj, queryData);
+
+ if (SUCCESS != http_urlencode_hash_ex(HASH_OF(qdata), 1, Z_STRVAL_P(old_qdata), Z_STRLEN_P(old_qdata), &query_data, NULL)) {
+ RETURN_FALSE;
+ }
+
+ UPD_PROP(obj, string, queryData, query_data);
+ efree(query_data);
+
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto void HttpRequest::unsetQueryData()
+ *
+ * Clean the query parameters.
+ * Affects any request type.
+ */
+PHP_METHOD(HttpRequest, unsetQueryData)
+{
+ getObject(http_request_object, obj);
+
+ NO_ARGS;
+
+ UPD_PROP(obj, string, queryData, "");
+}
+/* }}} */
+
+/* {{{ proto bool HttpRequest::addPostFields(array post_data)
+ *
+ * Adds POST data entries.
+ * Affects only POST requests.
+ */
+PHP_METHOD(HttpRequest, addPostFields)
+{
+ zval *post, *post_data;
+ getObject(http_request_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &post_data)) {
+ RETURN_FALSE;
+ }
+
+ post = GET_PROP(obj, postFields);
+ array_merge(post_data, post);
+
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto bool HttpRequest::setPostFields(array post_data)
+ *
+ * Set the POST data entries.
+ * Overwrites previously set POST data.
+ * Affects only POST requests.
+ */
+PHP_METHOD(HttpRequest, setPostFields)
+{
+ zval *post, *post_data;
+ getObject(http_request_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &post_data)) {
+ RETURN_FALSE;
+ }
+
+ post = GET_PROP(obj, postFields);
+ zend_hash_clean(Z_ARRVAL_P(post));
+ array_copy(post_data, post);
+
+ RETURN_TRUE;
+}
+/* }}}*/
+
+/* {{{ proto array HttpRequest::getPostFields()
+ *
+ * Get previously set POST data.
+ */
+PHP_METHOD(HttpRequest, getPostFields)
+{
+ NO_ARGS;
+
+ IF_RETVAL_USED {
+ zval *post_data;
+ getObject(http_request_object, obj);
+
+ post_data = GET_PROP(obj, postFields);
+ array_init(return_value);
+ array_copy(post_data, return_value);
+ }
+}
+/* }}} */
+
+/* {{{ proto void HttpRequest::unsetPostFields()
+ *
+ * Clean POST data entires.
+ * Affects only POST requests.
+ */
+PHP_METHOD(HttpRequest, unsetPostFields)