Author: saces Date: 2009-04-18 16:17:21 +0000 (Sat, 18 Apr 2009) New Revision: 26988
Modified: trunk/plugins/KeyExplorer/KeyExplorer.java Log: put in a provisional solution for downloading containers, try it with 'http://127.0.0.1:8888/plugins/plugins.KeyExplorer.KeyExplorer/?action=download&key=...@containeruri' Modified: trunk/plugins/KeyExplorer/KeyExplorer.java =================================================================== --- trunk/plugins/KeyExplorer/KeyExplorer.java 2009-04-18 16:04:54 UTC (rev 26987) +++ trunk/plugins/KeyExplorer/KeyExplorer.java 2009-04-18 16:17:21 UTC (rev 26988) @@ -23,6 +23,7 @@ import freenet.client.ArchiveContext; import freenet.client.ClientMetadata; +import freenet.client.DefaultMIMETypes; import freenet.client.FetchContext; import freenet.client.FetchException; import freenet.client.FetchResult; @@ -43,6 +44,7 @@ import freenet.l10n.L10n.LANGUAGE; import freenet.node.LowLevelGetException; import freenet.node.RequestClient; +import freenet.pluginmanager.DownloadPluginHTTPException; import freenet.pluginmanager.FredPlugin; import freenet.pluginmanager.FredPluginFCP; import freenet.pluginmanager.FredPluginHTTP; @@ -61,6 +63,7 @@ import freenet.support.api.Bucket; import freenet.support.api.HTTPRequest; import freenet.support.compress.Compressor.COMPRESSOR_TYPE; +import freenet.support.io.ArrayBucket; import freenet.support.io.BucketTools; /** @@ -75,6 +78,7 @@ public String handleHTTPGet(HTTPRequest request) throws PluginHTTPException { String uri; String type; + String action; boolean automf; boolean deep; int hexWidth; @@ -85,12 +89,14 @@ automf = request.getParam("automf").length() > 0; deep = request.getParam("deep").length() > 0; hexWidth = request.getIntParam("hexWidth", 32); + action = request.getParam("action"); } else { uri = null; type = null; automf = true; deep = true; hexWidth = 32; + action = ""; } List<String> errors = new LinkedList<String>(); @@ -98,6 +104,16 @@ errors.add("Hex display columns out of range. (1-1024). Set to 32 (default)."); hexWidth = 32; } + + if ("download".equals(action)) { + byte[] data = doDownload(errors, uri); + if (errors.size()==0) { + throw new DownloadPluginHTTPException(data, "plugindownload", DefaultMIMETypes.DEFAULT_MIME_TYPE); + } else { + return makeMainPage(errors, uri, hexWidth, false, deep); + } + } + if ("ZIPmanifest".equals(type)) { return makeManifestPage(errors, uri, true, false, hexWidth, automf, deep); } @@ -233,6 +249,52 @@ public void terminate() { } + private byte[] doDownload(List<String> errors, String key) { + + if (errors.size() > 0) { + return null; + } + if (key == null || (key.trim().length() == 0)) { + errors.add("Are you jokingly? Empty URI"); + return null; + } + try { + FreenetURI furi = sanitizeURI(errors, key); + GetResult getresult = simpleGet(m_pr, furi); + if (getresult.isMetaData()) { + return unrollMetadata(Metadata.construct(getresult.getData())); + } else { + return BucketTools.toByteArray(getresult.getData()); + } + } catch (MalformedURLException e) { + errors.add(e.getMessage()); + e.printStackTrace(); + } catch (LowLevelGetException e) { + errors.add(e.getMessage()); + e.printStackTrace(); + } catch (MetadataParseException e) { + errors.add(e.getMessage()); + e.printStackTrace(); + } catch (IOException e) { + errors.add(e.getMessage()); + e.printStackTrace(); + } catch (FetchException e) { + errors.add(e.getMessage()); + e.printStackTrace(); + } catch (KeyListenerConstructionException e) { + errors.add(e.getMessage()); + e.printStackTrace(); + } + return null; + } + + private byte[] unrollMetadata(Metadata md) throws MalformedURLException, IOException, LowLevelGetException, FetchException, MetadataParseException, KeyListenerConstructionException { + + byte[] result = null; + result = BucketTools.toByteArray(splitGet(md).asBucket()); + return result; + } + private static GetResult simpleGet(PluginRespirator pr, FreenetURI uri) throws MalformedURLException, LowLevelGetException { ClientKey ck; try { _______________________________________________ cvs mailing list [email protected] http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
