r27143 - in trunk/freenet/src/freenet: io/comm node

[email protected] Tue, 21 Apr 2009 09:17:53 +0000
Newsgroups gmane.network.freenet.cvs
Message-ID <[email protected]>
Author: j16sdiz
Date: 2009-04-21 09:17:51 +0000 (Tue, 21 Apr 2009)
New Revision: 27143

Modified:
   trunk/freenet/src/freenet/io/comm/DMT.java
   trunk/freenet/src/freenet/io/comm/MessageFilter.java
   trunk/freenet/src/freenet/node/RequestSender.java
   trunk/freenet/src/freenet/node/SSKInsertSender.java
Log:
Remove DMT.FNPSSKDataFound

Was deprecated with FNPSSKDataFoundHeaders/FNPSSKDataFoundData since r18601.

Modified: trunk/freenet/src/freenet/io/comm/DMT.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/DMT.java	2009-04-21 09:17:25 UTC (rev 27142)
+++ trunk/freenet/src/freenet/io/comm/DMT.java	2009-04-21 09:17:51 UTC (rev 27143)
@@ -675,20 +675,6 @@
 		return msg;
 	}
 	
-	public static final MessageType FNPSSKDataFound = new MessageType("FNPSSKDataFound", PRIORITY_LOW) {{
-		addField(UID, Long.class);
-		addField(BLOCK_HEADERS, ShortBuffer.class);
-		addField(DATA, ShortBuffer.class);
-	}};
-	
-	public static Message createFNPSSKDataFound(long uid, byte[] headers, byte[] data) {
-		Message msg = new Message(FNPSSKDataFound);
-		msg.set(UID, uid);
-		msg.set(BLOCK_HEADERS, new ShortBuffer(headers));
-		msg.set(DATA, new ShortBuffer(data));
-		return msg;
-	}
-	
 	public static final MessageType FNPSSKDataFoundHeaders = new MessageType("FNPSSKDataFoundHeaders", PRIORITY_LOW) {{
 		addField(UID, Long.class);
 		addField(BLOCK_HEADERS, ShortBuffer.class);

Modified: trunk/freenet/src/freenet/io/comm/MessageFilter.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/MessageFilter.java	2009-04-21 09:17:25 UTC (rev 27142)
+++ trunk/freenet/src/freenet/io/comm/MessageFilter.java	2009-04-21 09:17:51 UTC (rev 27143)
@@ -51,14 +51,25 @@
     private long _oldBootID;
     private AsyncMessageFilterCallback _callback;
     private boolean _setTimeout = false;
+    private final boolean nothing; 
 
     private MessageFilter() {
         _timeoutFromWait = true;
+        nothing = true;
     }
-
+    
+    private MessageFilter(boolean noop) {
+        _timeoutFromWait = true;
+        this.nothing = noop; 
+    }
+    
     public static MessageFilter create() {
         return new MessageFilter();
     }
+    
+    public static MessageFilter nothing() {
+        return new MessageFilter(true);
+    }
 
     void onStartWaiting(boolean waitFor) {
     	synchronized(this) {
@@ -179,6 +190,8 @@
 		if ((_or != null) && (_or.match(m))) {
 			return true;
 		}
+		if (nothing)
+			return false;
 		if ((_type != null) && (!_type.equals(m.getSpec()))) {
 			return false;
 		}

Modified: trunk/freenet/src/freenet/node/RequestSender.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestSender.java	2009-04-21 09:17:25 UTC (rev 27142)
+++ trunk/freenet/src/freenet/node/RequestSender.java	2009-04-21 09:17:51 UTC (rev 27143)
@@ -319,11 +319,10 @@
         		}
         	} else {
         		// Data, possibly followed by pubkey
-        		MessageFilter mfDF = MessageFilter.create().setSource(pn).setField(DMT.UID, uid).setTimeout(GET_OFFER_TIMEOUT).setType(DMT.FNPSSKDataFound);
         		MessageFilter mfAltDF = MessageFilter.create().setSource(pn).setField(DMT.UID, uid).setTimeout(GET_OFFER_TIMEOUT).setType(DMT.FNPSSKDataFoundHeaders);
         		Message reply;
 				try {
-					reply = node.usm.waitFor(mfDF.or(mfRO.or(mfGetInvalid.or(mfAltDF))), this);
+					reply = node.usm.waitFor(mfRO.or(mfGetInvalid.or(mfAltDF)), this);
 				} catch (DisconnectedException e) {
 					if(logMINOR)
 						Logger.minor(this, "Disconnected: "+pn+" getting offer for "+key);
@@ -345,50 +344,6 @@
         				Logger.minor(this, "Node "+pn+" rejected FNPGetOfferedKey as invalid with reason "+reply.getShort(DMT.REASON));
         			offers.deleteLastOffer();
         			continue;
-        		} else if(reply.getSpec() == DMT.FNPSSKDataFound) {
-        			// Receive the data
-        			headers = ((ShortBuffer) reply.getObject(DMT.BLOCK_HEADERS)).getData();
-        			sskData = ((ShortBuffer) reply.getObject(DMT.DATA)).getData();
-        			if(pubKey == null) {
-        				MessageFilter mfPK = MessageFilter.create().setSource(pn).setField(DMT.UID, uid).setTimeout(GET_OFFER_TIMEOUT).setType(DMT.FNPSSKPubKey);
-        				Message pk;
-						try {
-							pk = node.usm.waitFor(mfPK, this);
-						} catch (DisconnectedException e) {
-							if(logMINOR)
-								Logger.minor(this, "Disconnected: "+pn+" getting pubkey for offer for "+key);
-							offers.deleteLastOffer();
-							continue;
-						}
-        				if(pk == null) {
-        					Logger.error(this, "Got data but not pubkey from "+pn+" for offer for "+key);
-        					offers.deleteLastOffer();
-        					continue;
-        				}
-        				try {
-							pubKey = DSAPublicKey.create(((ShortBuffer)pk.getObject(DMT.PUBKEY_AS_BYTES)).getData());
-						} catch (CryptFormatException e) {
-							Logger.error(this, "Bogus pubkey from "+pn+" for offer for "+key+" : "+e, e);
-        					offers.deleteLastOffer();
-							continue;
-						}
-        			}
-        			
-        			try {
-						((NodeSSK)key).setPubKey(pubKey);
-					} catch (SSKVerifyException e) {
-						Logger.error(this, "Bogus SSK data from "+pn+" for offer for "+key+" : "+e, e);
-    					offers.deleteLastOffer();
-						continue;
-					}
-        			
-        			if(finishSSKFromGetOffer(pn)) {
-        				if(logMINOR) Logger.minor(this, "Successfully fetched SSK from offer from "+pn+" for "+key);
-        				return;
-        			} else {
-                		offers.deleteLastOffer();
-        				continue;
-        			}
         		} else if(reply.getSpec() == DMT.FNPSSKDataFoundHeaders) {
         			headers = ((ShortBuffer) reply.getObject(DMT.BLOCK_HEADERS)).getData();
         			// Wait for the data
@@ -631,10 +586,9 @@
                 MessageFilter mfRejectedOverload = MessageFilter.create().setSource(next).setField(DMT.UID, uid).setTimeout(FETCH_TIMEOUT).setType(DMT.FNPRejectedOverload);
                 MessageFilter mfPubKey = MessageFilter.create().setSource(next).setField(DMT.UID, uid).setTimeout(FETCH_TIMEOUT).setType(DMT.FNPSSKPubKey);
             	MessageFilter mfRealDFCHK = MessageFilter.create().setSource(next).setField(DMT.UID, uid).setTimeout(FETCH_TIMEOUT).setType(DMT.FNPCHKDataFound);
-            	MessageFilter mfRealDFSSK = MessageFilter.create().setSource(next).setField(DMT.UID, uid).setTimeout(FETCH_TIMEOUT).setType(DMT.FNPSSKDataFound);
             	MessageFilter mfAltDFSSKHeaders = MessageFilter.create().setSource(next).setField(DMT.UID, uid).setTimeout(FETCH_TIMEOUT).setType(DMT.FNPSSKDataFoundHeaders);
             	MessageFilter mfAltDFSSKData = MessageFilter.create().setSource(next).setField(DMT.UID, uid).setTimeout(FETCH_TIMEOUT).setType(DMT.FNPSSKDataFoundData);
-                MessageFilter mf = mfDNF.or(mfRF.or(mfRouteNotFound.or(mfRejectedOverload.or(mfDF.or(mfPubKey.or(mfRealDFCHK.or(mfRealDFSSK.or(mfAltDFSSKHeaders.or(mfAltDFSSKData)))))))));
+                MessageFilter mf = mfDNF.or(mfRF.or(mfRouteNotFound.or(mfRejectedOverload.or(mfDF.or(mfPubKey.or(mfRealDFCHK.or(mfAltDFSSKHeaders.or(mfAltDFSSKData))))))));
 
                 
             	try {
@@ -922,28 +876,7 @@
     				}
     				continue;
             	}
-            	
-            	if(msg.getSpec() == DMT.FNPSSKDataFound) {
-
-            		if(logMINOR) Logger.minor(this, "Got data and headers on "+uid);
-            		
-            		if(!(key instanceof NodeSSK)) {
-            			Logger.error(this, "Got "+msg+" but expected a different key type from "+next);
-                		node.failureTable.onFailed(key, next, htl, (int) (System.currentTimeMillis() - timeSentRequest));
-            			break;
-            		}
-            		
-                	headers = ((ShortBuffer)msg.getObject(DMT.BLOCK_HEADERS)).getData();
-            		
-                	sskData = ((ShortBuffer)msg.getObject(DMT.DATA)).getData();
-                	
-                	if(pubKey != null) {
-                		finishSSK(next);
-                		return;
-                	}
-                	continue;
-            	}
-            	
+            	            	
             	if(msg.getSpec() == DMT.FNPSSKDataFoundData) {
             		
             		if(logMINOR) Logger.minor(this, "Got data on "+uid);
@@ -1049,7 +982,7 @@
     	if(key instanceof NodeCHK)
     		return MessageFilter.create().setSource(next).setField(DMT.UID, uid).setTimeout(FETCH_TIMEOUT).setType(DMT.FNPCHKDataFound);
     	else if(key instanceof NodeSSK) {
-    		return MessageFilter.create().setSource(next).setField(DMT.UID, uid).setTimeout(FETCH_TIMEOUT).setType(DMT.FNPSSKDataFound);
+    		return MessageFilter.nothing();
     	}
     	else throw new IllegalStateException("Unknown keytype: "+key);
 	}

Modified: trunk/freenet/src/freenet/node/SSKInsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/SSKInsertSender.java	2009-04-21 09:17:25 UTC (rev 27142)
+++ trunk/freenet/src/freenet/node/SSKInsertSender.java	2009-04-21 09:17:51 UTC (rev 27143)
@@ -310,9 +310,8 @@
             mfRejectedOverload.clearOr();
             MessageFilter mfRouteNotFound = MessageFilter.create().setSource(next).setField(DMT.UID, uid).setTimeout(SEARCH_TIMEOUT).setType(DMT.FNPRouteNotFound);
             MessageFilter mfDataInsertRejected = MessageFilter.create().setSource(next).setField(DMT.UID, uid).setTimeout(SEARCH_TIMEOUT).setType(DMT.FNPDataInsertRejected);
-            MessageFilter mfDataFound = MessageFilter.create().setSource(next).setField(DMT.UID, uid).setTimeout(SEARCH_TIMEOUT).setType(DMT.FNPSSKDataFound);
             
-            mf = mfRouteNotFound.or(mfInsertReply.or(mfRejectedOverload.or(mfDataFound.or(mfDataInsertRejected))));
+            mf = mfRouteNotFound.or(mfInsertReply.or(mfRejectedOverload.or(mfDataInsertRejected)));
             
             while (true) {
 				try {
@@ -374,60 +373,6 @@
 					break; // What else can we do?
 				}
 				
-				if (msg.getSpec() == DMT.FNPSSKDataFound) {
-					/**
-					 * Data was already on node, and was NOT equal to what we sent. COLLISION!
-					 * 
-					 * We can either accept the old data or the new data.
-					 * OLD DATA:
-					 * - KSK-based stuff is usable. Well, somewhat; a node could spoof KSKs on
-					 * receiving an insert, (if it knows them in advance), but it cannot just 
-					 * start inserts to overwrite old SSKs.
-					 * - You cannot "update" an SSK.
-					 * NEW DATA:
-					 * - KSK-based stuff not usable. (Some people think this is a good idea!).
-					 * - Illusion of updatability. (VERY BAD IMHO, because it's not really
-					 * updatable... FIXME implement TUKs; would determine latest version based
-					 * on version number, and propagate on request with a certain probability or
-					 * according to time. However there are good arguments to do updating at a
-					 * higher level (e.g. key bottleneck argument), and TUKs should probably be 
-					 * distinct from SSKs.
-					 * 
-					 * For now, accept the "old" i.e. preexisting data.
-					 */
-					Logger.normal(this, "Got collision on "+myKey+" ("+uid+") sending to "+next.getPeer());
-					
-					// FNPSSKDataFound == FNPInsertRequest
-					
-					// Lets assume the pubkeys are the same (otherwise SHA-256 has been broken
-					// and we're completely screwed anyway).
-					
-					byte[] newData = ((ShortBuffer) msg.getObject(DMT.DATA)).getData();
-					byte[] newHeaders = ((ShortBuffer) msg.getObject(DMT.BLOCK_HEADERS)).getData();
-					if(Arrays.equals(newData, data) && Arrays.equals(newHeaders, headers)) {
-						Logger.error(this, "Node sent us collision but data and headers are identical!! from "+next+" on "+uid);
-						// Try next node, this one is evil!
-						break;
-					}
-					
-					try {
-						block = new SSKBlock(newData, newHeaders, myKey, false);
-					} catch (SSKVerifyException e) {
-						Logger.error(this, "Node sent us collision but got corrupt SSK!! from "+next+" on "+uid);
-						// Try next node, no way to tell this one about its mistake as it's stopped listening. FIXME should it?
-						break;
-					}
-					
-					data = newData;
-					headers = newHeaders;
-					synchronized(this) {
-						hasRecentlyCollided = true;
-						hasCollided = true;
-						notifyAll();
-					}
-					continue;
-				}
-				
 				if(msg.getSpec() == DMT.FNPSSKDataFoundHeaders) {
 					/**
 					 * Data was already on node, and was NOT equal to what we sent. COLLISION!