+
+/* {{{ proto void HTTPi_Response::__construct(bool cache, bool gzip)
+ *
+ */
+PHP_METHOD(HTTPi_Response, __construct)
+{
+ zend_bool do_cache = 0, do_gzip = 0;
+ getObject(httpi_response_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|bb", &do_cache, &do_gzip)) {
+ // throw exception
+ return;
+ }
+
+ UPD_PROP(obj, long, cache, do_cache);
+ UPD_PROP(obj, long, gzip, do_gzip);
+}
+/* }}} */
+
+/* {{{ proto bool HTTPi_Response::setCache(bool cache)
+ *
+ */
+PHP_METHOD(HTTPi_Response, setCache)
+{
+ zend_bool do_cache = 0;
+ getObject(httpi_response_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &do_cache)) {
+ RETURN_FALSE;
+ }
+
+ UPD_PROP(obj, long, cache, do_cache);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto bool HTTPi_Response::getCache()
+ *
+ */
+PHP_METHOD(HTTPi_Response, getCache)
+{
+ zval *do_cache = NULL;
+ getObject(httpi_response_object, obj);
+
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ do_cache = GET_PROP(obj, cache);
+ RETURN_BOOL(Z_LVAL_P(do_cache));
+}
+/* }}}*/
+
+/* {{{ proto bool HTTPi_Response::setGzip(bool gzip)
+ *
+ */
+PHP_METHOD(HTTPi_Response, setGzip)
+{
+ zend_bool do_gzip = 0;
+ getObject(httpi_response_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &do_gzip)) {
+ RETURN_FALSE;
+ }
+
+ UPD_PROP(obj, long, gzip, do_gzip);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto bool HTTPi_Response::getGzip()
+ *
+ */
+PHP_METHOD(HTTPi_Response, getGzip)
+{
+ zval *do_gzip = NULL;
+ getObject(httpi_response_object, obj);
+
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ do_gzip = GET_PROP(obj, gzip);
+ RETURN_BOOL(Z_LVAL_P(do_gzip));
+}
+/* }}} */
+
+/* {{{ proto bool HTTPi_Response::setCacheControl(string control[, bool raw = false])
+ *
+ */
+PHP_METHOD(HTTPi_Response, setCacheControl)
+{
+ char *ccontrol;
+ int cc_len;
+ zend_bool raw = 0;
+ getObject(httpi_response_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &ccontrol, &cc_len, &raw)) {
+ RETURN_FALSE;
+ }
+
+ if ((!raw) && (strcmp(ccontrol, "public") && strcmp(ccontrol, "private") && strcmp(ccontrol, "no-cache"))) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cache-Control '%s' doesn't match public, private or no-cache", ccontrol);
+ RETURN_FALSE;
+ }
+
+ UPD_PROP(obj, long, raw_cache_header, raw);
+ UPD_PROP(obj, string, cacheControl, ccontrol);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto string HTTPi_Response::getCacheControl()
+ *
+ */
+PHP_METHOD(HTTPi_Response, getCacheControl)
+{
+ zval *ccontrol;
+ getObject(httpi_response_object, obj);
+
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ ccontrol = GET_PROP(obj, cacheControl);
+ RETURN_STRINGL(Z_STRVAL_P(ccontrol), Z_STRLEN_P(ccontrol), 1);
+}
+/* }}} */
+
+/* {{{ proto bool HTTPi::setContentType(string content_type)
+ *
+ */
+PHP_METHOD(HTTPi_Response, setContentType)
+{
+ char *ctype;
+ int ctype_len;
+ getObject(httpi_response_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &ctype, &ctype_len)) {
+ RETURN_FALSE;
+ }
+
+ if (!strchr(ctype, '/')) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Content type '%s' doesn't seem to contain a primary and secondary part", ctype);
+ RETURN_FALSE;
+ }
+
+ UPD_PROP(obj, string, contentType, ctype);
+ if (HTTP_G(ctype)) {
+ efree(HTTP_G(ctype));
+ }
+ HTTP_G(ctype) = estrndup(ctype, ctype_len);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto string HTTPi_Response::getContentType()
+ *
+ */
+PHP_METHOD(HTTPi_Response, getContentType)
+{
+ zval *ctype;
+ getObject(httpi_response_object, obj);
+
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ ctype = GET_PROP(obj, contentType);
+ RETURN_STRINGL(Z_STRVAL_P(ctype), Z_STRLEN_P(ctype), 1);
+}
+/* }}} */
+
+/* {{{ proto bool HTTPi_Response::setContentDisposition(string filename[, bool inline = false])
+ *
+ */
+PHP_METHOD(HTTPi_Response, setContentDisposition)
+{
+ char *file;
+ int file_len;
+ zend_bool is_inline = 0;
+ getObject(httpi_response_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &file, &file_len, &is_inline)) {
+ RETURN_FALSE;
+ }
+
+ UPD_PROP(obj, string, dispoFile, file);
+ UPD_PROP(obj, long, dispoInline, is_inline);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto array HTTPi_Response::getContentDisposition()
+ *
+ */
+PHP_METHOD(HTTPi_Response, getContentDisposition)
+{
+ zval *file;
+ zval *is_inline;
+ getObject(httpi_response_object, obj);
+
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ file = GET_PROP(obj, dispoFile);
+ is_inline = GET_PROP(obj, dispoInline);
+
+ array_init(return_value);
+ add_assoc_stringl(return_value, "filename", Z_STRVAL_P(file), Z_STRLEN_P(file), 1);
+ add_assoc_bool(return_value, "inline", Z_LVAL_P(is_inline));
+}
+/* }}} */
+
+/* {{{ proto bool HTTPi_Response::setETag(string etag)
+ *
+ */
+PHP_METHOD(HTTPi_Response, setETag)
+{
+ char *etag;
+ int etag_len;
+ getObject(httpi_response_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &etag, &etag_len)) {
+ RETURN_FALSE;
+ }
+
+ UPD_PROP(obj, string, eTag, etag);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto string HTTPi_Response::getETag()
+ *
+ */
+PHP_METHOD(HTTPi_Response, getETag)
+{
+ zval *etag;
+ getObject(httpi_response_object, obj);
+
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ etag = GET_PROP(obj, eTag);
+ RETURN_STRINGL(Z_STRVAL_P(etag), Z_STRLEN_P(etag), 1);
+}
+/* }}} */
+
+/* {{{ proto bool HTTPi_Response::setData(string data)
+ *
+ */
+PHP_METHOD(HTTPi_Response, setData)
+{
+ zval *the_data;
+ getObject(httpi_response_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &the_data)) {
+ RETURN_FALSE;
+ }
+
+ convert_to_string_ex(&the_data);
+ SET_PROP(obj, data, the_data);
+ UPD_PROP(obj, string, eTag, http_etag(Z_STRVAL_P(the_data), Z_STRLEN_P(the_data), SEND_DATA));
+ UPD_PROP(obj, long, size, Z_STRLEN_P(the_data));
+ UPD_PROP(obj, long, lastModified, time(NULL));
+ UPD_PROP(obj, long, send_mode, SEND_DATA);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto string HTTPi_Response::getData()
+ *
+ */
+PHP_METHOD(HTTPi_Response, getData)
+{
+ zval *the_data;
+ getObject(httpi_response_object, obj);
+
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ the_data = GET_PROP(obj, data);
+ RETURN_STRINGL(Z_STRVAL_P(the_data), Z_STRLEN_P(the_data), 1);
+}
+/* }}} */
+
+/* {{{ proto bool HTTPi_Response::setStream(resource stream)
+ *
+ */
+PHP_METHOD(HTTPi_Response, setStream)
+{
+ zval *the_stream;
+ php_stream *the_real_stream;
+ getObject(httpi_response_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &the_stream)) {
+ RETURN_FALSE;
+ }
+
+ php_stream_from_zval(the_real_stream, &the_stream);
+
+ SET_PROP(obj, stream, the_stream);
+ UPD_PROP(obj, string, eTag, http_etag(the_real_stream, 0, SEND_RSRC));
+ UPD_PROP(obj, long, size, HTTP_G(ssb).sb.st_size);
+ UPD_PROP(obj, long, lastModified, HTTP_G(ssb).sb.st_mtime);
+ UPD_PROP(obj, long, send_mode, SEND_RSRC);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto resource HTTPi_Response::getStream()
+ *
+ */
+PHP_METHOD(HTTPi_Response, getStream)
+{
+ zval *the_stream;
+ getObject(httpi_response_object, obj);
+
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ the_stream = GET_PROP(obj, stream);
+ RETURN_RESOURCE(Z_LVAL_P(the_stream));
+}
+/* }}} */
+
+/* {{{ proto bool HTTPi_Response::setFile(string file)
+ *
+ */
+PHP_METHOD(HTTPi_Response, setFile)
+{
+ char *the_file;
+ int file_len;
+ zval fmtime, fsize;
+ getObject(httpi_response_object, obj);
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &the_file, &file_len)) {
+ RETURN_FALSE;
+ }
+
+ php_stat(the_file, file_len, FS_SIZE, &fsize TSRMLS_CC);
+ php_stat(the_file, file_len, FS_MTIME, &fmtime TSRMLS_CC);
+
+ UPD_PROP(obj, string, file, the_file);
+ UPD_PROP(obj, long, size, Z_LVAL(fsize));
+ UPD_PROP(obj, long, lastModified, Z_LVAL(fmtime));
+ UPD_PROP(obj, long, send_mode, -1);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto string HTTPi_Response::getFile()
+ *
+ */
+PHP_METHOD(HTTPi_Response, getFile)
+{
+ zval *the_file;
+ getObject(httpi_response_object, obj);
+
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ the_file = GET_PROP(obj, file);
+ RETURN_STRINGL(Z_STRVAL_P(the_file), Z_STRLEN_P(the_file), 1);
+}
+/* }}} */
+
+/* {{{ proto int HTTPi_Response::getSize()
+ *
+ */
+PHP_METHOD(HTTPi_Response, getSize)
+{
+ zval *the_size;
+ getObject(httpi_response_object, obj);
+
+ if (ZEND_NUM_ARGS()) {
+ WRONG_PARAM_COUNT;
+ }
+
+ the_size = GET_PROP(obj, size);
+ RETURN_LONG(Z_LVAL_P(the_size));
+}