Author: toad
Date: 2007-07-14 19:57:53 +0000 (Sat, 14 Jul 2007)
New Revision: 14120
Modified:
trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
trunk/freenet/src/freenet/clients/http/OpennetConnectionsToadlet.java
Log:
Add support for manually adding opennet refs... maybe
Modified: trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
2007-07-14 19:12:57 UTC (rev 14119)
+++ trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
2007-07-14 19:57:53 UTC (rev 14120)
@@ -1,8 +1,12 @@
package freenet.clients.http;
+import java.io.BufferedReader;
import java.io.IOException;
+import java.io.InputStreamReader;
import java.io.StringWriter;
import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
@@ -14,16 +18,21 @@
import java.util.Map;
import freenet.client.HighLevelSimpleClient;
+import freenet.io.comm.PeerParseException;
+import freenet.io.comm.ReferenceSignatureVerificationException;
import freenet.io.xfer.PacketThrottle;
import freenet.l10n.L10n;
+import freenet.node.DarknetPeerNode;
import freenet.node.FSParseException;
import freenet.node.Node;
import freenet.node.NodeClientCore;
import freenet.node.NodeStats;
import freenet.node.PeerManager;
+import freenet.node.PeerNode;
import freenet.node.PeerNodeStatus;
import freenet.node.Version;
import freenet.support.HTMLNode;
+import freenet.support.Logger;
import freenet.support.MultiValueTable;
import freenet.support.SimpleFieldSet;
import freenet.support.SizeUtil;
@@ -105,7 +114,10 @@
protected final DecimalFormat fix1 = new DecimalFormat("##0.0%");
public String supportedMethods() {
- return "GET";
+ if(this.acceptRefPosts())
+ return "GET, POST";
+ else
+ return "GET";
}
protected ConnectionsToadlet(Node n, NodeClientCore core,
HighLevelSimpleClient client) {
@@ -462,7 +474,159 @@
this.writeReply(ctx, 200, "text/html", "OK",
pageNode.generate());
}
+ protected abstract boolean acceptRefPosts();
+
+ /** Where to redirect to if there is an error */
+ protected abstract String defaultRedirectLocation();
+
+ public void handlePost(URI uri, final HTTPRequest request,
ToadletContext ctx) throws ToadletContextClosedException, IOException,
RedirectException {
+ boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
+
+ if(acceptRefPosts()) {
+ super.sendErrorPage(ctx, 403, "Unauthorized",
L10n.getString("Toadlet.unauthorized"));
+ return;
+ }
+
+ if(!ctx.isAllowedFullAccess()) {
+ super.sendErrorPage(ctx, 403, "Unauthorized",
L10n.getString("Toadlet.unauthorized"));
+ return;
+ }
+
+ String pass = request.getPartAsString("formPassword", 32);
+ if((pass == null) || !pass.equals(core.formPassword)) {
+ MultiValueTable headers = new MultiValueTable();
+ headers.put("Location", defaultRedirectLocation());
+ ctx.sendReplyHeaders(302, "Found", headers, null, 0);
+ if(logMINOR) Logger.minor(this, "No password ("+pass+"
should be "+core.formPassword+ ')');
+ return;
+ }
+
+ if (request.isPartSet("add")) {
+ // add a new node
+ String urltext = request.getPartAsString("url", 100);
+ urltext = urltext.trim();
+ String reftext = request.getPartAsString("ref", 2000);
+ reftext = reftext.trim();
+ if (reftext.length() < 200) {
+ reftext = request.getPartAsString("reffile",
2000);
+ reftext = reftext.trim();
+ }
+ String privateComment = null;
+ if(!isOpennet())
+ privateComment =
request.getPartAsString("peerPrivateNote", 250).trim();
+
+ StringBuffer ref = new StringBuffer(1024);
+ if (urltext.length() > 0) {
+ // fetch reference from a URL
+ BufferedReader in = null;
+ try {
+ URL url = new URL(urltext);
+ URLConnection uc = url.openConnection();
+ // FIXME get charset encoding from
uc.getContentType()
+ in = new BufferedReader(new
InputStreamReader(uc.getInputStream()));
+ String line;
+ while ( (line = in.readLine()) != null)
{
+ ref.append( line ).append('\n');
+ }
+ } catch (IOException e) {
+ this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"),
L10n.getString("DarknetConnectionsToadlet.cantFetchNoderefURL", new String[] {
"url" }, new String[] { urltext }));
+ return;
+ } finally {
+ if( in != null ){
+ in.close();
+ }
+ }
+ } else if (reftext.length() > 0) {
+ // read from post data or file upload
+ // this slightly scary looking regexp chops any
extra characters off the beginning or ends of lines and removes extra line
breaks
+ ref = new
StringBuffer(reftext.replaceAll(".*?((?:[\\w,\\.]+\\=[^\r\n]+?)|(?:End))[
\\t]*(?:\\r?\\n)+", "$1\n"));
+ } else {
+ this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"), l10n("noRefOrURL"));
+ request.freeParts();
+ return;
+ }
+ ref = new StringBuffer(ref.toString().trim());
+
+ request.freeParts();
+ // we have a node reference in ref
+ SimpleFieldSet fs;
+
+ try {
+ fs = new SimpleFieldSet(ref.toString(), false,
true);
+ if(!fs.getEndMarker().endsWith("End")) {
+ sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"),
+
L10n.getString("DarknetConnectionsToadlet.cantParseWrongEnding", new String[] {
"end" }, new String[] { fs.getEndMarker() }));
+ return;
+ }
+ fs.setEndMarker("End"); // It's always End ;
the regex above doesn't always grok this
+ } catch (IOException e) {
+ this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"),
+
L10n.getString("DarknetConnectionsToadlet.cantParseTryAgain", new String[] {
"error" }, new String[] { e.toString() }));
+ return;
+ } catch (Throwable t) {
+ this.sendErrorPage(ctx,
l10n("failedToAddNodeInternalErrorTitle"),
l10n("failedToAddNodeInternalError"), t);
+ return;
+ }
+ PeerNode pn;
+ try {
+ pn = node.createNewDarknetNode(fs);
+ if(isOpennet()) {
+ pn = node.createNewOpennetNode(fs);
+ } else {
+ pn = node.createNewDarknetNode(fs);
+
((DarknetPeerNode)pn).setPrivateDarknetCommentNote(privateComment);
+ }
+ } catch (FSParseException e1) {
+ this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"),
+
L10n.getString("DarknetConnectionsToadlet.cantParseTryAgain", new String[] {
"error" }, new String[] { e1.toString() }));
+ return;
+ } catch (PeerParseException e1) {
+ this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"),
+
L10n.getString("DarknetConnectionsToadlet.cantParseTryAgain", new String[] {
"error" }, new String[] { e1.toString() }));
+ return;
+ } catch (ReferenceSignatureVerificationException e1){
+ HTMLNode node = new HTMLNode("div");
+ node.addChild("#",
L10n.getString("DarknetConnectionsToadlet.invalidSignature", new String[] {
"error" }, new String[] { e1.toString() }));
+ node.addChild("br");
+ this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"), node);
+ return;
+ } catch (Throwable t) {
+ this.sendErrorPage(ctx,
l10n("failedToAddNodeInternalErrorTitle"),
l10n("failedToAddNodeInternalError"), t);
+ return;
+ }
+ if(Arrays.equals(pn.getIdentity(),
node.getDarknetIdentity())) {
+ this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"), l10n("triedToAddSelf"));
+ return;
+ }
+ if(!this.node.addPeerConnection(pn)) {
+ this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"), l10n("alreadyInReferences"));
+ return;
+ }
+
+ MultiValueTable headers = new MultiValueTable();
+ headers.put("Location", "/friends/");
+ ctx.sendReplyHeaders(302, "Found", headers, null, 0);
+ return;
+ } else handleAltPost(uri, request, ctx, logMINOR);
+
+
+ }
+
+ /** Adding a darknet node or an opennet node? */
+ protected abstract boolean isOpennet();
+
/**
+ * Rest of handlePost() method - supplied by subclass.
+ * @throws IOException
+ * @throws ToadletContextClosedException
+ * @throws RedirectException
+ */
+ protected void handleAltPost(URI uri, HTTPRequest request,
ToadletContext ctx, boolean logMINOR) throws ToadletContextClosedException,
IOException, RedirectException {
+ // Do nothing - we only support adding nodes
+ handleGet(uri, new HTTPRequestImpl(uri), ctx);
+ }
+
+ /**
* What should the heading (before "(more detailed)") be on the peers
table?
*/
protected abstract String getPeerListTitle();
Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
2007-07-14 19:12:57 UTC (rev 14119)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
2007-07-14 19:57:53 UTC (rev 14120)
@@ -67,123 +67,113 @@
return new DarknetComparator(sortBy, reversed);
}
- public void handlePost(URI uri, final HTTPRequest request,
ToadletContext ctx) throws ToadletContextClosedException, IOException,
RedirectException {
- boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);
-
- if(!ctx.isAllowedFullAccess()) {
- super.sendErrorPage(ctx, 403, "Unauthorized",
L10n.getString("Toadlet.unauthorized"));
- return;
+ protected boolean hasNameColumn() {
+ return true;
+ }
+
+ protected void drawNameColumn(HTMLNode peerRow, PeerNodeStatus
peerNodeStatus) {
+ // name column
+ peerRow.addChild("td", "class", "peer-name").addChild("a",
"href", "/send_n2ntm/?peernode_hashcode=" + peerNodeStatus.hashCode(),
((DarknetPeerNodeStatus)peerNodeStatus).getName());
+ }
+
+ protected boolean hasPrivateNoteColumn() {
+ return true;
+ }
+
+ protected void drawPrivateNoteColumn(HTMLNode peerRow, PeerNodeStatus
peerNodeStatus, boolean fProxyJavascriptEnabled) {
+ // private darknet node comment note column
+ DarknetPeerNodeStatus status = (DarknetPeerNodeStatus)
peerNodeStatus;
+ if(fProxyJavascriptEnabled) {
+ peerRow.addChild("td", "class",
"peer-private-darknet-comment-note").addChild("input", new String[] { "type",
"name", "size", "maxlength", "onBlur", "onChange", "value" }, new String[] {
"text", "peerPrivateNote_" + peerNodeStatus.hashCode(), "16", "250",
"peerNoteBlur();", "peerNoteChange();", status.getPrivateDarknetCommentNote()
});
+ } else {
+ peerRow.addChild("td", "class",
"peer-private-darknet-comment-note").addChild("input", new String[] { "type",
"name", "size", "maxlength", "value" }, new String[] { "text",
"peerPrivateNote_" + peerNodeStatus.hashCode(), "16", "250",
status.getPrivateDarknetCommentNote() });
}
-
- String pass = request.getPartAsString("formPassword", 32);
- if((pass == null) || !pass.equals(core.formPassword)) {
- MultiValueTable headers = new MultiValueTable();
- headers.put("Location", "/friends/");
- ctx.sendReplyHeaders(302, "Found", headers, null, 0);
- if(logMINOR) Logger.minor(this, "No password ("+pass+"
should be "+core.formPassword+ ')');
- return;
+ }
+
+ protected SimpleFieldSet getNoderef() {
+ return node.exportDarknetPublicFieldSet();
+ }
+
+ protected PeerNodeStatus[] getPeerNodeStatuses() {
+ return node.peers.getDarknetPeerNodeStatuses();
+ }
+
+ protected String getPageTitle(String titleCountString, String myName) {
+ return L10n.getString("DarknetConnectionsToadlet.fullTitle",
new String[] { "counts", "name" }, new String[] { titleCountString,
node.getMyName() } );
+ }
+
+ protected void drawAddPeerBox(HTMLNode contentNode, ToadletContext ctx)
{
+ // BEGIN PEER ADDITION BOX
+ HTMLNode peerAdditionInfobox = contentNode.addChild("div",
"class", "infobox infobox-normal");
+ peerAdditionInfobox.addChild("div", "class", "infobox-header",
l10n("addPeerTitle"));
+ HTMLNode peerAdditionContent =
peerAdditionInfobox.addChild("div", "class", "infobox-content");
+ HTMLNode peerAdditionForm =
ctx.addFormChild(peerAdditionContent, ".", "addPeerForm");
+ peerAdditionForm.addChild("#", l10n("pasteReference"));
+ peerAdditionForm.addChild("br");
+ peerAdditionForm.addChild("textarea", new String[] { "id",
"name", "rows", "cols" }, new String[] { "reftext", "ref", "8", "74" });
+ peerAdditionForm.addChild("br");
+ peerAdditionForm.addChild("#", (l10n("urlReference") + ' '));
+ peerAdditionForm.addChild("input", new String[] { "id", "type",
"name" }, new String[] { "refurl", "text", "url" });
+ peerAdditionForm.addChild("br");
+ peerAdditionForm.addChild("#", (l10n("fileReference") + ' '));
+ peerAdditionForm.addChild("input", new String[] { "id", "type",
"name" }, new String[] { "reffile", "file", "reffile" });
+ peerAdditionForm.addChild("br");
+ peerAdditionForm.addChild("#", (l10n("enterDescription") + '
'));
+ peerAdditionForm.addChild("input", new String[] { "id", "type",
"name", "size", "maxlength", "value" }, new String[] { "peerPrivateNote",
"text", "peerPrivateNote", "16", "250", "" });
+ peerAdditionForm.addChild("br");
+ peerAdditionForm.addChild("input", new String[] { "type",
"name", "value" }, new String[] { "submit", "add", l10n("add") });
+ }
+
+ protected boolean shouldDrawNoderefBox(boolean advancedModeEnabled) {
+ return true;
+ }
+
+ protected boolean showPeerActionsBox() {
+ return true;
+ }
+
+ protected void drawPeerActionSelectBox(HTMLNode peerForm, boolean
advancedModeEnabled) {
+ HTMLNode actionSelect = peerForm.addChild("select", new
String[] { "id", "name" }, new String[] { "action", "action" });
+ actionSelect.addChild("option", "value", "",
l10n("selectAction"));
+ actionSelect.addChild("option", "value", "send_n2ntm",
l10n("sendMessageToPeers"));
+ actionSelect.addChild("option", "value", "update_notes",
l10n("updateChangedPrivnotes"));
+ if(advancedModeEnabled) {
+ actionSelect.addChild("option", "value", "enable",
"Enable selected peers");
+ actionSelect.addChild("option", "value", "disable",
"Disable selected peers");
+ actionSelect.addChild("option", "value",
"set_burst_only", "On selected peers, set BurstOnly (only set this if you have
a static IP and are not NATed and neither is the peer)");
+ actionSelect.addChild("option", "value",
"clear_burst_only", "On selected peers, clear BurstOnly");
+ actionSelect.addChild("option", "value",
"set_listen_only", "On selected peers, set ListenOnly (not recommended)");
+ actionSelect.addChild("option", "value",
"clear_listen_only", "On selected peers, clear ListenOnly");
+ actionSelect.addChild("option", "value",
"set_allow_local", "On selected peers, set allowLocalAddresses (useful if you
are connecting to another node on the same LAN)");
+ actionSelect.addChild("option", "value",
"clear_allow_local", "On selected peers, clear allowLocalAddresses");
+ actionSelect.addChild("option", "value",
"set_ignore_source_port", "On selected peers, set ignoreSourcePort (try this if
behind an evil corporate firewall; otherwise not recommended)");
+ actionSelect.addChild("option", "value",
"clear_ignore_source_port", "On selected peers, clear ignoreSourcePort");
}
-
- if (request.isPartSet("add")) {
- // add a new node
- String urltext = request.getPartAsString("url", 100);
- urltext = urltext.trim();
- String reftext = request.getPartAsString("ref", 2000);
- reftext = reftext.trim();
- if (reftext.length() < 200) {
- reftext = request.getPartAsString("reffile",
2000);
- reftext = reftext.trim();
- }
- String privateComment =
request.getPartAsString("peerPrivateNote", 250).trim();
-
- StringBuffer ref = new StringBuffer(1024);
- if (urltext.length() > 0) {
- // fetch reference from a URL
- BufferedReader in = null;
- try {
- URL url = new URL(urltext);
- URLConnection uc = url.openConnection();
- // FIXME get charset encoding from
uc.getContentType()
- in = new BufferedReader(new
InputStreamReader(uc.getInputStream()));
- String line;
- while ( (line = in.readLine()) != null)
{
- ref.append( line ).append('\n');
- }
- } catch (IOException e) {
- this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"),
L10n.getString("DarknetConnectionsToadlet.cantFetchNoderefURL", new String[] {
"url" }, new String[] { urltext }));
- return;
- } finally {
- if( in != null ){
- in.close();
- }
- }
- } else if (reftext.length() > 0) {
- // read from post data or file upload
- // this slightly scary looking regexp chops any
extra characters off the beginning or ends of lines and removes extra line
breaks
- ref = new
StringBuffer(reftext.replaceAll(".*?((?:[\\w,\\.]+\\=[^\r\n]+?)|(?:End))[
\\t]*(?:\\r?\\n)+", "$1\n"));
- } else {
- this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"), l10n("noRefOrURL"));
- request.freeParts();
- return;
- }
- ref = new StringBuffer(ref.toString().trim());
+ actionSelect.addChild("option", "value", "", l10n("separator"));
+ actionSelect.addChild("option", "value", "remove",
l10n("removePeers"));
+ peerForm.addChild("input", new String[] { "type", "name",
"value" }, new String[] { "submit", "doAction", l10n("go") });
+ }
- request.freeParts();
- // we have a node reference in ref
- SimpleFieldSet fs;
-
- try {
- fs = new SimpleFieldSet(ref.toString(), false,
true);
- if(!fs.getEndMarker().endsWith("End")) {
- sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"),
-
L10n.getString("DarknetConnectionsToadlet.cantParseWrongEnding", new String[] {
"end" }, new String[] { fs.getEndMarker() }));
- return;
- }
- fs.setEndMarker("End"); // It's always End ;
the regex above doesn't always grok this
- } catch (IOException e) {
- this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"),
-
L10n.getString("DarknetConnectionsToadlet.cantParseTryAgain", new String[] {
"error" }, new String[] { e.toString() }));
- return;
- } catch (Throwable t) {
- this.sendErrorPage(ctx,
l10n("failedToAddNodeInternalErrorTitle"),
l10n("failedToAddNodeInternalError"), t);
- return;
- }
- DarknetPeerNode pn;
- try {
- pn = node.createNewDarknetNode(fs);
- pn.setPrivateDarknetCommentNote(privateComment);
- } catch (FSParseException e1) {
- this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"),
-
L10n.getString("DarknetConnectionsToadlet.cantParseTryAgain", new String[] {
"error" }, new String[] { e1.toString() }));
- return;
- } catch (PeerParseException e1) {
- this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"),
-
L10n.getString("DarknetConnectionsToadlet.cantParseTryAgain", new String[] {
"error" }, new String[] { e1.toString() }));
- return;
- } catch (ReferenceSignatureVerificationException e1){
- HTMLNode node = new HTMLNode("div");
- node.addChild("#",
L10n.getString("DarknetConnectionsToadlet.invalidSignature", new String[] {
"error" }, new String[] { e1.toString() }));
- node.addChild("br");
- this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"), node);
- return;
- } catch (Throwable t) {
- this.sendErrorPage(ctx,
l10n("failedToAddNodeInternalErrorTitle"),
l10n("failedToAddNodeInternalError"), t);
- return;
- }
- if(Arrays.equals(pn.getIdentity(),
node.getDarknetIdentity())) {
- this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"), l10n("triedToAddSelf"));
- return;
- }
- if(!this.node.addPeerConnection(pn)) {
- this.sendErrorPage(ctx, 200,
l10n("failedToAddNodeTitle"), l10n("alreadyInReferences"));
- return;
- }
-
- MultiValueTable headers = new MultiValueTable();
- headers.put("Location", "/friends/");
- ctx.sendReplyHeaders(302, "Found", headers, null, 0);
- return;
- } else if (request.isPartSet("doAction") &&
request.getPartAsString("action",25).equals("send_n2ntm")) {
+ protected String getPeerListTitle() {
+ return l10n("myFriends");
+ }
+
+ protected boolean acceptRefPosts() {
+ return true;
+ }
+
+ protected String defaultRedirectLocation() {
+ return "/friends/"; // FIXME
+ }
+
+ /**
+ * Implement other post actions than adding nodes.
+ * @throws IOException
+ * @throws ToadletContextClosedException
+ * @throws RedirectException
+ */
+ protected void handleAltPost(URI uri, HTTPRequest request,
ToadletContext ctx, boolean logMINOR) throws ToadletContextClosedException,
IOException, RedirectException {
+ if (request.isPartSet("doAction") &&
request.getPartAsString("action",25).equals("send_n2ntm")) {
HTMLNode pageNode =
ctx.getPageMaker().getPageNode(l10n("sendMessageTitle"), ctx);
HTMLNode contentNode =
ctx.getPageMaker().getContentNode(pageNode);
DarknetPeerNode[] peerNodes =
node.getDarknetConnections();
@@ -412,96 +402,9 @@
this.handleGet(uri, new HTTPRequestImpl(uri), ctx);
}
}
-
- protected boolean hasNameColumn() {
- return true;
- }
-
- protected void drawNameColumn(HTMLNode peerRow, PeerNodeStatus
peerNodeStatus) {
- // name column
- peerRow.addChild("td", "class", "peer-name").addChild("a",
"href", "/send_n2ntm/?peernode_hashcode=" + peerNodeStatus.hashCode(),
((DarknetPeerNodeStatus)peerNodeStatus).getName());
- }
- protected boolean hasPrivateNoteColumn() {
- return true;
+ protected boolean isOpennet() {
+ return false;
}
- protected void drawPrivateNoteColumn(HTMLNode peerRow, PeerNodeStatus
peerNodeStatus, boolean fProxyJavascriptEnabled) {
- // private darknet node comment note column
- DarknetPeerNodeStatus status = (DarknetPeerNodeStatus)
peerNodeStatus;
- if(fProxyJavascriptEnabled) {
- peerRow.addChild("td", "class",
"peer-private-darknet-comment-note").addChild("input", new String[] { "type",
"name", "size", "maxlength", "onBlur", "onChange", "value" }, new String[] {
"text", "peerPrivateNote_" + peerNodeStatus.hashCode(), "16", "250",
"peerNoteBlur();", "peerNoteChange();", status.getPrivateDarknetCommentNote()
});
- } else {
- peerRow.addChild("td", "class",
"peer-private-darknet-comment-note").addChild("input", new String[] { "type",
"name", "size", "maxlength", "value" }, new String[] { "text",
"peerPrivateNote_" + peerNodeStatus.hashCode(), "16", "250",
status.getPrivateDarknetCommentNote() });
- }
- }
-
- protected SimpleFieldSet getNoderef() {
- return node.exportDarknetPublicFieldSet();
- }
-
- protected PeerNodeStatus[] getPeerNodeStatuses() {
- return node.peers.getDarknetPeerNodeStatuses();
- }
-
- protected String getPageTitle(String titleCountString, String myName) {
- return L10n.getString("DarknetConnectionsToadlet.fullTitle",
new String[] { "counts", "name" }, new String[] { titleCountString,
node.getMyName() } );
- }
-
- protected void drawAddPeerBox(HTMLNode contentNode, ToadletContext ctx)
{
- // BEGIN PEER ADDITION BOX
- HTMLNode peerAdditionInfobox = contentNode.addChild("div",
"class", "infobox infobox-normal");
- peerAdditionInfobox.addChild("div", "class", "infobox-header",
l10n("addPeerTitle"));
- HTMLNode peerAdditionContent =
peerAdditionInfobox.addChild("div", "class", "infobox-content");
- HTMLNode peerAdditionForm =
ctx.addFormChild(peerAdditionContent, ".", "addPeerForm");
- peerAdditionForm.addChild("#", l10n("pasteReference"));
- peerAdditionForm.addChild("br");
- peerAdditionForm.addChild("textarea", new String[] { "id",
"name", "rows", "cols" }, new String[] { "reftext", "ref", "8", "74" });
- peerAdditionForm.addChild("br");
- peerAdditionForm.addChild("#", (l10n("urlReference") + ' '));
- peerAdditionForm.addChild("input", new String[] { "id", "type",
"name" }, new String[] { "refurl", "text", "url" });
- peerAdditionForm.addChild("br");
- peerAdditionForm.addChild("#", (l10n("fileReference") + ' '));
- peerAdditionForm.addChild("input", new String[] { "id", "type",
"name" }, new String[] { "reffile", "file", "reffile" });
- peerAdditionForm.addChild("br");
- peerAdditionForm.addChild("#", (l10n("enterDescription") + '
'));
- peerAdditionForm.addChild("input", new String[] { "id", "type",
"name", "size", "maxlength", "value" }, new String[] { "peerPrivateNote",
"text", "peerPrivateNote", "16", "250", "" });
- peerAdditionForm.addChild("br");
- peerAdditionForm.addChild("input", new String[] { "type",
"name", "value" }, new String[] { "submit", "add", l10n("add") });
- }
-
- protected boolean shouldDrawNoderefBox(boolean advancedModeEnabled) {
- return true;
- }
-
- protected boolean showPeerActionsBox() {
- return true;
- }
-
- protected void drawPeerActionSelectBox(HTMLNode peerForm, boolean
advancedModeEnabled) {
- HTMLNode actionSelect = peerForm.addChild("select", new
String[] { "id", "name" }, new String[] { "action", "action" });
- actionSelect.addChild("option", "value", "",
l10n("selectAction"));
- actionSelect.addChild("option", "value", "send_n2ntm",
l10n("sendMessageToPeers"));
- actionSelect.addChild("option", "value", "update_notes",
l10n("updateChangedPrivnotes"));
- if(advancedModeEnabled) {
- actionSelect.addChild("option", "value", "enable",
"Enable selected peers");
- actionSelect.addChild("option", "value", "disable",
"Disable selected peers");
- actionSelect.addChild("option", "value",
"set_burst_only", "On selected peers, set BurstOnly (only set this if you have
a static IP and are not NATed and neither is the peer)");
- actionSelect.addChild("option", "value",
"clear_burst_only", "On selected peers, clear BurstOnly");
- actionSelect.addChild("option", "value",
"set_listen_only", "On selected peers, set ListenOnly (not recommended)");
- actionSelect.addChild("option", "value",
"clear_listen_only", "On selected peers, clear ListenOnly");
- actionSelect.addChild("option", "value",
"set_allow_local", "On selected peers, set allowLocalAddresses (useful if you
are connecting to another node on the same LAN)");
- actionSelect.addChild("option", "value",
"clear_allow_local", "On selected peers, clear allowLocalAddresses");
- actionSelect.addChild("option", "value",
"set_ignore_source_port", "On selected peers, set ignoreSourcePort (try this if
behind an evil corporate firewall; otherwise not recommended)");
- actionSelect.addChild("option", "value",
"clear_ignore_source_port", "On selected peers, clear ignoreSourcePort");
- }
- actionSelect.addChild("option", "value", "", l10n("separator"));
- actionSelect.addChild("option", "value", "remove",
l10n("removePeers"));
- peerForm.addChild("input", new String[] { "type", "name",
"value" }, new String[] { "submit", "doAction", l10n("go") });
- }
-
- protected String getPeerListTitle() {
- return l10n("myFriends");
- }
-
}
Modified: trunk/freenet/src/freenet/clients/http/OpennetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/OpennetConnectionsToadlet.java
2007-07-14 19:12:57 UTC (rev 14119)
+++ trunk/freenet/src/freenet/clients/http/OpennetConnectionsToadlet.java
2007-07-14 19:57:53 UTC (rev 14120)
@@ -71,4 +71,16 @@
return
L10n.getString("OpennetConnectionsToadlet.peersListTitle");
}
+ protected boolean acceptRefPosts() {
+ return true;
+ }
+
+ protected String defaultRedirectLocation() {
+ return "/opennet/";
+ }
+
+ protected boolean isOpennet() {
+ return true;
+ }
+
}