+ IF_RETVAL_USED {
+ zval *etag = GET_STATIC_PROP(eTag);
+ RETURN_STRINGL(Z_STRVAL_P(etag), Z_STRLEN_P(etag), 1);
+ }
+}
+/* }}} */
+
+/* {{{ proto void HttpResponse::setThrottleDelay(double seconds)
+ *
+ */
+PHP_METHOD(HttpResponse, setThrottleDelay)
+{
+ double seconds;
+
+ if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &seconds)) {
+ ZVAL_DOUBLE(GET_STATIC_PROP(throttleDelay), seconds);
+ }
+}
+/* }}} */
+
+/* {{{ proto double HttpResponse::getThrottleDelay()
+ *
+ */
+PHP_METHOD(HttpResponse, getThrottleDelay)
+{
+ NO_ARGS;
+
+ IF_RETVAL_USED {
+ RETURN_DOUBLE(Z_DVAL_P(GET_STATIC_PROP(throttleDelay)));
+ }
+}
+/* }}} */
+
+/* {{{ proto void HttpResponse::setBufferSize(long bytes)
+ *
+ */
+PHP_METHOD(HttpResponse, setBufferSize)
+{
+ long bytes;
+
+ if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &bytes)) {
+ ZVAL_LONG(GET_STATIC_PROP(bufferSize), bytes);
+ }
+}
+/* }}} */
+
+/* {{{ proto long HttpResponse::getBufferSize()
+ *
+ */
+PHP_METHOD(HttpResponse, getBufferSize)
+{
+ NO_ARGS;
+
+ IF_RETVAL_USED {
+ RETURN_LONG(Z_LVAL_P(GET_STATIC_PROP(bufferSize)));
+ }
+}
+/* }}} */
+
+/* {{{ proto bool HttpResponse::setData(string data)
+ *
+ * Set the data to be sent.
+ */
+PHP_METHOD(HttpResponse, setData)
+{
+ zval *the_data, **data;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &the_data)) {
+ RETURN_FALSE;
+ }
+ convert_to_string_ex(&the_data);
+
+ USE_STATIC_PROP();
+ SET_STATIC_PROP(data, the_data);
+ ZVAL_LONG(GET_STATIC_PROP(lastModified), http_last_modified(the_data, SEND_DATA));
+ ZVAL_LONG(GET_STATIC_PROP(mode), SEND_DATA);
+ if (!Z_STRLEN_P(GET_STATIC_PROP(eTag))) {
+ SET_STATIC_PROP_STRING(eTag, http_etag(Z_STRVAL_P(the_data), Z_STRLEN_P(the_data), SEND_DATA), 0);
+ }
+
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto string HttpResponse::getData()
+ *
+ * Get the previously set data to be sent.
+ */
+PHP_METHOD(HttpResponse, getData)
+{
+ NO_ARGS;
+
+ IF_RETVAL_USED {
+ zval *the_data = GET_STATIC_PROP(data);
+ RETURN_STRINGL(Z_STRVAL_P(the_data), Z_STRLEN_P(the_data), 1);
+ }
+}
+/* }}} */
+
+/* {{{ proto bool HttpResponse::setStream(resource stream)
+ *
+ * Set the resource to be sent.
+ */
+PHP_METHOD(HttpResponse, setStream)
+{
+ zval *the_stream;
+ php_stream *the_real_stream;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &the_stream)) {
+ RETURN_FALSE;
+ }
+ zend_list_addref(Z_LVAL_P(the_stream));
+ php_stream_from_zval(the_real_stream, &the_stream);
+
+ USE_STATIC_PROP();
+ ZVAL_LONG(GET_STATIC_PROP(stream), Z_LVAL_P(the_stream));
+ ZVAL_LONG(GET_STATIC_PROP(lastModified), http_last_modified(the_real_stream, SEND_RSRC));
+ ZVAL_LONG(GET_STATIC_PROP(mode), SEND_RSRC);
+ if (!Z_STRLEN_P(GET_STATIC_PROP(eTag))) {
+ SET_STATIC_PROP_STRING(eTag, http_etag(the_real_stream, 0, SEND_RSRC), 0);
+ }
+
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto resource HttpResponse::getStream()
+ *
+ * Get the previously set resource to be sent.
+ */
+PHP_METHOD(HttpResponse, getStream)
+{
+ NO_ARGS;
+
+ IF_RETVAL_USED {
+ RETURN_RESOURCE(Z_LVAL_P(GET_STATIC_PROP(stream)));
+ }
+}
+/* }}} */
+
+/* {{{ proto bool HttpResponse::setFile(string file)
+ *
+ * Set the file to be sent.
+ */
+PHP_METHOD(HttpResponse, setFile)
+{
+ zval *the_file;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &the_file)) {
+ RETURN_FALSE;
+ }
+
+ convert_to_string_ex(&the_file);
+ USE_STATIC_PROP();
+ SET_STATIC_PROP(file, the_file);
+ ZVAL_LONG(GET_STATIC_PROP(lastModified), http_last_modified(the_file, -1));
+ ZVAL_LONG(GET_STATIC_PROP(mode), -1);
+ if (!Z_STRLEN_P(GET_STATIC_PROP(eTag))) {
+ SET_STATIC_PROP_STRING(eTag, http_etag(the_file, 0, -1), 0);