+/* {{{ void http_ob_etaghandler(char *, uint, char **, uint *, int) */
+PHP_HTTP_API void _http_ob_etaghandler(char *output, uint output_len,
+ char **handled_output, uint *handled_output_len, int mode TSRMLS_DC)
+{
+ char etag[33] = { 0 };
+ unsigned char digest[16];
+
+ if (mode & PHP_OUTPUT_HANDLER_START) {
+ HTTP_G(etag).started = 1;
+ PHP_MD5Init(&HTTP_G(etag).md5ctx);
+ }
+
+ PHP_MD5Update(&HTTP_G(etag).md5ctx, output, output_len);
+
+ if (mode & PHP_OUTPUT_HANDLER_END) {
+ PHP_MD5Final(digest, &HTTP_G(etag).md5ctx);
+
+ /* just do that if desired */
+ if (HTTP_G(etag).started) {
+ make_digest(etag, digest);
+ http_send_header("Cache-Control: " HTTP_DEFAULT_CACHECONTROL);
+ http_send_etag(etag, 32);
+
+ if (http_match_etag("HTTP_IF_NONE_MATCH", etag)) {
+ http_cache_exit_ex(etag, 1, 0);
+ }
+ }
+ }
+
+ *handled_output_len = output_len;
+ *handled_output = estrndup(output, output_len);
+}
+/* }}} */