Author: sashee
Date: 2009-03-28 15:31:47 +0000 (Sat, 28 Mar 2009)
New Revision: 26255
Modified:
trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
Log:
Improved the peer adder module:
-It is now possible to add multiple peers, instead of just 1. A result page
will notify about the successes/failures
-The 2000 byte limit for uploading peers via file is removed
Modified: trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
2009-03-28 12:42:05 UTC (rev 26254)
+++ trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
2009-03-28 15:31:47 UTC (rev 26255)
@@ -145,6 +145,7 @@
protected final PeerManager peers;
protected boolean isReversed = false;
protected final DecimalFormat fix1 = new DecimalFormat("##0.0%");
+ public enum PeerAdditionReturnCodes{ OK, WRONG_ENCODING, CANT_PARSE,
INTERNAL_ERROR, INVALID_SIGNATURE, TRY_TO_ADD_SELF, ALREADY_IN_REFERENCE}
@Override
public String supportedMethods() {
@@ -511,7 +512,7 @@
String reftext = request.getPartAsString("ref",
Integer.MAX_VALUE);
reftext = reftext.trim();
if (reftext.length() < 200) {
- reftext = request.getPartAsString("reffile",
2000);
+ reftext = request.getPartAsString("reffile",
Integer.MAX_VALUE);
reftext = reftext.trim();
}
String privateComment = null;
@@ -551,60 +552,47 @@
ref = new StringBuilder(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;
+
+ //Split the references string, because the peers are
added individually
+ String[] nodesToAdd=ref.toString().split("End");
+ //The peer's additions results
+ Map<PeerAdditionReturnCodes,Integer> results=new
HashMap<PeerAdditionReturnCodes, Integer>();
+ for(int i=0;i<nodesToAdd.length;i++){
+ //We need to trim then concat 'End' to the
node's reference, this way we have a normal reference(the split() removes the
'End'-s!)
+ PeerAdditionReturnCodes
result=addNewNode(nodesToAdd[i].trim().concat("\nEnd"), privateComment);
+ //Store the result
+ if(results.containsKey(result)==false){
+ results.put(result, new Integer(0));
}
- 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;
+ results.put(result, results.get(result)+1);
}
- PeerNode pn;
- try {
- if(isOpennet()) {
- pn = node.createNewOpennetNode(fs);
- } else {
- pn = node.createNewDarknetNode(fs);
-
((DarknetPeerNode)pn).setPrivateDarknetCommentNote(privateComment);
+
+ HTMLNode pageNode =
ctx.getPageMaker().getPageNode(l10n("reportOfNodeAddition"), ctx);
+ HTMLNode contentNode =
ctx.getPageMaker().getContentNode(pageNode);
+
+ //We create a table to show the results
+ HTMLNode detailedStatusBox=new HTMLNode("table");
+ //Header of the table
+ detailedStatusBox.addChild(new
HTMLNode("tr")).addChildren(new HTMLNode[]{new
HTMLNode("th",l10n("resultName")),new HTMLNode("th",l10n("numOfResults"))});
+ HTMLNode statusBoxTable=detailedStatusBox.addChild(new
HTMLNode("tbody"));
+ //Iterate through the return codes
+ for(PeerAdditionReturnCodes
returnCode:PeerAdditionReturnCodes.values()){
+ if(results.containsKey(returnCode)){
+ //Add a <tr> and 2 <td> with the name
of the code and the number of occasions it happened. If the code is OK, we use
green, red elsewhere.
+ statusBoxTable.addChild(new
HTMLNode("tr","style","color:"+(returnCode==PeerAdditionReturnCodes.OK?"green":"red"))).addChildren(new
HTMLNode[]{new
HTMLNode("td",l10n("peerAdditionCode."+returnCode.toString())),new
HTMLNode("td",results.get(returnCode).toString())});
}
- } 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;
- }
+
+ HTMLNode infobox =
contentNode.addChild(ctx.getPageMaker().getInfobox("infobox",l10n("reportOfNodeAddition")));
+ HTMLNode infoboxContent =
ctx.getPageMaker().getContentNode(infobox);
+ infoboxContent.addChild(detailedStatusBox);
+ infoboxContent.addChild("br");
+ infoboxContent.addChild("a", "href", ".",
l10n("returnToPrevPage"));
+ infoboxContent.addChild("br");
+ addHomepageLink(infoboxContent);
+ writeHTMLReply(ctx, 500, l10n("reportOfNodeAddition"),
pageNode.generate());
+
MultiValueTable<String, String> headers = new
MultiValueTable<String, String>();
headers.put("Location", defaultRedirectLocation());
ctx.sendReplyHeaders(302, "Found", headers, null, 0);
@@ -613,6 +601,50 @@
}
+
+ /** Adds a new node. If any error arises, it returns the appropriate
return code.
+ * @param nodeReference - The reference to the new node
+ * @param privateComment - The private comment when adding a Darknet
node
+ * @return The result of the addition*/
+ private PeerAdditionReturnCodes addNewNode(String nodeReference,String
privateComment){
+ SimpleFieldSet fs;
+
+ try {
+ fs = new SimpleFieldSet(nodeReference.toString(),
false, true);
+ if(!fs.getEndMarker().endsWith("End")) {
+ return PeerAdditionReturnCodes.WRONG_ENCODING;
+ }
+ fs.setEndMarker("End"); // It's always End ; the regex
above doesn't always grok this
+ } catch (IOException e) {
+ return PeerAdditionReturnCodes.CANT_PARSE;
+ } catch (Throwable t) {
+ return PeerAdditionReturnCodes.INTERNAL_ERROR;
+ }
+ PeerNode pn;
+ try {
+ if(isOpennet()) {
+ pn = node.createNewOpennetNode(fs);
+ } else {
+ pn = node.createNewDarknetNode(fs);
+
((DarknetPeerNode)pn).setPrivateDarknetCommentNote(privateComment);
+ }
+ } catch (FSParseException e1) {
+ return PeerAdditionReturnCodes.CANT_PARSE;
+ } catch (PeerParseException e1) {
+ return PeerAdditionReturnCodes.CANT_PARSE;
+ } catch (ReferenceSignatureVerificationException e1){
+ return PeerAdditionReturnCodes.INVALID_SIGNATURE;
+ } catch (Throwable t) {
+ return PeerAdditionReturnCodes.INTERNAL_ERROR;
+ }
+ if(Arrays.equals(pn.getIdentity(), node.getDarknetIdentity())) {
+ return PeerAdditionReturnCodes.TRY_TO_ADD_SELF;
+ }
+ if(!this.node.addPeerConnection(pn)) {
+ return PeerAdditionReturnCodes.ALREADY_IN_REFERENCE;
+ }
+ return PeerAdditionReturnCodes.OK;
+ }
/** Adding a darknet node or an opennet node? */
protected abstract boolean isOpennet();
Modified: trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
--- trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2009-03-28
12:42:05 UTC (rev 26254)
+++ trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties 2009-03-28
15:31:47 UTC (rev 26255)
@@ -168,7 +168,7 @@
ContentFilter.textPlainWriteAdvice=Plain text - not dangerous unless you
include compromizing information
DarknetConnectionsToadlet.activityTitle=Current Activity
DarknetConnectionsToadlet.add=Add
-DarknetConnectionsToadlet.addPeerTitle=Add another peer
+DarknetConnectionsToadlet.addPeerTitle=Add another peers
DarknetConnectionsToadlet.alreadyInReferences=We already have the given
reference.
DarknetConnectionsToadlet.backedOff=Connected but backed off: These peers are
connected but we're backed off from them, so the node is not routing requests
to them.
DarknetConnectionsToadlet.backedOffShort=Backed off
@@ -254,6 +254,17 @@
DarknetConnectionsToadlet.updateChangedPrivnotes=Update changed private notes
DarknetConnectionsToadlet.urlReference=OR enter the URL of the node reference
here:
DarknetConnectionsToadlet.versionTitle=Version
+DarknetConnectionsToadlet.reportOfNodeAddition=Report of node additions
+DarknetConnectionsToadlet.returnToPrevPage=Return to previous page
+DarknetConnectionsToadlet.peerAdditionCode.OK=Added successfully
+DarknetConnectionsToadlet.peerAdditionCode.TRY_TO_ADD_SELF=Tried to add self
+DarknetConnectionsToadlet.peerAdditionCode.WRONG_ENCODING=Wrong encoding
+DarknetConnectionsToadlet.peerAdditionCode.CANT_PARSE=Can't parse
+DarknetConnectionsToadlet.peerAdditionCode.INTERNAL_ERROR=Internal error
+DarknetConnectionsToadlet.peerAdditionCode.INVALID_SIGNATURE=Invalid signature
+DarknetConnectionsToadlet.peerAdditionCode.ALREADY_IN_REFERENCE=Already in
reference
+DarknetConnectionsToadlet.resultName=Name of result
+DarknetConnectionsToadlet.numOfResults=Number of results
ExtOldAgeUserAlert.extTooOld=Your freenet-ext.jar file seems to be outdated:
we strongly advise you to update it using
http://downloads.freenetproject.org/alpha/freenet-ext.jar.
ExtOldAgeUserAlert.extTooOldTitle=Freenet-ext too old
ExtOldAgeUserAlert.extTooOldShort=Your freenet-ext.jar is out of date. Please
upgrade.
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs