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
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20071215/cd24f1f1/attachment.pgp>