Author: volodya
Date: 2007-03-10 21:13:11 +0000 (Sat, 10 Mar 2007)
New Revision: 12090

Modified:
   trunk/freenet/src/freenet/clients/http/PproxyToadlet.java
   trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
Allowing plugins to use handleHTTPPost

Modified: trunk/freenet/src/freenet/clients/http/PproxyToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/PproxyToadlet.java   2007-03-10 
20:38:53 UTC (rev 12089)
+++ trunk/freenet/src/freenet/clients/http/PproxyToadlet.java   2007-03-10 
21:13:11 UTC (rev 12090)
@@ -44,7 +44,53 @@
                        ctx.sendReplyHeaders(302, "Found", hdrs, null, 0);
                        return;
                }
+
+               String path=request.getPath();
+
+               // remove leading / and plugins/ from path
+               if(path.startsWith("/")) path = path.substring(1);
+               if(path.startsWith("plugins/")) path = 
path.substring("plugins/".length());

+               if(Logger.shouldLog(Logger.MINOR, this)) Logger.minor(this, 
"Pproxy received POST on "+path);
+
+               if(path.length()>0)
+               {
+                       try
+                       {
+                               String plugin = null;
+                               // split path into plugin class name and 'daa' 
path for plugin
+                               int to = path.indexOf("/");
+                               if(to == -1)
+                               {
+                                       plugin = path;
+                               }
+                               else
+                               {
+                                       plugin = path.substring(0, to);
+                               }
+
+                               writeReply(ctx, 200, "text/html", "OK", 
pm.handleHTTPPost(plugin, request));
+                       }
+                       catch(PluginHTTPException e)
+                       {
+                               // TODO: make it into html
+                               writeReply(ctx, e.getCode(), e.getMimeType(), 
e.getDesc(), e.getReply());
+                       }
+                       catch(Throwable t)
+                       {
+                               Logger.error(this, "Caught "+t, t);
+                               String msg = "<html><head><title>Internal 
Error</title></head><body><h1>Internal Error: please report</h1><pre>";
+                               StringWriter sw = new StringWriter();
+                               PrintWriter pw = new PrintWriter(sw);
+                               t.printStackTrace(pw);
+                               pw.flush();
+                               msg = msg + sw.toString() + 
"</pre></body></html>";
+                               this.writeReply(ctx, 500, "text/html", 
"Internal Error", msg);
+                       }
+               }
+               else
+               {
+               
                if (request.isPartSet("load")) {
                        if(Logger.shouldLog(Logger.MINOR, this)) 
Logger.minor(this, "Loading "+request.getPartAsString("load", 
MAX_PLUGIN_NAME_LENGTH));
                        pm.startPlugin(request.getPartAsString("load", 
MAX_PLUGIN_NAME_LENGTH), true);
@@ -111,6 +157,8 @@
                        ctx.sendReplyHeaders(302, "Found", headers, null, 0);
                }

+               }
+
        }

        public void handleGet(URI uri, HTTPRequest request, ToadletContext ctx)
@@ -118,10 +166,10 @@
                //String basepath = "/plugins/";
                String path = request.getPath();

-               // remove leading / and 'plugins/' from path
-               if(path.startsWith("/"))
-                       path = path.substring(1);
-               path = path.substring("plugins/".length());
+               // remove leading / and plugins/ from path
+               if(path.startsWith("/")) path = path.substring(1);
+               if(path.startsWith("plugins/")) path = 
path.substring("plugins/".length());
+
        if(Logger.shouldLog(Logger.MINOR, this))
                Logger.minor(this, "Pproxy fetching "+path);
                try {

Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2007-03-10 
20:38:53 UTC (rev 12089)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2007-03-10 
21:13:11 UTC (rev 12090)
@@ -262,6 +262,24 @@
                throw t;
        }

+       public String handleHTTPPost(String plugin, HTTPRequest request) throws 
PluginHTTPException {
+               FredPlugin handler = null;
+               synchronized (toadletList) {
+                       handler = (FredPlugin)toadletList.get(plugin);
+               }
+               /*if (handler == null)
+                       return null;
+                       */
+               
+               if (handler instanceof FredPluginHTTP)
+                       return 
((FredPluginHTTP)handler).handleHTTPPost(request);
+               
+               // no plugin found
+               PluginHTTPException t = new PluginHTTPException();
+               t.setReply("Plugin not found: " + plugin);
+               throw t;
+       }
+       
        public void killPlugin(String name) {
                PluginInfoWrapper pi = null;
                boolean found = false;


Reply via email to