Author: dbkr
Date: 2006-06-03 23:27:44 +0000 (Sat, 03 Jun 2006)
New Revision: 9032
Modified:
trunk/apps/fnmail/src/fnmail/FNMail.java
trunk/apps/fnmail/src/fnmail/MessageSender.java
trunk/apps/fnmail/src/fnmail/fcp/FCPMessage.java
trunk/apps/fnmail/src/fnmail/smtp/SMTPHandler.java
Log:
Use a temporary directory in the same place as the data directory so we can
rename files (more atomic)
Modified: trunk/apps/fnmail/src/fnmail/FNMail.java
===================================================================
--- trunk/apps/fnmail/src/fnmail/FNMail.java 2006-06-03 19:40:15 UTC (rev
9031)
+++ trunk/apps/fnmail/src/fnmail/FNMail.java 2006-06-03 23:27:44 UTC (rev
9032)
@@ -8,7 +8,15 @@
import fnmail.imap.IMAPListener;
import fnmail.smtp.SMTPListener;
-class FNMail {
+public class FNMail {
+ private static final String TEMPDIRNAME = "temp";
+ private static File datadir;
+ private static File tempdir;
+
+ public static File getTempDir() {
+ return FNMail.tempdir;
+ }
+
public static void main(String[] args) {
String fcphost = "localhost";
int fcpport = 9481;
@@ -72,13 +80,24 @@
fcpthread.start();
// start a SingleAccountWatcher for each account
- File dir = new File("data");
- if (!dir.exists()) {
+ FNMail.datadir = new File("data");
+ if (!FNMail.datadir.exists()) {
System.out.println("Starting fnmail for the first
time.");
System.out.println("You will probably want to add an
account by running fnmail with arguments --newaccount <username>");
- dir.mkdir();
+ if (!FNMail.datadir.mkdir()) {
+ System.out.println("Couldn't create data
directory. Please ensure that the user you are running fnmail as has write
access to its working directory");
+ System.exit(1);
+ }
}
- File[] files = dir.listFiles();
+ FNMail.tempdir = new File(FNMail.TEMPDIRNAME);
+ if (!FNMail.tempdir.exists()) {
+ if (!FNMail.tempdir.mkdir()) {
+ System.out.println("Couldn't create temporary
directory. Please ensure that the user you are running fnmail as has write
access to its working directory");
+ System.exit(1);
+ }
+ }
+
+ File[] files = FNMail.datadir.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].getName().equals(".") ||
files[i].getName().equals(".."))
continue;
@@ -89,7 +108,7 @@
}
// and a sender thread
- MessageSender sender = new MessageSender(dir, fcpconn);
+ MessageSender sender = new MessageSender(FNMail.datadir,
fcpconn);
Thread senderthread = new Thread(sender);
senderthread.setDaemon(true);
senderthread.start();
Modified: trunk/apps/fnmail/src/fnmail/MessageSender.java
===================================================================
--- trunk/apps/fnmail/src/fnmail/MessageSender.java 2006-06-03 19:40:15 UTC
(rev 9031)
+++ trunk/apps/fnmail/src/fnmail/MessageSender.java 2006-06-03 23:27:44 UTC
(rev 9032)
@@ -19,17 +19,17 @@
public static final String OUTBOX_DIR = "outbox";
public static final int MIN_RUN_TIME = 60000;
public static final String NIM_KEY_PREFIX = "KSK at fnmail-nim-";
- private final File dir;
+ private final File datadir;
private final FCPConnection fcpconn;
private Thread senderthread;
public MessageSender(File d, FCPConnection conn) {
- this.dir = d;
+ this.datadir = d;
this.fcpconn = conn;
}
public void send_message(String from_user, Vector to, File msg) throws
IOException {
- File user_dir = new File(this.dir, from_user);
+ File user_dir = new File(this.datadir, from_user);
File outbox = new File(user_dir, OUTBOX_DIR);
Enumeration e = to.elements();
@@ -42,7 +42,7 @@
}
private synchronized void copyToOutbox(File src, File outbox, String
to) throws IOException {
- File tempfile = File.createTempFile("fmail-msg-tmp", null);
+ File tempfile = File.createTempFile("fmail-msg-tmp", null,
FNMail.getTempDir());
FileOutputStream fos = new FileOutputStream(tempfile);
FileInputStream fis = new FileInputStream(src);
@@ -72,7 +72,7 @@
long start = System.currentTimeMillis();
// iterate through users
- File[] files = dir.listFiles();
+ File[] files = this.datadir.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].getName().startsWith("."))
continue;
Modified: trunk/apps/fnmail/src/fnmail/fcp/FCPMessage.java
===================================================================
--- trunk/apps/fnmail/src/fnmail/fcp/FCPMessage.java 2006-06-03 19:40:15 UTC
(rev 9031)
+++ trunk/apps/fnmail/src/fnmail/fcp/FCPMessage.java 2006-06-03 23:27:44 UTC
(rev 9032)
@@ -9,6 +9,8 @@
import java.util.Enumeration;
import java.util.Collections;
+import fnmail.FNMail;
+
import freenet.support.io.LineReader;
import freenet.support.io.LineReadingInputStream;
@@ -83,7 +85,7 @@
private void readData(InputStream is, int len) {
try {
- this.data = File.createTempFile("fnmail-fcp", null);
+ this.data = File.createTempFile("fnmail-fcp", null,
FNMail.getTempDir());
} catch (Exception e) {
this.data = null;
return;
Modified: trunk/apps/fnmail/src/fnmail/smtp/SMTPHandler.java
===================================================================
--- trunk/apps/fnmail/src/fnmail/smtp/SMTPHandler.java 2006-06-03 19:40:15 UTC
(rev 9031)
+++ trunk/apps/fnmail/src/fnmail/smtp/SMTPHandler.java 2006-06-03 23:27:44 UTC
(rev 9032)
@@ -12,6 +12,7 @@
import java.util.Vector;
import thirdparty.Base64Coder;
+import fnmail.FNMail;
import fnmail.AccountManager;
import fnmail.MessageSender;
import fnmail.utils.EmailAddress;
@@ -231,7 +232,7 @@
}
try {
- File tempfile = File.createTempFile("fnmail-",
".message");
+ File tempfile = File.createTempFile("fnmail-",
".message", FNMail.getTempDir());
PrintWriter pw = new PrintWriter(new
FileOutputStream(tempfile));
this.ps.print("354 Go crazy\r\n");