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
> 
> 

Attachment: pgp5BvcsKw7s5.pgp
Description: PGP signature

_______________________________________________
Devl mailing list
Devl@freenetproject.org
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to