Update of /cvsroot/freenet/Freenet0.7Rewrite/src/freenet/node
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11269/src/freenet/node
Modified Files:
Version.java PeerManager.java TextModeClientInterface.java
PeerNode.java
Log Message:
132:
Don't add a node twice to PeerManager.
Interface improvements for CONNECT at request of ian.
PeerNode.equals, hashCode.
Index: Version.java
===================================================================
RCS file: /cvsroot/freenet/Freenet0.7Rewrite/src/freenet/node/Version.java,v
retrieving revision 1.126
retrieving revision 1.127
diff -u -w -r1.126 -r1.127
--- Version.java 7 Sep 2005 15:22:16 -0000 1.126
+++ Version.java 7 Sep 2005 18:19:01 -0000 1.127
@@ -20,7 +20,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- public static final int buildNumber = 131;
+ public static final int buildNumber = 132;
/** Oldest build of Fred we will talk to */
public static final int lastGoodBuild = 131;
Index: PeerManager.java
===================================================================
RCS file: /cvsroot/freenet/Freenet0.7Rewrite/src/freenet/node/PeerManager.java,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -w -r1.27 -r1.28
--- PeerManager.java 7 Sep 2005 15:22:16 -0000 1.27
+++ PeerManager.java 7 Sep 2005 18:19:01 -0000 1.28
@@ -93,7 +93,7 @@
public synchronized boolean addPeer(PeerNode pn) {
for(int i=0;i<myPeers.length;i++) {
- if(myPeers[i] == pn) return false;
+ if(myPeers[i].equals(pn)) return false;
}
PeerNode[] newMyPeers = new PeerNode[myPeers.length+1];
System.arraycopy(myPeers, 0, newMyPeers, 0, myPeers.length);
Index: TextModeClientInterface.java
===================================================================
RCS file:
/cvsroot/freenet/Freenet0.7Rewrite/src/freenet/node/TextModeClientInterface.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -w -r1.18 -r1.19
--- TextModeClientInterface.java 7 Sep 2005 14:56:45 -0000 1.18
+++ TextModeClientInterface.java 7 Sep 2005 18:19:01 -0000 1.19
@@ -194,19 +194,7 @@
content = line;
} else {
// Multiple line insert
- StringBuffer sb = new StringBuffer(1000);
- while(true) {
- try {
- line = reader.readLine();
- if(line == null) throw new EOFException();
- } catch (IOException e1) {
- System.err.println("Bye... ("+e1+")");
- return;
- }
- if(line.equals(".")) break;
- sb.append(line).append('\n');
- }
- content = sb.toString();
+ content = readLines(reader, false);
}
// Insert
byte[] data = content.getBytes();
@@ -292,19 +280,8 @@
e.printStackTrace(System.err);
}
} else {
- StringBuffer sb = new StringBuffer(1000);
- while(true) {
- try {
- line = reader.readLine();
- if(line == null) throw new EOFException();
- } catch (IOException e1) {
- System.err.println("Bye... ("+e1+")");
- return;
- }
- if(line.equals(".")) break;
- sb.append(line).append('\n');
- }
- String content = sb.toString();
+ String content = readLines(reader, true);
+ if(content == null) return;
connect(content);
}
} else if(line.startsWith("NAME:")) {
@@ -322,6 +299,76 @@
}
/**
+ * @return A block of text, input from stdin, ending with a
+ * . on a line by itself. Does some mangling for a fieldset if
+ * isFieldSet.
+ */
+ private String readLines(BufferedReader reader, boolean isFieldSet) {
+ StringBuffer sb = new StringBuffer(1000);
+ boolean breakflag = false;
+ while(true) {
+ String line;
+ try {
+ line = reader.readLine();
+ if(line == null) throw new EOFException();
+ } catch (IOException e1) {
+ System.err.println("Bye... ("+e1+")");
+ return null;
+ }
+ if(line.equals(".")) break;
+ if(isFieldSet) {
+ // Mangling
+ // First trim
+ line = line.trim();
+ if(line.equals("End")) {
+ breakflag = true;
+ } else {
+ if(line.endsWith("End") &&
+
Character.isWhitespace(line.charAt(line.length()-("End".length()+1)))) {
+ line = "End";
+ breakflag = true;
+ } else {
+ int idx = line.indexOf('=');
+ if(idx < 0) {
+ System.err.println("No = and no End in line:
"+line);
+ breakflag = true;
+ } else {
+ if(idx > 0) {
+ String after;
+ if(idx == line.length()-1)
+ after = "";
+ else
+ after = line.substring(idx+1);
+ String before = line.substring(0, idx);
+ before = before.trim();
+ int x = 0;
+ for(int j=before.length()-1;j>=0;j--) {
+ char c = before.charAt(j);
+ if(c == '.' ||
Character.isLetterOrDigit(c)) {
+ // Valid character for field
+ } else {
+ x=j+1;
+ break;
+ }
+ }
+ before = before.substring(x);
+ line = before + '=' + line.substring(idx+1);
+ System.out.println(line);
+ } else {
+ System.err.println("Invalid empty field name");
+ breakflag = true;
+ }
+ }
+ }
+ }
+ }
+ sb.append(line).append('\n');
+ if(breakflag) break;
+ }
+ return sb.toString();
+ }
+
+ /**
* Connect to a node, given its reference.
*/
private void connect(String content) {
Index: PeerNode.java
===================================================================
RCS file: /cvsroot/freenet/Freenet0.7Rewrite/src/freenet/node/PeerNode.java,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -w -r1.37 -r1.38
--- PeerNode.java 25 Aug 2005 17:28:19 -0000 1.37
+++ PeerNode.java 7 Sep 2005 18:19:01 -0000 1.38
@@ -26,6 +26,7 @@
import freenet.io.comm.PeerContext;
import freenet.io.comm.PeerParseException;
import freenet.io.xfer.PacketThrottle;
+import freenet.support.Fields;
import freenet.support.HexUtil;
import freenet.support.Logger;
import freenet.support.SimpleFieldSet;
@@ -102,6 +103,9 @@
/** Hash of node identity. Used as setup key. */
final byte[] identityHash;
+ /** Integer hash of node identity. Used as hashCode(). */
+ final int hashCode;
+
/** The Node we serve */
final Node node;
@@ -191,6 +195,7 @@
if(identity == null) throw new FSParseException("No identity");
identityHash = md.digest(identity);
+ hashCode = Fields.hashCode(identityHash);
version = fs.get("version");
String locationString = fs.get("location");
if(locationString == null) throw new FSParseException("No location");
@@ -906,4 +911,16 @@
requeueMessageItems(new MessageItem[] {mi}, 0, 1, true);
}
}
+
+ public boolean equals(Object o) {
+ if(o == this) return true;
+ if(o instanceof PeerNode) {
+ PeerNode pn = (PeerNode) o;
+ return Arrays.equals(pn.identity, identity);
+ } else return false;
+ }
+
+ public int hashCode() {
+ return hashCode;
+ }
}