From 4ef8d0eec0f37a5ba50941bbd69b0aff49dc9625 Mon Sep 17 00:00:00 2001
From: Per Hedbor <ph@opera.com>
Date: Wed, 1 Dec 2010 03:52:51 +0100
Subject: [PATCH] Support If-None-Match for etags.

---
 .../HTTP.pmod/Server.pmod/Request.pike         | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/Request.pike b/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/Request.pike
index 1b2465080c..af4a989e9d 100644
--- a/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/Request.pike
+++ b/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/Request.pike
@@ -634,7 +634,6 @@ void response_and_finish(mapping m, function|void _log_cb)
    if (request_headers["if-modified-since"])
    {
       int t = .http_decode_date(request_headers["if-modified-since"]);
-
       if (t)
       {
 	 if (!m->stat && m->file)
@@ -648,6 +647,23 @@ void response_and_finish(mapping m, function|void _log_cb)
       }
    }
 
+   if (request_headers["if-none-match"] && m->extra_heads )
+   {
+       string et;
+       if((et = m->extra_heads->ETag) || (et =m->extra_heads->etag))
+       {
+           if( string key = request_headers["if-none-match"] )
+           {
+               if (key == et)
+               {
+                   m_delete(m,"file");
+                   m->data="";
+                   m->error=304;
+               }
+           }
+       }
+   }
+
    string header=make_response_header(m);
 
    if (m->stop) m->size=1+m->stop-m->start;
-- 
GitLab