#define UPD_STATIC_STRL(n, v, l) UPD_STATIC_STRL_EX(http_response_object_ce, n, v, l)
#define HTTP_BEGIN_ARGS(method, req_args) HTTP_BEGIN_ARGS_EX(HttpResponse, method, 0, req_args)
-#define HTTP_EMPTY_ARGS(method, ret_ref) HTTP_EMPTY_ARGS_EX(HttpResponse, method, ret_ref)
+#define HTTP_EMPTY_ARGS(method) HTTP_EMPTY_ARGS_EX(HttpResponse, method, 0)
#define HTTP_RESPONSE_ME(method, visibility) PHP_ME(HttpResponse, method, HTTP_ARGS(HttpResponse, method), visibility|ZEND_ACC_STATIC)
#define HTTP_RESPONSE_ALIAS(method, func) HTTP_STATIC_ME_ALIAS(method, func, HTTP_ARGS(HttpResponse, method))
HTTP_ARG_VAL(name, 0)
HTTP_END_ARGS;
-HTTP_EMPTY_ARGS(getETag, 0);
+HTTP_EMPTY_ARGS(getETag);
HTTP_BEGIN_ARGS(setETag, 1)
HTTP_ARG_VAL(etag, 0)
HTTP_END_ARGS;
-HTTP_EMPTY_ARGS(getLastModified, 0);
+HTTP_EMPTY_ARGS(getLastModified);
HTTP_BEGIN_ARGS(setLastModified, 1)
HTTP_ARG_VAL(timestamp, 0)
HTTP_END_ARGS;
-HTTP_EMPTY_ARGS(getCache, 0);
+HTTP_EMPTY_ARGS(getCache);
HTTP_BEGIN_ARGS(setCache, 1)
HTTP_ARG_VAL(cache, 0)
HTTP_END_ARGS;
-HTTP_EMPTY_ARGS(getGzip, 0);
+HTTP_EMPTY_ARGS(getGzip);
HTTP_BEGIN_ARGS(setGzip, 1)
HTTP_ARG_VAL(gzip, 0)
HTTP_END_ARGS;
-HTTP_EMPTY_ARGS(getCacheControl, 0);
+HTTP_EMPTY_ARGS(getCacheControl);
HTTP_BEGIN_ARGS(setCacheControl, 1)
HTTP_ARG_VAL(cache_control, 0)
HTTP_ARG_VAL(max_age, 0)
+ HTTP_ARG_VAL(must_revalidate, 0)
HTTP_END_ARGS;
-HTTP_EMPTY_ARGS(getContentType, 0);
+HTTP_EMPTY_ARGS(getContentType);
HTTP_BEGIN_ARGS(setContentType, 1)
HTTP_ARG_VAL(content_type, 0)
HTTP_END_ARGS;
HTTP_ARG_VAL(magic_mode, 0)
HTTP_END_ARGS;
-HTTP_EMPTY_ARGS(getContentDisposition, 0);
+HTTP_EMPTY_ARGS(getContentDisposition);
HTTP_BEGIN_ARGS(setContentDisposition, 1)
HTTP_ARG_VAL(filename, 0)
HTTP_ARG_VAL(send_inline, 0)
HTTP_END_ARGS;
-HTTP_EMPTY_ARGS(getThrottleDelay, 0);
+HTTP_EMPTY_ARGS(getThrottleDelay);
HTTP_BEGIN_ARGS(setThrottleDelay, 1)
HTTP_ARG_VAL(seconds, 0)
HTTP_END_ARGS;
-HTTP_EMPTY_ARGS(getBufferSize, 0);
+HTTP_EMPTY_ARGS(getBufferSize);
HTTP_BEGIN_ARGS(setBufferSize, 1)
HTTP_ARG_VAL(bytes, 0)
HTTP_END_ARGS;
-HTTP_EMPTY_ARGS(getData, 0);
+HTTP_EMPTY_ARGS(getData);
HTTP_BEGIN_ARGS(setData, 1)
HTTP_ARG_VAL(data, 0)
HTTP_END_ARGS;
-HTTP_EMPTY_ARGS(getStream, 0);
+HTTP_EMPTY_ARGS(getStream);
HTTP_BEGIN_ARGS(setStream, 1)
HTTP_ARG_VAL(stream, 0)
HTTP_END_ARGS;
-HTTP_EMPTY_ARGS(getFile, 0);
+HTTP_EMPTY_ARGS(getFile);
HTTP_BEGIN_ARGS(setFile, 1)
HTTP_ARG_VAL(filepath, 0)
HTTP_END_ARGS;
HTTP_ARG_VAL(clean_ob, 0)
HTTP_END_ARGS;
-HTTP_EMPTY_ARGS(capture, 0);
+HTTP_EMPTY_ARGS(capture);
HTTP_BEGIN_ARGS(redirect, 0)
HTTP_ARG_VAL(url, 0)
HTTP_ARG_VAL(code, 0)
HTTP_END_ARGS;
-HTTP_EMPTY_ARGS(getRequestHeaders, 0);
-HTTP_EMPTY_ARGS(getRequestBody, 0);
+HTTP_EMPTY_ARGS(getRequestHeaders);
+HTTP_EMPTY_ARGS(getRequestBody);
#define http_response_object_declare_default_properties() _http_response_object_declare_default_properties(TSRMLS_C)
static inline void _http_response_object_declare_default_properties(TSRMLS_D);
}
/* }}} */
-/* {{{ proto static bool HttpResponse::setCacheControl(string control[, int max_age = 0])
+/* {{{ proto static bool HttpResponse::setCacheControl(string control[, int max_age = 0[, bool must_revalidate = true]])
*
* Set a custom cache-control header, usually being "private" or "public";
* The max_age parameter controls how long the cache entry is valid on the client side.
*
* Expects a string parameter containing the primary cache control setting.
* Additionally accepts an int parameter specifying the max-age setting.
+ * Accepts an optional third bool parameter indicating whether the cache
+ * must be revalidated every request.
*
* Returns TRUE on success, or FALSE if control does not match one of
* "public" , "private" or "no-cache".
char *ccontrol, *cctl;
int cc_len;
long max_age = 0;
+ zend_bool must_revalidate = 1;
- if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &ccontrol, &cc_len, &max_age)) {
+ if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lb", &ccontrol, &cc_len, &max_age, &must_revalidate)) {
RETURN_FALSE;
}
http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "Cache-Control '%s' doesn't match public, private or no-cache", ccontrol);
RETURN_FALSE;
} else {
- size_t cctl_len = spprintf(&cctl, 0, "%s, must-revalidate, max-age=%ld", ccontrol, max_age);
+ size_t cctl_len = spprintf(&cctl, 0, "%s,%s max-age=%ld", ccontrol, must_revalidate?" must-revalidate,":"", max_age);
RETVAL_SUCCESS(UPD_STATIC_STRL(cacheControl, cctl, cctl_len));
efree(cctl);
}
*/
PHP_METHOD(HttpResponse, guessContentType)
{
+#ifdef HTTP_HAVE_MAGIC
char *magic_file, *ct = NULL;
int magic_file_len;
- long magic_mode = 0;
+ long magic_mode = MAGIC_MIME;
RETVAL_FALSE;
-
-#ifdef HTTP_HAVE_MAGIC
- magic_mode = MAGIC_MIME;
-
SET_EH_THROW_HTTP();
if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &magic_file, &magic_file_len, &magic_mode)) {
switch (Z_LVAL_P(GET_STATIC_PROP(mode))) {
SET_EH_NORMAL();
#else
http_error(HE_THROW, HTTP_E_RUNTIME, "Cannot guess Content-Type; libmagic not available");
+ RETURN_FALSE;
#endif
}
/* }}} */
if (clean_ob) {
/* interrupt on-the-fly etag generation */
- HTTP_G(etag).started = 0;
+ HTTP_G->etag.started = 0;
/* discard previous output buffers */
php_end_ob_buffers(0 TSRMLS_CC);
}
{
zval *bsize_p, *bsize = convert_to_type_ex(IS_LONG, GET_STATIC_PROP(bufferSize), &bsize_p);
zval *delay_p, *delay = convert_to_type_ex(IS_DOUBLE, GET_STATIC_PROP(throttleDelay), &delay_p);
- HTTP_G(send).buffer_size = Z_LVAL_P(bsize);
- HTTP_G(send).throttle_delay = Z_DVAL_P(delay);
+ HTTP_G->send.buffer_size = Z_LVAL_P(bsize);
+ HTTP_G->send.throttle_delay = Z_DVAL_P(delay);
if (bsize_p) zval_ptr_dtor(&bsize_p);
if (delay_p) zval_ptr_dtor(&delay_p);
}
/* gzip */
- HTTP_G(send).deflate.encoding = zval_is_true(GET_STATIC_PROP(gzip));
+ HTTP_G->send.deflate.encoding = zval_is_true(GET_STATIC_PROP(gzip));
/* start ob */
- php_start_ob_buffer(NULL, HTTP_G(send).buffer_size, 0 TSRMLS_CC);
+ php_start_ob_buffer(NULL, HTTP_G->send.buffer_size, 0 TSRMLS_CC);
/* send */
switch (Z_LVAL_P(GET_STATIC_PROP(mode)))