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;