Please don't use realGetKey(). That's an internal method, used by the request starters. Using it means your request isn't queued and is sent immediately, outside all the rate limiting etc code. There are other possibilities, such as subclassing SendableGet and queueing yourself.
On Friday 14 December 2007 20:56, you wrote: > Author: saces > Date: 2007-12-14 20:56:13 +0000 (Fri, 14 Dec 2007) > New Revision: 16548 > > Added: > trunk/plugins/KeyExplorer/ > trunk/plugins/KeyExplorer/KeyExplorer.java > Log: > new plugin: key info and debug tool > > Added: trunk/plugins/KeyExplorer/KeyExplorer.java > =================================================================== > --- trunk/plugins/KeyExplorer/KeyExplorer.java > (rev 0) > +++ trunk/plugins/KeyExplorer/KeyExplorer.java 2007-12-14 20:56:13 UTC > (rev 16548) > @@ -0,0 +1,243 @@ > +package plugins.KeyExplorer; > + > +import java.io.IOException; > +import java.net.MalformedURLException; > + > +import freenet.client.Metadata; > +import freenet.client.MetadataParseException; > +import freenet.clients.http.PageMaker; > +import freenet.config.Config; > +import freenet.config.SubConfig; > +import freenet.keys.BaseClientKey; > +import freenet.keys.ClientKey; > +import freenet.keys.ClientKeyBlock; > +import freenet.keys.FreenetURI; > +import freenet.keys.KeyDecodeException; > +import freenet.node.LowLevelGetException; > +import freenet.pluginmanager.FredPlugin; > +import freenet.pluginmanager.FredPluginHTTP; > +import freenet.pluginmanager.FredPluginThreadless; > +import freenet.pluginmanager.PluginHTTPException; > +import freenet.pluginmanager.PluginRespirator; > +import freenet.support.HTMLNode; > +import freenet.support.HexUtil; > +import freenet.support.api.HTTPRequest; > +import freenet.support.io.ArrayBucket; > +import freenet.support.io.ArrayBucketFactory; > +import freenet.support.io.BucketTools; > + > +public class KeyExplorer implements FredPlugin, FredPluginHTTP, FredPluginThreadless { > + > + private PluginRespirator m_pr; > + private PageMaker m_pm; > + > + public String handleHTTPGet(HTTPRequest request) throws PluginHTTPException { > + String uri = request.getParam("key"); > + return makeMainPage(uri); > + } > + > + public String handleHTTPPost(HTTPRequest request) throws PluginHTTPException { > + String uri = request.getPartAsString("key", 1024); > + return makeMainPage(uri); > + } > + > + public String handleHTTPPut(HTTPRequest request) throws PluginHTTPException { > + return makeMainPage(); > + } > + > + public void runPlugin(PluginRespirator pr) { > + Config nc = pr.getNode().config; > + SubConfig fc = nc.get("fproxy"); > + String cssName = fc.getString("css"); > + > + m_pm = new PageMaker(cssName); > + m_pr = pr; > + } > + > + public void terminate() { > + } > + > + private String makeMainPage() { > + return makeMainPage(null); > + } > + > + private String makeMainPage(String key) { > + HTMLNode pageNode = m_pm.getPageNode("KeyExplorer", null); > + HTMLNode contentNode = m_pm.getContentNode(pageNode); > + > + String error = null; > + byte[] data = null; > + ClientKeyBlock ckb = null; > + > + try { > + if (key != null && (key.trim().length() > 0)) { > + FreenetURI furi = new FreenetURI(key); > + ClientKey ck = (ClientKey) > BaseClientKey.getBaseKey(furi); > + ckb = m_pr.getNode().clientCore.realGetKey(ck, > false, true, false); > + ArrayBucket a = (ArrayBucket) ckb.decode(new > ArrayBucketFactory(), 32 * 1024, false); > + data = BucketTools.toByteArray(a); > + } > + } catch (MalformedURLException e) { > + error = "MalformedURL"; > + } catch (LowLevelGetException e) { > + error = "get failed"; > + } catch (KeyDecodeException e) { > + error = "decode error"; > + } catch (IOException e) { > + error = "io error"; > + } > + > + if (error != null) { > + contentNode.addChild(createErrorBox(error)); > + } > + > + contentNode.addChild(createUriBox()); > + > + if (data != null) { > + String title = "Key: " + key; > + if (ckb.isMetadata()) > + title = title + "\u00a0(MetaData)"; > + HTMLNode dataBox2 = m_pm.getInfobox(title); > + > + char[] asciibuf = new char[16]; > + > + for (int j = 0; j < 16; j++) > + asciibuf[j] = ' '; > + > + dataBox2.addChild("%", "<PRE>\n"); > + StringBuffer sb = new StringBuffer(); > + int offset = 0; > + > + for (int i = 0; i < data.length; i++) { > + offset = (i) % 16; > + HexUtil.bytesToHexAppend(data, i, 1, sb); > + sb.append(' '); > + if ((data[i] > 31) && (data[i] < 127)) { > + //int j = data[i]; > + //sb.append((char) j); > + asciibuf[offset] =(char) data[i]; > + } > + > + if ((i > 1) && ((i + 1) % 16 == 0)) { > + sb.append(' '); > + sb.append(asciibuf); > + sb.append('\n'); > + for (int k = 0; k < 16; k++) > + asciibuf[k] = ' '; > + } > + } > + if (offset > 0) { > + int n = (15-offset)*3; > + for (int m = 0; m < n; m++) > + sb.append(' '); > + sb.append(' '); > + sb.append(asciibuf); > + } > + > + dataBox2.addChild("#", sb.toString()); > + dataBox2.addChild("%", "\n</PRE>"); > + > + contentNode.addChild(dataBox2); > + > + error = null; > + > + if (ckb.isMetadata()) { > + > + Metadata md = null; > + try { > + md = Metadata.construct(data); > + } catch (MetadataParseException e) { > + error = "Metadata parse error"; > + } > + > + if (error != null) > + > contentNode.addChild(createErrorBox(error)); > + > + if (md != null) { > + HTMLNode metaBox = > m_pm.getInfobox("Decomposed metadata"); > + > + metaBox.addChild("#", "Document type:"); > + metaBox.addChild("%", "<BR />"); > + > + if (md.isSimpleManifest()) { > + metaBox.addChild("#", "Document > type: SimpleManifest"); > + metaBox.addChild("%", "<BR />"); > + } > + > + if (md.isSplitfile()) { > + metaBox.addChild("#", "Document > type: Splitfile"); > + metaBox.addChild("%", "<BR />"); > + } > + > + if (md.isSimpleSplitfile()) { > + metaBox.addChild("#", "Document > type: SimpleSplitfile"); > + metaBox.addChild("%", "<BR />"); > + } > + > + if (md.isSingleFileRedirect()) { > + metaBox.addChild("#", "Document > type: SingleFileRedirect"); > + metaBox.addChild("%", "<BR />"); > + String sfrUri = > md.getSingleTarget().toString(); > + metaBox.addChild("#", sfrUri); > + metaBox.addChild("#", "\u00a0"); > + metaBox.addChild(new > HTMLNode("a", "href", "/?key="+sfrUri, "open")); > + metaBox.addChild("#", "\u00a0"); > + metaBox.addChild(new HTMLNode("a", "href", "/plugins/plugins.KeyExplorer.KeyExplorer/?key="+sfrUri, "explore")); > + metaBox.addChild("%", "<BR />"); > + } > + > + if (md.isArchiveInternalRedirect()) { > + metaBox.addChild("#", "Document > type: ArchiveInternalRedirect"); > + metaBox.addChild("%", "<BR />"); > + } > + > + if (md.isArchiveManifest()) { > + metaBox.addChild("#", "Document > type: ArchiveManifest"); > + metaBox.addChild("%", "<BR />"); > + } > + > + if (!md.isCompressed()) { > + metaBox.addChild("#", > "Uncompressed"); > + } else { > + metaBox.addChild("#", > "Compressed (codec " + md.getCompressionCodec() + ")"); > + metaBox.addChild("%", "<BR />"); > + metaBox.addChild("#", > "Decompressed size: " + md.uncompressedDataLength() + " bytes"); > + } > + metaBox.addChild("%", "<BR />"); > + > + metaBox.addChild("#", "Data > size\u00a0=\u00a0" + md.dataLength()); > + metaBox.addChild("%", "<BR />"); > + > + if (md.isResolved()) { > + metaBox.addChild("#", "Resolved > URI:\u00a0=\u00a0" + md.getResolvedURI()); > + metaBox.addChild("%", "<BR />"); > + } > + contentNode.addChild(metaBox); > + } > + > + } > + > + } > + > + return pageNode.generate(); > + } > + > + private HTMLNode createUriBox() { > + HTMLNode browseBox = m_pm.getInfobox("Explore a freenet key"); > + HTMLNode browseContent = m_pm.getContentNode(browseBox); > + browseContent.addChild("#", "Display the top level chunk as > hexprint"); > + HTMLNode browseForm = m_pr.addFormChild(browseContent, "/plugins/plugins.KeyExplorer.KeyExplorer/", "uriForm"); > + browseForm.addChild("#", "Freenetkey to explore: \u00a0 "); > + browseForm.addChild("input", new String[] { "type", "name", > "size" }, new String[] { "text", "key", "70" }); > + browseForm.addChild("#", "\u00a0"); > + browseForm.addChild("input", new String[] { "type", "name", > "value" }, new String[] { "submit", "debug", "Explore!" }); > + return browseBox; > + } > + > + private HTMLNode createErrorBox(String errmsg) { > + HTMLNode errorBox = m_pm.getInfobox("infobox-alert", "ERROR"); > + errorBox.addChild("#", errmsg); > + return errorBox; > + } > + > +} > > _______________________________________________ > cvs mailing list > [EMAIL PROTECTED] > http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs > >
pgp5BvcsKw7s5.pgp
Description: PGP signature
_______________________________________________ Devl mailing list Devl@freenetproject.org http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl