Author: saces
Date: 2008-04-14 20:01:40 +0000 (Mon, 14 Apr 2008)
New Revision: 19337

Modified:
   trunk/plugins/KeyExplorer/KeyExplorer.java
Log:
...and use it.

Modified: trunk/plugins/KeyExplorer/KeyExplorer.java
===================================================================
--- trunk/plugins/KeyExplorer/KeyExplorer.java  2008-04-14 20:01:15 UTC (rev 
19336)
+++ trunk/plugins/KeyExplorer/KeyExplorer.java  2008-04-14 20:01:40 UTC (rev 
19337)
@@ -2,6 +2,7 @@

 import java.io.IOException;
 import java.net.MalformedURLException;
+import java.util.HashMap;

 import freenet.client.Metadata;
 import freenet.client.MetadataParseException;
@@ -12,25 +13,28 @@
 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.FredPluginFCP;
 import freenet.pluginmanager.FredPluginHTTP;
 import freenet.pluginmanager.FredPluginThreadless;
 import freenet.pluginmanager.PluginHTTPException;
+import freenet.pluginmanager.PluginReplySender;
 import freenet.pluginmanager.PluginRespirator;
 import freenet.support.HTMLNode;
 import freenet.support.HexUtil;
+import freenet.support.SimpleFieldSet;
+import freenet.support.api.Bucket;
 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 {
+public class KeyExplorer implements FredPlugin, FredPluginHTTP, FredPluginFCP, 
FredPluginThreadless {

        private PluginRespirator m_pr;
        private PageMaker m_pm;

+       private HashMap getters = new HashMap();
+
        public String handleHTTPGet(HTTPRequest request) throws 
PluginHTTPException {
                String uri = request.getParam("key");
                return makeMainPage(uri);
@@ -45,6 +49,55 @@
                return makeMainPage();
        }

+       public void handle(PluginReplySender replysender, SimpleFieldSet 
params, Bucket data, int accesstype) {
+
+               String command = params.get("Command");
+
+               if (command == null || command.trim().length() == 0) {
+                       sendError(replysender, 1, "Invalid Command name");
+                       return;
+               }
+
+               if ("Ping".equals(command)) {
+                       SimpleFieldSet sfs = new SimpleFieldSet(true);
+                       sfs.put("Pong", System.currentTimeMillis());
+                       replysender.send(sfs);
+                       return;
+               } else if ("Get".equals(command)) {
+
+                       final String identifier = params.get("Identifier");
+                       if (identifier == null || identifier.trim().length() == 
0) {
+                               sendError(replysender, 3, "Missing identifier");
+                               return;
+                       }
+
+                       final String uri = params.get("URI");
+                       if (uri == null || uri.trim().length() == 0) {
+                               sendError(replysender, 4, "missing freenet 
uri");
+                               return;
+                       }
+
+                       try {
+                               FreenetURI furi = new FreenetURI(uri);
+                               GetResult getresult = simpleGet(furi);
+
+                               SimpleFieldSet sfs = new SimpleFieldSet(true);
+                               sfs.putSingle("Identifier", identifier);
+                               sfs.put("IsMetadata", getresult.isMetaData);
+                               replysender.send(sfs, getresult.data);
+                               return;
+
+                       } catch (MalformedURLException e) {
+                               sendError(replysender, 5, "malformed freenet 
uri");
+                               return;
+                       } catch (LowLevelGetException e) {
+                               sendError(replysender, 6, "get failed" + 
e.toString());
+                               return;
+                       }
+               } else
+                       replysender.send(params);
+       }
+
        public void runPlugin(PluginRespirator pr) {
                Config nc = pr.getNode().config;
                SubConfig fc = nc.get("fproxy");
@@ -57,6 +110,33 @@
        public void terminate() {
        }

+       private class GetResult {
+               final Bucket data;
+               final boolean isMetaData;
+
+               GetResult(Bucket data2, boolean isMetaData2) {
+                       data = data2;
+                       isMetaData = isMetaData2;
+               }
+       }
+
+       private GetResult simpleGet(FreenetURI uri) throws 
MalformedURLException, LowLevelGetException {
+               ClientKey ck = (ClientKey) BaseClientKey.getBaseKey(uri);
+               VerySimpleGetter vsg = new VerySimpleGetter((short) 1, 
m_pr.getNode().clientCore.requestStarters.chkFetchScheduler, m_pr
+                               
.getNode().clientCore.requestStarters.sskFetchScheduler, uri, null);
+               VerySimpleGet vs = new VerySimpleGet(ck, 3, 
m_pr.getHLSimpleClient().getFetchContext(), vsg);
+               vs.schedule();
+               return new GetResult(vs.waitForCompletion(), vs.isMetadata());
+       }
+
+       private void sendError(PluginReplySender replysender, int code, String 
description) {
+               SimpleFieldSet sfs = new SimpleFieldSet(true);
+               sfs.putOverwrite("Status", "Error");
+               sfs.put("Code", code);
+               sfs.putOverwrite("Description", description);
+               replysender.send(sfs);
+       }
+
        private String makeMainPage() {
                return makeMainPage(null);
        }
@@ -67,22 +147,18 @@

                String error = null;
                byte[] data = null;
-               ClientKeyBlock ckb = null;
+               GetResult getresult = 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, 
true, true, false);
-                               ArrayBucket a = (ArrayBucket) ckb.decode(new 
ArrayBucketFactory(), 32 * 1024, false);
-                               data = BucketTools.toByteArray(a);
+                               getresult = simpleGet(furi);
+                               data = BucketTools.toByteArray(getresult.data);
                        }
                } catch (MalformedURLException e) {
                        error = "MalformedURL";
                } catch (LowLevelGetException e) {
                        error = "get failed";
-               } catch (KeyDecodeException e) {
-                       error = "decode error";
                } catch (IOException e) {
                        error = "io error";
                }
@@ -95,15 +171,15 @@

                if (data != null) {
                        String title = "Key: " + key;
-                       if (ckb.isMetadata())
+                       if (getresult.isMetaData)
                                title = title + "\u00a0(MetaData)";
                        HTMLNode dataBox2 = m_pm.getInfobox(title);
-                       
+
                        char[] asciibuf = new char[16];
-                       
-                       for (int j = 0; j < 16; j++) 
+
+                       for (int j = 0; j < 16; j++)
                                asciibuf[j] = ' ';
-                        
+
                        dataBox2.addChild("%", "<PRE>\n");
                        StringBuffer sb = new StringBuffer();
                        int offset = 0;
@@ -113,22 +189,22 @@
                                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];
-                               } 
-                               
+                                       // 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++) 
+                                       for (int k = 0; k < 16; k++)
                                                asciibuf[k] = ' ';
                                }
                        }
                        if (offset > 0) {
-                               int n = (15-offset)*3;
-                               for (int m = 0; m < n; m++) 
+                               int n = (15 - offset) * 3;
+                               for (int m = 0; m < n; m++)
                                        sb.append(' ');
                                sb.append(' ');
                                sb.append(asciibuf);
@@ -141,7 +217,7 @@

                        error = null;

-                       if (ckb.isMetadata()) {
+                       if (getresult.isMetaData) {

                                Metadata md = null;
                                try {
@@ -183,9 +259,10 @@
                                                        String sfrUri = 
md.getSingleTarget().toString();
                                                        metaBox.addChild("#", 
sfrUri);
                                                        metaBox.addChild("#", 
"\u00a0");
-                                                       metaBox.addChild(new 
HTMLNode("a", "href", "/?key="+sfrUri, "open"));
+                                                       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(new 
HTMLNode("a", "href", "/plugins/plugins.KeyExplorer.KeyExplorer/?key=" + sfrUri,
+                                                                       
"explore"));
                                                        metaBox.addChild("%", 
"<BR />");
                                                }
                                        }
@@ -243,5 +320,4 @@
                errorBox.addChild("#", errmsg);
                return errorBox;
        }
-
 }


Reply via email to