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: <"+HTMLEncoder.encode(sourceNodename)+"><br
/>To: <"+HTMLEncoder.encode(targetNodename)+"><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 */