- 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);
-
+/* {{{ void http_ob_etaghandler(char *, uint, char **, uint *, int) */
+void _http_ob_etaghandler(char *output, uint output_len,
+ char **handled_output, uint *handled_output_len, int mode TSRMLS_DC)
+{
+ /* passthru */
+ *handled_output_len = output_len;
+ *handled_output = estrndup(output, output_len);
+
+ /* are we supposed to run? */
+ if (HTTP_G(etag).started) {
+ /* initialize the etag context */
+ if (mode & PHP_OUTPUT_HANDLER_START) {
+ HTTP_G(etag).ctx = http_etag_init();
+ }
+
+ /* update */
+ http_etag_update(HTTP_G(etag).ctx, output, output_len);
+
+ /* finish */
+ if (mode & PHP_OUTPUT_HANDLER_END) {
+ char *sent_header = NULL;
+ char *etag = http_etag_finish(HTTP_G(etag).ctx);
+
+ HTTP_G(etag).ctx = NULL;
+
+ http_send_cache_control(HTTP_DEFAULT_CACHECONTROL, lenof(HTTP_DEFAULT_CACHECONTROL));
+ http_send_etag_ex(etag, strlen(etag), &sent_header);
+