X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_response_object.c;h=544b60337198fd4841852d8b24e75caa9463d497;hp=2a0cbbd0aaad9db54ec57e4591e469abaf681171;hb=1ad65c598ee022aa7b31bb0884fe15b3dcd454d3;hpb=0e41acb9661b95484c212e349f83e34eb3fe84a2 diff --git a/http_response_object.c b/http_response_object.c index 2a0cbbd..544b603 100644 --- a/http_response_object.c +++ b/http_response_object.c @@ -248,6 +248,14 @@ static inline void _http_response_object_declare_default_properties(TSRMLS_D) DCL_CONST(long, "ETAG_SHA1", HTTP_ETAG_SHA1); DCL_CONST(long, "ETAG_CRC32", HTTP_ETAG_CRC32); +# ifdef HTTP_HAVE_HASH_EXT + DCL_CONST(long, "ETAG_SHA256", HTTP_ETAG_SHA256); + DCL_CONST(long, "ETAG_SHA384", HTTP_ETAG_SHA384); + DCL_CONST(long, "ETAG_SHA512", HTTP_ETAG_SHA512); + DCL_CONST(long, "ETAG_RIPEMD128", HTTP_ETAG_RIPEMD128); + DCL_CONST(long, "ETAG_RIPEMD160", HTTP_ETAG_RIPEMD160); +# endif + # ifdef HTTP_HAVE_MHASH { int l, i, c = mhash_count(); @@ -900,7 +908,7 @@ PHP_METHOD(HttpResponse, setData) } UPD_STATIC_PROP(long, lastModified, http_last_modified(the_data, SEND_DATA)); - if (etag = http_etag(Z_STRVAL_P(the_data), Z_STRLEN_P(the_data), SEND_DATA)) { + if ((etag = http_etag(Z_STRVAL_P(the_data), Z_STRLEN_P(the_data), SEND_DATA))) { UPD_STATIC_PROP(string, eTag, etag); efree(etag); } @@ -959,7 +967,7 @@ PHP_METHOD(HttpResponse, setStream) zend_list_addref(Z_LVAL_P(the_stream)); UPD_STATIC_PROP(long, lastModified, http_last_modified(the_real_stream, SEND_RSRC)); - if (etag = http_etag(the_real_stream, 0, SEND_RSRC)) { + if ((etag = http_etag(the_real_stream, 0, SEND_RSRC))) { UPD_STATIC_PROP(string, eTag, etag); efree(etag); } @@ -1018,7 +1026,7 @@ PHP_METHOD(HttpResponse, setFile) } UPD_STATIC_PROP(long, lastModified, http_last_modified(the_file, -1)); - if (etag = http_etag(the_file, 0, -1)) { + if ((etag = http_etag(the_file, 0, -1))) { UPD_STATIC_PROP(string, eTag, etag); efree(etag); } @@ -1081,13 +1089,11 @@ PHP_METHOD(HttpResponse, send) if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &clean_ob)) { RETURN_FALSE; } - if (SG(headers_sent)) { - http_error(HE_WARNING, HTTP_E_RESPONSE, "Cannot send HttpResponse, headers have already been sent"); - RETURN_FALSE; - } + + HTTP_CHECK_HEADERS_SENT(RETURN_FALSE); sent = GET_STATIC_PROP(sent); - if (zval_is_true(sent)) { + if (Z_LVAL_P(sent)) { http_error(HE_WARNING, HTTP_E_RESPONSE, "Cannot send HttpResponse, response has already been sent"); RETURN_FALSE; } else { @@ -1140,6 +1146,10 @@ PHP_METHOD(HttpResponse, send) if (etag_p) zval_ptr_dtor(&etag_p); if (lmod_p) zval_ptr_dtor(&lmod_p); if (cctl_p) zval_ptr_dtor(&cctl_p); + + if (php_ob_handler_used("blackhole" TSRMLS_CC)) { + RETURN_TRUE; + } } /* content type */ @@ -1238,6 +1248,8 @@ PHP_METHOD(HttpResponse, send) PHP_METHOD(HttpResponse, capture) { NO_ARGS; + + HTTP_CHECK_HEADERS_SENT(RETURN_FALSE); UPD_STATIC_PROP(long, catch, 1);