From 1962867ad9b5f8f6e57dc409f39aaa6f9f480a8c Mon Sep 17 00:00:00 2001 From: ragnarok <ragnarok> Date: Mon, 3 Oct 2005 02:54:34 +0000 Subject: [PATCH] * Actually implement the bit that returns a 304 if archive.txt hasn't changed. --- .../java/src/net/i2p/syndie/web/ArchiveServlet.java | 12 ++++++++---- .../src/net/i2p/syndie/web/RemoteArchiveBean.java | 4 +++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/syndie/java/src/net/i2p/syndie/web/ArchiveServlet.java b/apps/syndie/java/src/net/i2p/syndie/web/ArchiveServlet.java index 7d03b98d50..042cc433f0 100644 --- a/apps/syndie/java/src/net/i2p/syndie/web/ArchiveServlet.java +++ b/apps/syndie/java/src/net/i2p/syndie/web/ArchiveServlet.java @@ -24,7 +24,7 @@ public class ArchiveServlet extends HttpServlet { renderRootIndex(resp); return; } else if (path.endsWith(Archive.INDEX_FILE)) { - renderSummary(resp); + renderSummary(req.getHeader("If-None-Match"), resp); } else if (path.indexOf("export.zip") != -1) { ExportServlet.export(req, resp); } else { @@ -92,14 +92,18 @@ public class ArchiveServlet extends HttpServlet { public static final String HEADER_EXPORT_CAPABLE = "X-Syndie-Export-Capable"; - private void renderSummary(HttpServletResponse resp) throws ServletException, IOException { + private void renderSummary(String etag, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/plain;charset=utf-8"); //resp.setCharacterEncoding("UTF-8"); ArchiveIndex index = BlogManager.instance().getArchive().getIndex(); byte[] indexUTF8 = DataHelper.getUTF8(index.toString()); + String newEtag = "\"" + I2PAppContext.getGlobalContext().sha().calculateHash(indexUTF8).toBase64() + "\""; + if (etag != null && etag.equals(newEtag)) { + resp.sendError(304, "Archive not modified"); + return; + } resp.setHeader(HEADER_EXPORT_CAPABLE, "true"); - Hash hash = I2PAppContext.getGlobalContext().sha().calculateHash(indexUTF8); - resp.setHeader("ETag", "\"" + hash.toBase64() + "\""); + resp.setHeader("ETag", newEtag); OutputStream out = resp.getOutputStream(); out.write(indexUTF8); out.close(); diff --git a/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java b/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java index 759c28cdb0..4891232765 100644 --- a/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java +++ b/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java @@ -336,7 +336,9 @@ public class RemoteArchiveBean { _statusMessages.add("Fetch of " + HTMLRenderer.sanitizeString(url) + " successful"); _fetchIndexInProgress = false; ArchiveIndex i = new ArchiveIndex(I2PAppContext.getGlobalContext(), false); - if (!notModified) { + if (notModified) { + _statusMessages.add("Archive unchanged since last fetch."); + } else { try { i.load(_archiveFile); _statusMessages.add("Archive fetched and loaded"); -- GitLab