Author: zothar
Date: 2006-08-12 00:24:31 +0000 (Sat, 12 Aug 2006)
New Revision: 10043

Modified:
   trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/PeerManager.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/useralerts/BuildOldAgeUserAlert.java
   trunk/freenet/src/freenet/node/useralerts/ExtOldAgeUserAlert.java
   trunk/freenet/src/freenet/node/useralerts/IPUndetectedUserAlert.java
   trunk/freenet/src/freenet/node/useralerts/MeaningfulNodeNameUserAlert.java
   trunk/freenet/src/freenet/node/useralerts/N2NTMUserAlert.java
   trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java
   trunk/freenet/src/freenet/node/useralerts/RevocationKeyFoundUserAlert.java
   trunk/freenet/src/freenet/node/useralerts/SimpleUserAlert.java
   
trunk/freenet/src/freenet/node/useralerts/UpdatedVersionAvailableUserAlert.java
   trunk/freenet/src/freenet/node/useralerts/UserAlert.java
Log:
Add an extra peer data facility
Implement persistent N2NTMs using the new extra peer data facility
UserAlerts now have a new onDismiss() method


Modified: trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java  2006-08-11 
21:33:20 UTC (rev 10042)
+++ trunk/freenet/src/freenet/clients/http/WelcomeToadlet.java  2006-08-12 
00:24:31 UTC (rev 10043)
@@ -156,7 +156,8 @@
                                
if(request.getIntParam("disable")==alerts[i].hashCode()){
                                        UserAlert alert = alerts[i];
                                        // Won't be dismissed if it's not 
allowed anyway
-                                       if(alert.userCanDismiss()  && 
alert.shouldUnregisterOnDismiss()) {
+                                       if(alert.userCanDismiss() && 
alert.shouldUnregisterOnDismiss()) {
+                                               alert.onDismiss();
                                                
Logger.normal(this,"Unregistering the userAlert "+alert.hashCode());
                                                node.alerts.unregister(alert);
                                        } else {

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-08-11 21:33:20 UTC (rev 
10042)
+++ trunk/freenet/src/freenet/node/Node.java    2006-08-12 00:24:31 UTC (rev 
10043)
@@ -617,6 +617,8 @@
        final ARKFetchManager arkFetchManager; // ready ARK Fetchers
        /** Directory to put node, peers, etc into */
        final File nodeDir;
+       /** Directory to put extra peer data into */
+       final File extraPeerDataDir;
        final File tempDir;
        public final RandomSource random; // strong RNG
        final UdpSocketManager usm;
@@ -657,6 +659,7 @@
        static final int EXIT_COULD_NOT_START_TMCI = 19;
        public static final int EXIT_DATABASE_REQUIRES_RESTART = 20;
        public static final int EXIT_COULD_NOT_START_UPDATER = 21;
+       static final int EXIT_EXTRA_PEER_DATA_DIR = 22;
        public static final int PEER_NODE_STATUS_CONNECTED = 1;
        public static final int PEER_NODE_STATUS_ROUTING_BACKED_OFF = 2;
        public static final int PEER_NODE_STATUS_TOO_NEW = 3;
@@ -668,6 +671,7 @@
        public static final int PEER_NODE_STATUS_LISTENING = 9;
        public static final int PEER_NODE_STATUS_LISTEN_ONLY = 10;
        public static final int N2N_TEXT_MESSAGE_TYPE_USERALERT = 1;
+       public static final int EXTRA_PEER_DATA_TYPE_N2NTM = 1;

        public final long bootID;
        public final long startupTime;
@@ -1439,6 +1443,24 @@
                        String msg = "Could not find or create persistent 
temporary directory";
                        throw new NodeInitException(EXIT_BAD_TEMP_DIR, msg);
                }
+
+               // Extra Peer Data Directory
+               nodeConfig.register("extraPeerDataDir", new File(nodeDir, 
"extra-peer-data-"+portNumber).toString(), sortOrder++, true, "Extra peer data 
directory", "Name of directory to put extra peer data in",
+                               new StringCallback() {
+                                       public String get() {
+                                               return 
extraPeerDataDir.getPath();
+                                       }
+                                       public void set(String val) throws 
InvalidConfigValueException {
+                                               if(extraPeerDataDir.equals(new 
File(val))) return;
+                                               // FIXME
+                                               throw new 
InvalidConfigValueException("Moving node directory on the fly not supported at 
present");
+                                       }
+               });
+               extraPeerDataDir = new 
File(nodeConfig.getString("extraPeerDataDir"));
+               if(!((extraPeerDataDir.exists() && 
extraPeerDataDir.isDirectory()) || (extraPeerDataDir.mkdir()))) {
+                       String msg = "Could not find or create extra peer data 
directory";
+                       throw new NodeInitException(EXIT_EXTRA_PEER_DATA_DIR, 
msg);
+               }

         // Name         
         nodeConfig.register("name", myName, sortOrder++, false, "Node name for 
darknet", "Node name; you may want to set this to something descriptive if 
running on darknet e.g. Fred Blogg's Node; it is visible to any connecting 
node",     
@@ -1922,7 +1944,10 @@
                                                // Not dismissable.
                                                return false;
                                        }
-                                       
+
+                                       public void onDismiss() {
+                                               // Not dismissable.
+                                       }
                                });
                        }
                }
@@ -1953,6 +1978,9 @@
                                arkPutter.start();
                        }
                }, 60*1000);
+               
+               // Process any data in the extra peer data directory
+               peers.readExtraPeerData();
        }

        private void shouldInsertARK() {
@@ -3662,7 +3690,40 @@
                String target_nodename = (String) 
m.getObject(DMT.TARGET_NODENAME);
                String text = (String) 
m.getObject(DMT.NODE_TO_NODE_MESSAGE_TEXT);
                Logger.normal(this, "Received N2NTM from '"+source_nodename+"' 
to '"+target_nodename+"': "+text);
-               N2NTMUserAlert userAlert = new N2NTMUserAlert(source, 
source_nodename, target_nodename, text);
+               SimpleFieldSet fs = new SimpleFieldSet();
+               fs.put("type", Integer.toString(type));
+               fs.put("source_nodename", 
Base64.encode(source_nodename.getBytes()));
+               fs.put("target_nodename", 
Base64.encode(target_nodename.getBytes()));
+               fs.put("text", Base64.encode(text.getBytes()));
+               int fileNumber = source.writeNewExtraPeerDataFile( fs, 
EXTRA_PEER_DATA_TYPE_N2NTM);
+               if( fileNumber == -1 ) {
+                       Logger.error( this, "Failed to write N2NTM to extra 
peer data file for peer "+source.getPeer());
+               }
+               // Keep track of the fileNumber so we can potentially delete 
the extra peer data file later, the file is authoritative
+               handleNodeToNodeTextMessageSimpleFieldSet(fs, source, 
fileNumber);
+         } else {
+               Logger.error(this, "Received unknown node to node message type 
'"+type+"' from "+source.getPeer());
+         }
+       }
+
+       /**
+        * Handle a node to node text message SimpleFieldSet
+        */
+       public void handleNodeToNodeTextMessageSimpleFieldSet(SimpleFieldSet 
fs, PeerNode source, int fileNumber) {
+         int type = new Integer(fs.get("type")).intValue();
+         if(type == Node.N2N_TEXT_MESSAGE_TYPE_USERALERT) {
+               String source_nodename = null;
+               String target_nodename = null;
+               String text = null;
+               try {
+                       source_nodename = new 
String(Base64.decode(fs.get("source_nodename")));
+                       target_nodename = new 
String(Base64.decode(fs.get("target_nodename")));
+                       text = new String(Base64.decode(fs.get("text")));
+               } catch (IllegalBase64Exception e) {
+                       Logger.error(this, "Bad Base64 encoding when decoding a 
N2NTM SimpleFieldSet", e);
+                       return;
+               }
+               N2NTMUserAlert userAlert = new N2NTMUserAlert(source, 
source_nodename, target_nodename, text, fileNumber);
                        alerts.register(userAlert);
          } else {
                Logger.error(this, "Received unknown node to node message type 
'"+type+"' from "+source.getPeer());
@@ -3882,4 +3943,8 @@
        public double pRejectIncomingInstantly() {
                return pInstantRejectIncoming.currentValue();
        }
+       
+       public String getExtraPeerDataDir() {
+               return extraPeerDataDir.getPath();
+       }
 }

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2006-08-11 21:33:20 UTC 
(rev 10042)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2006-08-12 00:24:31 UTC 
(rev 10043)
@@ -667,4 +667,23 @@
                return false;
        }

+       /**
+        * Ask each PeerNode to read in it's extra peer data
+        */
+       public void readExtraPeerData() {
+               PeerNode[] peers;
+               synchronized (this) {
+                       peers = myPeers;
+               }
+               for (int i = 0; i < peers.length; i++) {
+                       try {
+                               peers[i].readExtraPeerData();
+                       } catch (Exception e) {
+                               Logger.error(this, "Got exception while reading 
extra peer data", e);
+                       }
+               }
+               String msg = "Extra peer data reading and processing completed";
+               Logger.normal(this, msg);
+               System.out.println(msg);
+       }
 }

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-08-11 21:33:20 UTC 
(rev 10042)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-08-12 00:24:31 UTC 
(rev 10043)
@@ -2,8 +2,14 @@

 import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
+import java.io.EOFException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
 import java.io.UnsupportedEncodingException;
 import java.io.Writer;
 import java.net.MalformedURLException;
@@ -259,6 +265,9 @@

     /** True if we want to allow LAN/localhost addresses. */
     private boolean allowLocalAddresses;
+    
+    /** Extra peer data file numbers */
+    private Vector extraPeerDataFileNumbers;

     /** Average proportion of requests which are rejected or timed out */
     private TimeDecayingRunningAverage pRejected;
@@ -500,6 +509,10 @@

         // status may have changed from PEER_NODE_STATUS_DISCONNECTED to 
PEER_NODE_STATUS_NEVER_CONNECTED
         setPeerNodeStatus(now);
+
+               // Setup the extraPeerDataFileNumbers
+               extraPeerDataFileNumbers = new Vector();
+               extraPeerDataFileNumbers.removeAllElements();
     }

     private boolean parseARK(SimpleFieldSet fs, boolean onStartup) {
@@ -2326,4 +2339,184 @@
        public synchronized boolean allowLocalAddresses() {
                return allowLocalAddresses;
        }
+
+       public boolean readExtraPeerData() {
+               String extraPeerDataDirPath = node.getExtraPeerDataDir();
+               File extraPeerDataPeerDir = new 
File(extraPeerDataDirPath+File.separator+getIdentityString());
+               if(!extraPeerDataPeerDir.exists()) {
+                       return false;
+               }
+               if(!extraPeerDataPeerDir.isDirectory()) {
+                       Logger.error(this, "Extra peer data directory for peer 
not a directory: "+extraPeerDataPeerDir.getPath());
+                       return false;
+               }
+               File[] extraPeerDataFiles = extraPeerDataPeerDir.listFiles();
+               if(extraPeerDataFiles == null) {
+                       return false;
+               }
+               boolean gotError = false;
+               boolean readResult = false;
+               for (int i = 0; i < extraPeerDataFiles.length; i++) {
+                       Integer fileNumber = new Integer(-1);
+                       try {
+                               fileNumber = new 
Integer(extraPeerDataFiles[i].getName());
+                       } catch (NumberFormatException e) {
+                               gotError = true;
+                               continue;
+                       }
+                       synchronized(extraPeerDataFileNumbers) {
+                               
if(!extraPeerDataFileNumbers.contains(fileNumber)) {
+                                       
extraPeerDataFileNumbers.addElement(fileNumber);
+                               }
+                       }
+                       readResult = 
readExtraPeerDataFile(extraPeerDataFiles[i], fileNumber.intValue());
+                       if(!readResult) {
+                               gotError = true;
+                       }
+               }
+               return !gotError;
+       }
+
+       public boolean readExtraPeerDataFile(File extraPeerDataFile, int 
fileNumber) {
+               boolean gotError = false;
+               if(!extraPeerDataFile.exists()) {
+                       return false;
+               }
+               Logger.normal(this, "extraPeerDataFile: 
"+extraPeerDataFile.getPath());
+               FileInputStream fis;
+               try {
+                       fis = new FileInputStream(extraPeerDataFile);
+               } catch (FileNotFoundException e1) {
+                       Logger.normal(this, "Extra peer data file not found: 
"+extraPeerDataFile.getPath());
+                       return false;
+               }
+               InputStreamReader isr = new InputStreamReader(fis);
+               BufferedReader br = new BufferedReader(isr);
+               try {
+                       // Read in the single SimpleFieldSet
+                       SimpleFieldSet fs;
+                       fs = new SimpleFieldSet(br);
+                       boolean parseResult = false;
+                       try {
+                               parseResult = parseExtraPeerData(fs, 
extraPeerDataFile, fileNumber);
+                               if(!parseResult) {
+                                       gotError = true;
+                               }
+                       } catch (FSParseException e2) {
+                               Logger.error(this, "Could not parse extra peer 
data: "+e2+"\n"+fs.toString(),e2);
+                               gotError = true;
+                       }
+               } catch (EOFException e3) {
+                       // End of file, fine
+               } catch (IOException e4) {
+                       Logger.error(this, "Could not read extra peer data 
file: "+e4, e4);
+               } finally {
+                       try {
+                               br.close();
+                       } catch (IOException e5) {
+                               Logger.error(this, "Ignoring "+e5+" caught 
reading "+extraPeerDataFile.getPath(), e5);
+                       }
+               }
+               return !gotError;
+       }
+
+       private boolean parseExtraPeerData(SimpleFieldSet fs, File 
extraPeerDataFile, int fileNumber) throws FSParseException {
+               String extraPeerDataTypeString = fs.get("extraPeerDataType");
+               int extraPeerDataType = -1;
+               try {
+                       extraPeerDataType = 
Integer.parseInt(extraPeerDataTypeString);
+               } catch (NumberFormatException e) {
+                       Logger.error(this, "NumberFormatException parsing 
extraPeerDataType ("+extraPeerDataTypeString+") in file 
"+extraPeerDataFile.getPath());
+                       return false;
+               }
+               if(extraPeerDataType == Node.EXTRA_PEER_DATA_TYPE_N2NTM) {
+                       node.handleNodeToNodeTextMessageSimpleFieldSet(fs, 
this, fileNumber);
+                       return true;
+               }
+               Logger.error(this, "Read unknown extra peer data type 
'"+extraPeerDataType+"' from file "+extraPeerDataFile.getPath());
+               return false;
+       }
+
+       public int writeNewExtraPeerDataFile(SimpleFieldSet fs, int 
extraPeerDataType) {
+               String extraPeerDataDirPath = node.getExtraPeerDataDir();
+               if(extraPeerDataType > 0)
+                       fs.put("extraPeerDataType", 
Integer.toString(extraPeerDataType));
+               File extraPeerDataPeerDir = new 
File(extraPeerDataDirPath+File.separator+getIdentityString());
+               if(!extraPeerDataPeerDir.exists()) {
+                       if(!extraPeerDataPeerDir.mkdir()) {
+                               Logger.error(this, "Extra peer data directory 
for peer could not be created: "+extraPeerDataPeerDir.getPath());
+                               return -1;
+                       }
+               }
+               if(!extraPeerDataPeerDir.isDirectory()) {
+                       Logger.error(this, "Extra peer data directory for peer 
not a directory: "+extraPeerDataPeerDir.getPath());
+                       return -1;
+               }
+               Integer[] localFileNumbers = null;
+               int nextFileNumber = 0;
+               synchronized(extraPeerDataFileNumbers) {
+                       localFileNumbers = (Integer[]) 
extraPeerDataFileNumbers.toArray(new Integer[extraPeerDataFileNumbers.size()]);
+                       Arrays.sort(localFileNumbers);
+                       for (int i = 0; i < localFileNumbers.length; i++) {
+                               if(localFileNumbers[i].intValue() > 
nextFileNumber) {
+                                       break;
+                               }
+                               nextFileNumber = localFileNumbers[i].intValue() 
+ 1;
+                       }
+                       extraPeerDataFileNumbers.addElement(new 
Integer(nextFileNumber));
+               }
+               FileOutputStream fos;
+               File extraPeerDataPeerDataFile = new 
File(extraPeerDataPeerDir.getPath()+File.separator+nextFileNumber);
+               if(extraPeerDataPeerDataFile.exists()) {
+                       Logger.error(this, "Extra peer data file already 
exists: "+extraPeerDataPeerDataFile.getPath());
+                       return -1;
+               }
+               String f = extraPeerDataPeerDataFile.getPath();
+               try {
+                       fos = new FileOutputStream(f);
+               } catch (FileNotFoundException e2) {
+                       Logger.error(this, "Cannot write extra peer data file 
to disk: Cannot create "
+                                       + f + " - " + e2, e2);
+                       return -1;
+               }
+               OutputStreamWriter w = new OutputStreamWriter(fos);
+               try {
+                       fs.writeTo(w);
+                       w.close();
+               } catch (IOException e) {
+                       try {
+                               w.close();
+                       } catch (IOException e1) {
+                               Logger.error(this, "Cannot close extra peer 
data file: "+e, e);
+                       }
+                       Logger.error(this, "Cannot write file: " + e, e);
+                       return -1;
+               }
+               return nextFileNumber;
+       }
+
+       public void deleteExtraPeerDataFile(int fileNumber) {
+               String extraPeerDataDirPath = node.getExtraPeerDataDir();
+               File extraPeerDataPeerDir = new 
File(extraPeerDataDirPath+File.separator+getIdentityString());
+               if(!extraPeerDataPeerDir.exists()) {
+                       Logger.error(this, "Extra peer data directory for peer 
does not exist: "+extraPeerDataPeerDir.getPath());
+                       return;
+               }
+               if(!extraPeerDataPeerDir.isDirectory()) {
+                       Logger.error(this, "Extra peer data directory for peer 
not a directory: "+extraPeerDataPeerDir.getPath());
+                       return;
+               }
+               File extraPeerDataFile = new 
File(extraPeerDataDirPath+File.separator+getIdentityString()+File.separator+fileNumber);
+               if(!extraPeerDataFile.exists()) {
+                       Logger.error(this, "Extra peer data directory for peer 
does not exist: "+extraPeerDataFile.getPath());
+                       return;
+               }
+               synchronized(extraPeerDataFileNumbers) {
+                       if(extraPeerDataFileNumbers.contains(new 
Integer(fileNumber))) {
+                               extraPeerDataFileNumbers.removeElement(new 
Integer(fileNumber));
+                       }
+               }
+               extraPeerDataFile.delete();
+       }
 }
+       
\ No newline at end of file

Modified: trunk/freenet/src/freenet/node/useralerts/BuildOldAgeUserAlert.java
===================================================================
--- trunk/freenet/src/freenet/node/useralerts/BuildOldAgeUserAlert.java 
2006-08-11 21:33:20 UTC (rev 10042)
+++ trunk/freenet/src/freenet/node/useralerts/BuildOldAgeUserAlert.java 
2006-08-12 00:24:31 UTC (rev 10043)
@@ -50,4 +50,8 @@
        public boolean shouldUnregisterOnDismiss() {
                return false;
        }
+       
+       public void onDismiss() {
+               // do nothing on alert dismissal
+       }
 }

Modified: trunk/freenet/src/freenet/node/useralerts/ExtOldAgeUserAlert.java
===================================================================
--- trunk/freenet/src/freenet/node/useralerts/ExtOldAgeUserAlert.java   
2006-08-11 21:33:20 UTC (rev 10042)
+++ trunk/freenet/src/freenet/node/useralerts/ExtOldAgeUserAlert.java   
2006-08-12 00:24:31 UTC (rev 10043)
@@ -42,4 +42,8 @@
        public boolean shouldUnregisterOnDismiss() {
                return true;
        }
+       
+       public void onDismiss() {
+               // do nothing on alert dismissal
+       }
 }

Modified: trunk/freenet/src/freenet/node/useralerts/IPUndetectedUserAlert.java
===================================================================
--- trunk/freenet/src/freenet/node/useralerts/IPUndetectedUserAlert.java        
2006-08-11 21:33:20 UTC (rev 10042)
+++ trunk/freenet/src/freenet/node/useralerts/IPUndetectedUserAlert.java        
2006-08-12 00:24:31 UTC (rev 10043)
@@ -50,4 +50,8 @@
        public boolean shouldUnregisterOnDismiss() {
                return false;
        }
+       
+       public void onDismiss() {
+               // do nothing on alert dismissal
+       }
 }

Modified: 
trunk/freenet/src/freenet/node/useralerts/MeaningfulNodeNameUserAlert.java
===================================================================
--- trunk/freenet/src/freenet/node/useralerts/MeaningfulNodeNameUserAlert.java  
2006-08-11 21:33:20 UTC (rev 10042)
+++ trunk/freenet/src/freenet/node/useralerts/MeaningfulNodeNameUserAlert.java  
2006-08-12 00:24:31 UTC (rev 10043)
@@ -96,4 +96,8 @@
        public boolean shouldUnregisterOnDismiss() {
                return false;
        }
+       
+       public void onDismiss() {
+               // do nothing on alert dismissal
+       }
 }

Modified: trunk/freenet/src/freenet/node/useralerts/N2NTMUserAlert.java
===================================================================
--- trunk/freenet/src/freenet/node/useralerts/N2NTMUserAlert.java       
2006-08-11 21:33:20 UTC (rev 10042)
+++ trunk/freenet/src/freenet/node/useralerts/N2NTMUserAlert.java       
2006-08-12 00:24:31 UTC (rev 10043)
@@ -11,12 +11,14 @@
        private String sourceNodename;
        private String targetNodename;
        private String messageText;
+       private int fileNumber;

-       public N2NTMUserAlert(PeerNode sourcePeerNode, String source, String 
target, String message) {
+       public N2NTMUserAlert(PeerNode sourcePeerNode, String source, String 
target, String message, int fileNumber) {
          this.sourcePeerNode = sourcePeerNode;
                this.sourceNodename = source;
                this.targetNodename = target;
                this.messageText = message;
+               this.fileNumber = fileNumber;
                isValid=true;
        }

@@ -39,7 +41,7 @@
                  else
                    messageTextBuf2.append(ch);
                }
-    String replyString = "<a 
href=\"/send_n2ntm/?peernode_hashcode="+sourcePeerNode.hashCode()+"\">Reply</a><br
 /><br />";
+               String replyString = "<a 
href=\"/send_n2ntm/?peernode_hashcode="+sourcePeerNode.hashCode()+"\">Reply</a><br
 /><br />";
                String s;
                s = "From: &lt;"+HTMLEncoder.encode(sourceNodename)+"&gt;<br 
/>To: &lt;"+HTMLEncoder.encode(targetNodename)+"&gt;<hr /><br /><br 
/>"+messageTextBuf2+"<br /><br />"+replyString;
                return s;
@@ -75,4 +77,8 @@
        public boolean shouldUnregisterOnDismiss() {
                return true;
        }
+       
+       public void onDismiss() {
+               sourcePeerNode.deleteExtraPeerDataFile(fileNumber);
+       }
 }

Modified: trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java
===================================================================
--- trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java 
2006-08-11 21:33:20 UTC (rev 10042)
+++ trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java 
2006-08-12 00:24:31 UTC (rev 10043)
@@ -190,4 +190,8 @@
        public boolean shouldUnregisterOnDismiss() {
                return false;
        }
+       
+       public void onDismiss() {
+               // do nothing on alert dismissal
+       }
 }

Modified: 
trunk/freenet/src/freenet/node/useralerts/RevocationKeyFoundUserAlert.java
===================================================================
--- trunk/freenet/src/freenet/node/useralerts/RevocationKeyFoundUserAlert.java  
2006-08-11 21:33:20 UTC (rev 10042)
+++ trunk/freenet/src/freenet/node/useralerts/RevocationKeyFoundUserAlert.java  
2006-08-12 00:24:31 UTC (rev 10043)
@@ -50,4 +50,8 @@
        public boolean shouldUnregisterOnDismiss() {
                return false;
        }
+       
+       public void onDismiss() {
+               // do nothing on alert dismissal
+       }
 }

Modified: trunk/freenet/src/freenet/node/useralerts/SimpleUserAlert.java
===================================================================
--- trunk/freenet/src/freenet/node/useralerts/SimpleUserAlert.java      
2006-08-11 21:33:20 UTC (rev 10042)
+++ trunk/freenet/src/freenet/node/useralerts/SimpleUserAlert.java      
2006-08-12 00:24:31 UTC (rev 10043)
@@ -51,5 +51,8 @@
        public boolean shouldUnregisterOnDismiss() {
                return true;
        }
-
+       
+       public void onDismiss() {
+               // do nothing on alert dismissal
+       }
 }

Modified: 
trunk/freenet/src/freenet/node/useralerts/UpdatedVersionAvailableUserAlert.java
===================================================================
--- 
trunk/freenet/src/freenet/node/useralerts/UpdatedVersionAvailableUserAlert.java 
    2006-08-11 21:33:20 UTC (rev 10042)
+++ 
trunk/freenet/src/freenet/node/useralerts/UpdatedVersionAvailableUserAlert.java 
    2006-08-12 00:24:31 UTC (rev 10043)
@@ -83,4 +83,8 @@
        public boolean shouldUnregisterOnDismiss() {
                return false;
        }
+       
+       public void onDismiss() {
+               // do nothing on alert dismissal
+       }
 }

Modified: trunk/freenet/src/freenet/node/useralerts/UserAlert.java
===================================================================
--- trunk/freenet/src/freenet/node/useralerts/UserAlert.java    2006-08-11 
21:33:20 UTC (rev 10042)
+++ trunk/freenet/src/freenet/node/useralerts/UserAlert.java    2006-08-12 
00:24:31 UTC (rev 10043)
@@ -42,6 +42,11 @@

        public boolean shouldUnregisterOnDismiss();

+       /**
+        * Method to be called upon alert dismissal
+        */
+       public void onDismiss();
+       
        /** An error which prevents normal operation */
        public final static short CRITICAL_ERROR = 0;
        /** An error which prevents normal operation but might be temporary */


Reply via email to