-/* {{{ proto bool HttpResponse::setCache(bool cache)
- *
- * Whether it sould be attempted to cache the entitity.
- * This will result in necessary caching headers and checks of clients
- * "If-Modified-Since" and "If-None-Match" headers. If one of those headers
- * matches a "304 Not Modified" status code will be issued.
- *
- * NOTE: If you're using sessions, be shure that you set session.cache_limiter
- * to something more appropriate than "no-cache"!
- */
+/* {{{ proto static bool HttpResponse::setHeader(string name[, mixed value[, bool replace = true]])
+ Send an HTTP header. */
+PHP_METHOD(HttpResponse, setHeader)
+{
+ zend_bool replace = 1;
+ char *name;
+ int name_len = 0;
+ zval *value = NULL;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z/!b", &name, &name_len, &value, &replace)) {
+ RETURN_FALSE;
+ }
+ if (SG(headers_sent)) {
+ http_error(HE_WARNING, HTTP_E_HEADER, "Cannot add another header when headers have already been sent");
+ RETURN_FALSE;
+ }
+ if (!name_len) {
+ http_error(HE_WARNING, HTTP_E_HEADER, "Cannot send anonymous headers");
+ RETURN_FALSE;
+ }
+ http_send_header_zval_ex(name, name_len, &value, replace);
+ RETURN_TRUE;
+}
+/* }}} */
+
+/* {{{ proto static mixed HttpResponse::getHeader([string name])
+ Get header(s) about to be sent. */
+PHP_METHOD(HttpResponse, getHeader)
+{
+ char *name = NULL;
+ int name_len = 0;
+ phpstr headers;
+
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len)) {
+ RETURN_FALSE;
+ }
+
+ phpstr_init(&headers);
+ zend_llist_apply_with_argument(&SG(sapi_headers).headers, http_grab_response_headers, &headers TSRMLS_CC);
+ phpstr_fix(&headers);
+
+ if (name && name_len) {
+ zval **header;
+ HashTable headers_ht;
+
+ zend_hash_init(&headers_ht, sizeof(zval *), NULL, ZVAL_PTR_DTOR, 0);
+ if ( (SUCCESS == http_parse_headers_ex(PHPSTR_VAL(&headers), &headers_ht, 1)) &&
+ (SUCCESS == zend_hash_find(&headers_ht, name, name_len + 1, (void *) &header))) {
+ RETVAL_ZVAL(*header, 1, 0);
+ } else {
+ RETVAL_NULL();
+ }
+ zend_hash_destroy(&headers_ht);
+ } else {
+ array_init(return_value);
+ http_parse_headers_ex(PHPSTR_VAL(&headers), Z_ARRVAL_P(return_value), 1);
+ }
+
+ phpstr_dtor(&headers);
+}
+/* }}} */
+
+/* {{{ proto static bool HttpResponse::setCache(bool cache)
+ Whether it should be attempted to cache the entity. */