From 9a73c6defe1c2c19142b2f5183f5659e38d3ab4f Mon Sep 17 00:00:00 2001 From: ragnarok <ragnarok> Date: Fri, 30 Sep 2005 23:42:28 +0000 Subject: [PATCH] * Support conditional get for remote archive imports. --- .../java/src/net/i2p/syndie/BlogManager.java | 1 + .../net/i2p/syndie/web/ArchiveServlet.java | 8 ++++++-- .../net/i2p/syndie/web/RemoteArchiveBean.java | 19 ++++++++++++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/apps/syndie/java/src/net/i2p/syndie/BlogManager.java b/apps/syndie/java/src/net/i2p/syndie/BlogManager.java index 0b5222acaf..55d45711b5 100644 --- a/apps/syndie/java/src/net/i2p/syndie/BlogManager.java +++ b/apps/syndie/java/src/net/i2p/syndie/BlogManager.java @@ -166,6 +166,7 @@ public class BlogManager { public Archive getArchive() { return _archive; } public File getTempDir() { return _tempDir; } + public File getRootDir() { return _rootDir; } public List listMyBlogs() { File files[] = _privKeyDir.listFiles(); 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 faa3635913..7d03b98d50 100644 --- a/apps/syndie/java/src/net/i2p/syndie/web/ArchiveServlet.java +++ b/apps/syndie/java/src/net/i2p/syndie/web/ArchiveServlet.java @@ -8,6 +8,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; +import net.i2p.I2PAppContext; import net.i2p.data.*; import net.i2p.syndie.*; import net.i2p.syndie.data.*; @@ -94,10 +95,13 @@ public class ArchiveServlet extends HttpServlet { private void renderSummary(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()); resp.setHeader(HEADER_EXPORT_CAPABLE, "true"); + Hash hash = I2PAppContext.getGlobalContext().sha().calculateHash(indexUTF8); + resp.setHeader("ETag", "\"" + hash.toBase64() + "\""); OutputStream out = resp.getOutputStream(); - ArchiveIndex index = BlogManager.instance().getArchive().getIndex(); - out.write(DataHelper.getUTF8(index.toString())); + 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 b568f9074d..3a5c4b37e8 100644 --- a/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java +++ b/apps/syndie/java/src/net/i2p/syndie/web/RemoteArchiveBean.java @@ -299,10 +299,27 @@ public class RemoteArchiveBean { (_proxyHost != null ? " via " + HTMLRenderer.sanitizeString(_proxyHost) + ":" + _proxyPort : "")); File archiveFile = new File(BlogManager.instance().getTempDir(), user.getBlog().toBase64() + "_remoteArchive.txt"); archiveFile.delete(); + + Properties etags = new Properties(); + try { + etags.load(new FileInputStream(new File(BlogManager.instance().getRootDir(), "etags"))); + } catch (Exception exp) { + //ignore + } + EepGet eep = new EepGet(I2PAppContext.getGlobalContext(), ((_proxyHost != null) && (_proxyPort > 0)), - _proxyHost, _proxyPort, 0, archiveFile.getAbsolutePath(), location); + _proxyHost, _proxyPort, 0, archiveFile.getAbsolutePath(), location, etags.getProperty(location)); eep.addStatusListener(new IndexFetcherStatusListener(archiveFile)); eep.fetch(); + + if (eep.getETag() != null) { + etags.setProperty(location, eep.getETag()); + } + try { + etags.store(new FileOutputStream(new File(BlogManager.instance().getRootDir(), "etags")), "etags"); + } catch (Exception exp) { + //ignore + } } private class IndexFetcherStatusListener implements EepGet.StatusListener { -- GitLab