Made cache checking easier.
[jsvc.git] / src / dolda / jsvc / util / Cache.java
diff --git a/src/dolda/jsvc/util/Cache.java b/src/dolda/jsvc/util/Cache.java
new file mode 100644 (file)
index 0000000..6fd7d7a
--- /dev/null
@@ -0,0 +1,28 @@
+package dolda.jsvc.util;
+
+import dolda.jsvc.*;
+import java.util.*;
+
+public class Cache {
+    public static void checkmtime(Request req, long mtime) {
+       /* Since the HTTP time format is (reasonably enough) precise
+        * only to seconds, any extra milliseconds must be trimmed
+        * off, or the mtime will almost certainly not match. */
+       Date mdate = new Date((mtime / 1000) * 1000);
+       String ims = req.inheaders().get("If-Modified-Since");
+       if(ims != null) {
+           Date cldate;
+           try {
+               cldate = Http.parsedate(ims);
+           } catch(java.text.ParseException e) {
+               throw(Restarts.stdresponse(400, "The If-Modified-Since header is not parseable."));
+           }
+           if(mdate.compareTo(cldate) <= 0) {
+               req.status(304);
+               req.outheaders().put("Content-Length", "0");
+               throw(Restarts.done());
+           }
+       }
+       req.outheaders().put("Last-Modified", Http.fmtdate(mdate));
+    }
+}